Jenkins流水线when条件中triggeredBy 'UpstreamCause'恒为false问题咨询
问题原因及解决方案
你遇到的问题有两个核心触发点,按优先级调整即可:
- 第一,
triggeredBy的匹配规则使用错误
通过流水线build步骤触发的下游任务,直接写triggeredBy "UpstreamCause"无法正确匹配触发原因,你可以替换为两种更可靠的写法:- 直接指定上游项目匹配,这是最稳妥的写法:
when { triggeredBy upstream: 'A' }- 如果你需要匹配所有上游触发的场景,先在项目B的流水线中加入以下步骤打印实际触发原因的类名,再填入对应参数即可:
stage('Debug Cause') { agent any steps { script { currentBuild.buildCauses.each { cause -> echo "触发原因类名:${cause.class.name},描述:${cause.shortDescription}" } } } } - 第二,项目B的流水线配置存在上下文冲突
你在项目B的顶层配置了agent none,同时又配置了全局的tools声明,tools需要绑定具体的agent环境才能生效,全局无agent的配置会导致流水线上下文初始化异常,可能影响when条件的判定逻辑。你可以将tools配置挪到需要使用的stage内部,同时给对应stage配置agent即可,示例:pipeline { agent none stages { stage('Triggered By Upstream') { agent any tools { maven "maven" } when { triggeredBy upstream: 'A' } steps { echo "Triggered by Upstream project" } } } }
内容的提问来源于stack exchange,提问作者Sina Barghidarian
相关产品推荐
相关产品推荐

