如何在Jenkins freestyle任务中获取触发它的上游pipeline名称
Jenkins Freestyle任务获取上游Pipeline名称解决方案
方案1:直接调用内置环境变量(单上游触发场景)
Jenkins在被上游任务触发时,会自动注入以下两个内置环境变量,无需额外配置或插件:
UPSTREAM_JOB_NAME:触发当前任务的上游Pipeline完整名称UPSTREAM_BUILD_NUMBER:对应上游Pipeline的构建编号
你可以直接在freestyle任务的任意执行步骤中调用,比如在shell执行步骤中运行echo $UPSTREAM_JOB_NAME即可直接打印上游Pipeline名称。
方案2:通过构建原因读取(多上游触发场景)
如果当前freestyle任务存在多个上游触发源,需要动态判断实际触发的上游名称,可以通过系统Groovy脚本读取构建原因属性:
- 在freestyle任务中添加「Execute system Groovy script」步骤
- 填入以下代码:
// 读取上游触发原因 def upstreamCause = build.getCause(hudson.model.Cause.UpstreamCause) if (upstreamCause) { // 获取上游任务名称和构建号 def triggerPipelineName = upstreamCause.getUpstreamProject() def triggerBuildNum = upstreamCause.getUpstreamBuild() println "实际触发的上游Pipeline名称:${triggerPipelineName}" // 注入为环境变量供后续步骤调用 build.addAction(new hudson.model.ParametersAction([ new hudson.model.StringParameterValue("TRIGGER_PIPELINE", triggerPipelineName) ])) }
后续所有步骤均可直接调用$TRIGGER_PIPELINE变量使用上游名称。
注意事项
- 上述方案均要求上游Pipeline通过官方的「Trigger/call builds on other projects」步骤触发当前freestyle任务
- 若上游触发时开启了参数传递,上游任务的所有自定义参数也会同步注入到当前freestyle任务的环境变量中
内容的提问来源于stack exchange,提问作者uday
相关产品推荐
相关产品推荐

