如何仅在特性分支间合并请求时向GitLab流水线添加任务?
给特性分支间MR的流水线单独加特定任务的实现方案
核心逻辑
要实现这个需求,核心就是通过分支名称的匹配规则,精准判断当前流水线是不是来自两个feature/*分支之间的合并请求,只有满足这个条件时,才把特定任务加入合并结果流水线和合并列车流水线。
以GitLab CI为例的配置代码
假设你用的是GitLab CI,直接给特定任务加规则判断就行:
# 定义你的特定任务 feature-only-special-task: script: - # 这里写你的任务执行逻辑 rules: # 匹配特性分支间MR的合并结果流水线 - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature\/.*$/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^feature\/.*$/' # 匹配特性分支间MR的合并列车流水线 - if: '$CI_PIPELINE_SOURCE == "merge_train_event" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature\/.*$/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^feature\/.*$/'
不同CI工具的适配要点
如果用的是其他CI工具,调整对应的分支判断逻辑就行:
- GitHub Actions:用
github.head_ref(源分支)和github.base_ref(目标分支)做判断,在job的if条件里写:github.head_ref startsWith 'feature/' && github.base_ref startsWith 'feature/',同时结合流水线触发源判断是不是MR或合并列车相关 - Jenkins:可以通过插件获取MR的源/目标分支参数,然后在任务的条件判断里添加分支前缀匹配规则
要注意的细节
- 确保你的CI工具能正确拿到MR的源分支和目标分支信息,有些工具需要开启对应的权限或配置
- 合并列车流水线的触发源标识可能因工具而异,比如GitLab是
merge_train_event,要对应调整条件里的参数
内容的提问来源于stack exchange,提问作者Satish Lokhande
相关产品推荐
相关产品推荐

