如何在Jenkins中为Docker镜像打版本并传递给Kubernetes YAML文件
Jenkins流水线传递BUILD_NUMBER到K8s部署文件的实现方案
- 方案1:使用
kubectl set image直接更新镜像标签(最简便,无需修改yaml文件)
如果每次部署仅需要更新镜像标签,不需要修改其他部署配置,直接在SSH命令中传入解析后的BUILD_NUMBER更新deployment即可,不需要修改现有yaml文件:
# 替换hybris-deployment为你的deployment名称,hybris为对应容器名称 ssh -tt root@10.10.10.4 "kubectl set image deployment/hybris-deployment hybris=test123/demo:$BUILD_NUMBER"
注意SSH命令使用双引号包裹,Jenkins会在发送命令前将$BUILD_NUMBER解析为当前构建的实际数值再传到远程节点。
- 方案2:yaml打占位符,远程执行时替换
先修改hybris-deployment.yaml中的镜像行,设置占位符:
# 原有镜像行修改为该格式 image: test123/demo:__BUILD_NUMBER__
修改Jenkins流水线的SSH命令,传入BUILD_NUMBER后远程替换占位符再执行部署:
ssh -tt root@10.10.10.4 "BUILD_NUM=$BUILD_NUMBER && sed -i 's/__BUILD_NUMBER__/'\$BUILD_NUM'/g' hybris-deployment.yaml && kubectl apply -f hybris-deployment.yaml"
- 方案3:Jenkins侧替换yaml后传到远程节点
如果不想在K8s节点上修改部署文件,可先在Jenkins构建节点替换好yaml内容,再传到远程执行部署:
# 本地替换yaml占位符 sed -i "s/__BUILD_NUMBER__/$BUILD_NUMBER/g" hybris-deployment.yaml # 传输替换后的yaml到k8s节点 scp hybris-deployment.yaml root@10.10.10.4:/root/ # 执行部署 ssh -tt root@10.10.10.4 'kubectl apply -f /root/hybris-deployment.yaml'
注意:如果需要保留远程yaml的原始占位符格式,可在方案2替换前先备份原始文件,或者执行完apply后回滚占位符即可
内容的提问来源于stack exchange,提问作者yatta
相关产品推荐
相关产品推荐

