Jenkins多分支流水线配置:Gitlab触发master推送与合并请求
Jenkins多分支流水线GitLab触发规则配置方案
方案一:通过GitLab触发器参数精准控制
直接在triggers块中配置GitLab触发器,利用参数区分推送事件和合并请求事件的过滤规则:
pipeline { agent any triggers { gitlab( triggerOnPush: true, triggerOnMergeRequest: true, // 仅对master分支的推送事件生效 branchFilterType: 'NameBasedFilter', branchFilterName: 'master', // 允许所有合并请求触发(不受分支过滤规则限制) mergeRequestTriggerType: 'All' ) } stages { stage('Build') { steps { echo '执行构建步骤' } } // 按需添加其他stage } }
这里的关键是mergeRequestTriggerType: 'All',它会让合并请求触发不受branchFilterName的限制,仅让分支过滤规则作用于推送事件,正好匹配你需要的两个触发场景。
方案二:通过when条件过滤流水线执行
如果触发器参数配置无法满足需求,也可以在流水线级别添加when条件,让只有符合规则的事件才执行流水线:
pipeline { agent any triggers { // 先允许所有推送和合并请求触发webhook gitlab(triggerOnPush: true, triggerOnMergeRequest: true) } // 流水线级别的条件判断,不满足则直接跳过所有stage when { anyOf { // 匹配master分支的推送 branch 'master' // 匹配任何开放的合并请求 changeRequest() } } stages { stage('Build') { steps { echo '执行构建步骤' } } } }
注意要将when放在pipeline块下、stages之前,这样是对整个流水线生效,而不是单个stage。之前你用changeRequest()没生效,大概率是把条件放在了单个stage里,导致流水线仍会启动只是跳过该stage,而非完全不触发。
内容的提问来源于stack exchange,提问作者joe1531
相关产品推荐
相关产品推荐

