热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在kubernetes上的JenkinsfileMaven构建中正确覆盖“settings.xml”吗?

我们正在Kubernetes集群(如果需要的话,Rancher)上建立基于Jenkins的CI管道,到目前

我们正在Kubernetes集群(如果需要的话,Rancher)上建立基于Jenkins的CI管道,到目前为止,我们已经使用官方maven:3-jdk-11-slim图像进行实验。不幸的是,它没有提供任何内置方法来覆盖默认的settings.xml以使用镜像,这是我们需要的-最好仅通过设置环境变量即可。我对kubernetes不太熟悉,所以我可能缺少一些简单的东西。

有没有简单的方法可以向图像添加文件?我是否应该使用内置此功能的其他图像?


pipeline {
agent {
kubernetes {
yaml """
kind: pod
metadata:
name: kaniko
spec:
containers:
- name: maven
image: maven:3-jdk-11-slim
command:
- cat
tty: true
- name: kaniko
.... etc


如果要覆盖pod中的文件,可以使用ConfigMap来存储更改的文件并挂载它,而不是以前的文件。

您可以使用

从文件创建ConfigMap。

kubectl create configmap settings-xml --from-file=settings.xml

您的pod定义可能如下所示:

apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
containers:
- name: maven
image: maven:3-jdk-11-slim
command:
- cat
tty: true
volumeMounts:
- name: config-settings
mountPath: /usr/share/maven/ref/settings.xml
volumes:
- name: config-settings
configMap:
# Provide the name of the ConfigMap containing the files you want
# to add to the container
name: settings-xml
...

,

摘要:您可以在特定位置将您的 settings.xml文件安装在Pod上,并通过命令mvn -s /my/path/to/settings.xml使用该文件。

Crou的ConfigMap方法是一种实现方法。但是,由于settings.xml文件通常包含凭据,因此我将其视为Secrets。

您可以使用以下命令在Kubernetes中创建一个秘密:

$ kubectl create secret generic mvn-settings --from-file=settings.xml=./settings.xml

广告连播定义如下:

apiVersion: v1
kind: Pod
metadata:
name: kaniko
spec:
containers:
- name: maven
image: maven:3-jdk-11-slim
command:
- cat
tty: true
volumeMounts:
- name: mvn-settings-vol
mountPath: /my/path/to
volumes:
- name: mvn-settings-vol
secret:
secretName: mvn-settings

高级/可选:如果您练习“将基础结构作为代码”,则可能要保存该秘密的清单文件以进行恢复。这可以在秘密创建后通过以下命令实现:

$ kubectl get secrets mvn-settings -o yaml

您可以保留secrets.yml文件,但不要签入任何VCS / Github存储库,因为此版本的secrets.yml包含未加密的数据。

某些k8s管理员可能已安装kubeseal。在这种情况下,我建议使用kubeseal获取secrets.yml的加密版本。

$ kubectl create secret generic mvn-settings --from-file=settings.xml=./settings.xml --dry-run -o json | kubeseal --controller-name=controller --controller-namespace=k8s-sealed-secrets --format=yaml >secrets.yml
# Actually create secrets
$ kubectl apply -f secrets.yml

controller-namecontroller-namespace应该从k8s管理员那里获得。
secrets.yml包含您的settings.xml的加密数据,可以安全地签入VCS / Github存储库中。

,

这对我有用:


  • 安装配置文件提供程序插件

  • 转到“管理Jenkins”>“配置文件管理”>添加新配置,并在此处插入您的settings.xml

  • 在您的jenkins文件中,只需将rtMavenRun放在configFileProvider块中,然后将与您之前创建的jenkins配置文件相同的fileId放进去

stage('Build Maven') {
steps {
configFileProvider([configFile(fileId: 'MavenArtifactorySettingId',variable: 'MAVEN_SETTINGS_XML')]) {
retry(count: 3) {
rtMavenRun(
tool: "Maven 3.6.2",//id specified in Global Tool Configuration
pom: 'pom.xml',goals: '-U -s $MAVEN_SETTINGS_XML clean install',)
}
}
}
}

如果您想了解更多信息,这正是我使用的管道:https://gist.github.com/robertobatts/42da9069e13b61a238f51c36754de97b

,

如果您使用代码对项目的settings.xml进行了版本控制,则可以使用 sh 步骤使用mvn install -s settings.xml进行构建。这是我在工作中所做的。如果settings.xml没有随项目一起版本化,那么使用Crou的解决方案来挂载文件确实很有意义。

回答您的问题“我是否应该使用内置此功能的其他图像?”我建议避免最大程度地构建自定义图像,因为您最终将不得不对其进行维护


推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 寻求更强大的身份和访问管理(IAM)平台的企业正在转向云,并接受身份即服务(IDaaS)的灵活性。要为IAM选择正确的场外解决方案,业务管理人员和IT专业人员必须在实施之前评估安全 ... [详细]
  • docker+k8s+git+jenkins
    docker+k8s+git+jenkins,Go语言社区,Golang程序员人脉社 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了在交换型网络环境下使用嗅探器ARPSniffer的方法,包括检测嗅探环境、设置嗅探的网卡和启动自动路由功能等步骤。同时指出ARPSniffer也可以在非交换型网络环境下使用来嗅探各种网络信息。 ... [详细]
author-avatar
长风剑客2502852893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有