我们正在使用terraform和Jenkins配置作为yaml文件来部署Jenkins。在定义Kubernetes Pod模板时,无论是将command
和args
设置为空字符串还是完全不提供它,在部署Jenkins或刷新新配置后,两个值都默认为:
command: /bin/sh -c
args: cat
这是我的yaml文件的示例,该文件具有容器及其容器的配置:
- kubernetes:
name: "kubernetes"
serverUrl: "https://kubernetes.default"
skipTlsVerify: true
namespace: "default"
credentialsId: "kubernetes_credentials"
jenkinsUrl: "http://jenkins:8080"
jenkinsTunnel: "jenkins-agent:50000"
connectTimeout: 0
readTimeout: 0
containerCapStr: 50
maxRequestsPerHostStr: 64
retentionTimeout: 5
templates:
- name: "default"
namespace: "default"
label: "jenkins-slave"
nodeUsageMode: "NORMAL"
containers:
- name: "jnlp"
image: "dtr.mydomain.com/build-tools/jenkins-build-agent:latest"
alwaysPullImage: true
workingDir: "/home/jenkins"
ttyEnabled: true
resourceRequestCpu: "200m"
resourceLimitCpu: "4"
resourceRequestMemory: "1Gi"
resourceLimitMemory: "16Gi"
- name: "dind-daemon"
image: "dtr.mydomain.com/build-tools/jenkins-build-agent-dind:1.0.0"
workingDir: "/opt"
resourceRequestCpu: "20m"
resourceRequestMemory: "512Mi"
privileged: true
- name: "mongodb"
image: "mongo"
workingDir: "/opt/mongo"
resourceRequestCpu: "20m"
resourceRequestMemory: "512Mi"
privileged: true
command: ""
args: ""
如您在最后一个容器中看到的,我们将command和args设置为空字符串
command: ""
args: ""
但是仍然,当我们去詹金斯时,它们默认设置为/bin/sh -c
和cat
,这会引起问题,因为构建容器应该无限运行而不是立即退出,并且默认命令会覆盖在中定义的命令Dockerfile
的docker镜像。
注意:我们已经在构建docker映像的Dockerfile
中设置了以下命令:
CMD ["sleep", "infinity"]
因此,现在每次我们重新部署Jenkins时,都必须在Jenkins用户界面中手动删除command
和args
。这是一个错误还是我们在这里缺少什么?我们可以将命令设置为sleep
,将args设置为infinity
,就像我们在Dockerfile
中设置它们的方式一样,但是我宁愿将它们保留在Dockerfile中自己的映像中,而不污染Jenkins配置
有人遇到类似的问题吗?请分享。
Kubernetes插件版本:1.12.4
Jenkins版本:2.150