作者:长风剑客2502852893 | 来源:互联网 | 2023-08-17 21:20
我们正在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-name
和controller-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的解决方案来挂载文件确实很有意义。
回答您的问题“我是否应该使用内置此功能的其他图像?”我建议避免最大程度地构建自定义图像,因为您最终将不得不对其进行维护