Jenkins Kubernetes集群作业未用指定镜像,默认运行jnlp镜像求助
问题解决:让Jenkins作业运行在指定的Kubernetes容器镜像中
问题原因
从你的Pod日志可以看到,Kubernetes为Jenkins Agent创建了两个容器:
- 一个是你指定的
jstevnsvig/jenkins-build-slave-php:v8.2(容器名php8t),当前仅执行sleep命令维持运行 - 另一个是默认的
jenkins/inbound-agentjnlp容器,负责和Jenkins主节点建立连接
Jenkins默认会在jnlp容器中执行所有作业脚本,所以你看到的是jnlp镜像的输出,而非你的PHP镜像。
解决方案
方法一:单作业指定执行容器(快速临时方案)
针对单个自由风格作业,直接指定脚本运行的容器:
- 打开作业配置页面,找到构建步骤中的「执行shell」(或对应脚本步骤)
- 点击步骤右侧的「高级」按钮
- 在弹出的选项中,找到「容器」下拉框,选择你的PHP容器名称
php8t - 保存配置后重新运行作业,脚本就会在指定的PHP容器中执行
方法二:修改Pod模板,让PHP容器作为默认代理容器(推荐长期方案)
你的PHP镜像基于jenkins/agent,本身支持JNLP代理连接,只需调整Pod模板配置,让它替代默认的jnlp容器:
- 进入Jenkins的Kubernetes云配置,找到对应的
php8Pod模板 - 删除原有的
jnlp容器模板 - 修改你的PHP容器模板:
- 将容器名称改为
jnlp(Jenkins默认会识别这个名称的容器作为代理执行容器) - 把Command从
sleep改成/usr/local/bin/jenkins-agent(这是jenkins/agent镜像的默认代理启动命令) - 删除手动设置的Args(Jenkins会自动注入JNLP连接所需的参数)
- 保留或让Jenkins自动填充JNLP相关环境变量(如
JENKINS_PROTOCOLS、JENKINS_SECRET等)
- 将容器名称改为
- 保存配置后,重新触发作业,此时Pod只会启动你的PHP容器,脚本默认在这个容器中执行,同时能正常和Jenkins主节点建立连接
验证
修改完成后,重新运行作业执行dpkg-query -l | cat,输出应该和你本地执行docker run -it jstevnsvig/jenkins-build-slave-php:v8.2 /bin/sh -c "dpkg-query -l | cat"的结果一致。
内容的提问来源于stack exchange,提问作者JoSSte
相关产品推荐
相关产品推荐

