Jenkins流水线传参问题:如何获取service-docker-build返回的IMAGE_TAG?
解决Jenkins流水线间传递变量的问题
问题原因
你在service-docker-build里定义的IMAGE_TAG是普通局部变量,Jenkins不会自动将这类变量暴露给调用它的流水线,所以调用方获取到的结果为null。
正确实现方式
1. 修改被调用流水线(service-docker-build)
需要把IMAGE_TAG存入Jenkins的环境变量,或者显式设置为可传递的构建变量,两种方案任选其一:
// 方案一:存入环境变量(推荐,适配绝大多数Jenkins版本) env.IMAGE_TAG = Globals.nexus3PrdUrl.replaceAll("^https?://", "") + "/" + Globals.image.imageName() // 方案二:显式设置构建变量(兼容部分旧版本Jenkins) currentBuild.setBuildVariables([IMAGE_TAG: Globals.nexus3PrdUrl.replaceAll("^https?://", "") + "/" + Globals.image.imageName()])
如果service-docker-build是声明式流水线,需要用script块包裹变量设置代码:
pipeline { agent any stages { stage('Build') { steps { script { env.IMAGE_TAG = Globals.nexus3PrdUrl.replaceAll("^https?://", "") + "/" + Globals.image.imageName() } } } } }
2. 调用方流水线(C)代码保持不变
你原有的调用逻辑是正确的,只要被调用流水线正确暴露变量,就能正常获取到IMAGE_TAG的值:
def dockerBuildResponse = build job: "service-docker-build", propagate: false IMAGE_TAG = dockerBuildResponse.getBuildVariables()["IMAGE_TAG"]
额外注意事项
- 确保
service-docker-build流水线拥有设置环境变量或构建变量的权限(默认权限即可满足需求) - 如果被调用流水线执行失败,
propagate: false会让调用方继续执行,但此时获取的变量可能为空,建议根据业务需求添加失败判断逻辑
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

