如何仅为Jenkins流水线post条件指定K8s集群上的执行容器/agent
解决方法
你可以在post的执行块中嵌套script块,通过Kubernetes插件的podTemplate临时定义仅该步骤使用的agent,配置你提前准备好的Python依赖镜像即可,该配置作用域仅限当前post步骤,不会对流水线其他阶段产生任何影响。
改后完整post配置示例
post { failure { echo "job failed" } success { echo "job succeeded" } always { script { // 临时定义仅本步骤使用的K8s Pod模板 podTemplate( cloud: '你的K8s云配置名称', // 如果你Jenkins配置的K8s云名是默认的kubernetes可以不填 containers: [ containerTemplate( name: 'python-executor', image: '你准备好的带Python/pip的Docker镜像地址', // 替换成你的镜像地址 ttyEnabled: true, command: 'cat' ) ] ) { node(POD_LABEL) { // 绑定上面定义的临时Pod模板 container('python-executor') { // 切换到指定容器内执行 // 这里执行你的发邮件Python脚本 sh 'python3 /path/to/your/send_email.py' } } } } } }
注意事项
- 请提前确认你的Jenkins已经安装Kubernetes插件,且K8s集群有权限拉取你使用的Python镜像
- 如果你的镜像里已经内置了发邮件脚本,就不需要额外拉取脚本文件;如果脚本在当前流水线的工作区,需要确保工作区内容可以被该临时agent访问,可以通过
stash/unstash在之前的阶段把脚本存起来,post阶段取出即可 - 如果你不需要用K8s动态Pod,只是要在任意可用agent上用Docker镜像执行,可以直接把上面podTemplate的部分替换成
docker.image('你的镜像地址').inside { 执行脚本 }即可,前提是对应agent已经配置好Docker环境
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

