You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Kubernetes集群作业未用指定镜像,默认运行jnlp镜像求助

问题解决:让Jenkins作业运行在指定的Kubernetes容器镜像中

问题原因

从你的Pod日志可以看到,Kubernetes为Jenkins Agent创建了两个容器:

  • 一个是你指定的jstevnsvig/jenkins-build-slave-php:v8.2(容器名php8t),当前仅执行sleep命令维持运行
  • 另一个是默认的jenkins/inbound-agent jnlp容器,负责和Jenkins主节点建立连接

Jenkins默认会在jnlp容器中执行所有作业脚本,所以你看到的是jnlp镜像的输出,而非你的PHP镜像。

解决方案

方法一:单作业指定执行容器(快速临时方案)

针对单个自由风格作业,直接指定脚本运行的容器:

  1. 打开作业配置页面,找到构建步骤中的「执行shell」(或对应脚本步骤)
  2. 点击步骤右侧的「高级」按钮
  3. 在弹出的选项中,找到「容器」下拉框,选择你的PHP容器名称php8t
  4. 保存配置后重新运行作业,脚本就会在指定的PHP容器中执行

方法二:修改Pod模板,让PHP容器作为默认代理容器(推荐长期方案)

你的PHP镜像基于jenkins/agent,本身支持JNLP代理连接,只需调整Pod模板配置,让它替代默认的jnlp容器:

  1. 进入Jenkins的Kubernetes云配置,找到对应的php8 Pod模板
  2. 删除原有的jnlp容器模板
  3. 修改你的PHP容器模板:
    • 将容器名称改为jnlp(Jenkins默认会识别这个名称的容器作为代理执行容器)
    • 把Command从sleep改成/usr/local/bin/jenkins-agent(这是jenkins/agent镜像的默认代理启动命令)
    • 删除手动设置的Args(Jenkins会自动注入JNLP连接所需的参数)
    • 保留或让Jenkins自动填充JNLP相关环境变量(如JENKINS_PROTOCOLS、JENKINS_SECRET等)
  4. 保存配置后,重新触发作业,此时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:15:12