如何调整Jenkinsfile中ContainerTemplate配置拉取私有镜像仓库镜像
解决方案
以下是两种可直接落地的配置方案:
方式1:直接在Pod模板中配置镜像拉取Secret(推荐,灵活可控)
第一步:提前在K8s集群创建私有仓库认证Secret
首先在Jenkins代理Pod运行的Namespace下执行命令创建Docker认证Secret:kubectl create secret docker-registry regcred --docker-server=my-private-registry --docker-username=你的仓库账号 --docker-password=你的仓库密码
注意:把命令中my-private-registry替换为你实际的私有镜像仓库域名/地址,regcred是Secret名称可自定义
第二步:修改Jenkinsfile的Kubernetes Pod配置
在Pod的spec字段下添加imagePullSecrets配置,修改后的完整代码如下:
pipeline { agent { kubernetes { label "${jenkins_slave_id}" defaultContainer 'jnlp' serviceAccount 'jenkins' yaml """ apiVersion: v1 kind: Pod spec: restartPolicy: Never # 新增镜像拉取凭证配置 imagePullSecrets: - name: regcred containers: - name: "my-private-container" image: "my-private-registry.image-name:tag" tty: true command: - cat volumeMounts: - name: docker-socket mountPath: /var/run/docker.sock - name: "jnlp" """ } } stages { stage("Do something") { steps { script { container('my-private-container') { script { //Do something } } } } }
方式2:将Secret绑定到Jenkins使用的ServiceAccount(无需修改每个Jenkinsfile)
如果你所有Jenkins任务都需要拉取同一个私有仓库的镜像,可以直接把认证Secret绑定到你当前用的jenkins ServiceAccount上,所有用这个SA创建的代理Pod都会自动携带拉取凭证,不需要修改Pod模板:
执行命令绑定:kubectl patch serviceaccount jenkins -p '{"imagePullSecrets": [{"name": "regcred"}]}' -n <Jenkins所在的Namespace>
绑定完成后原Jenkinsfile无需任何修改即可正常拉取私有镜像。
注意事项
- 认证Secret必须和Jenkins代理Pod运行在同一个Namespace下
- 如果私有镜像仓库是HTTP协议,需要提前在K8s节点的Docker/Containerd配置中添加该仓库为信任仓库
内容的提问来源于stack exchange,提问作者GreenJenks
相关产品推荐
相关产品推荐

