如何避免推送Tag时GitLab流水线重复执行两次?
解决GitLab流水线推送Tag时重复运行的问题
问题根源
推送符合规则的Tag时,GitLab会自动触发两次流水线:一次是分支流水线(因为Tag关联的分支有提交记录),一次是Tag专属流水线。分支流水线不满足deploy的Tag匹配条件,只会跑build;Tag流水线满足条件,会跑build+deploy,最终出现两次运行的情况。
解决方案
方案1:用rules精准控制(推荐)
替换原来的only配置,用GitLab的预定义变量区分分支和Tag触发场景:
stages: - build - deploy build: stage: build script: //do stuff rules: # 所有分支提交、所有Tag都触发build - if: '$CI_COMMIT_BRANCH' - if: '$CI_COMMIT_TAG' deploy: stage: deploy script: //do stuff rules: # 仅当Tag匹配指定正则时触发deploy - if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/' when: on_success
方案2:调整only配置(兼容旧版GitLab)
如果你的GitLab版本不支持rules,可以给build明确指定触发范围,同时给deploy限定仅Tag触发:
stages: - build - deploy build: stage: build script: //do stuff only: - branches - tags deploy: stage: deploy script: //do stuff only: - tags - /^v\d+\.\d+\.\d+$/ when: on_success
核心逻辑说明
$CI_COMMIT_BRANCH:只有分支流水线会有这个变量值,Tag流水线中不存在$CI_COMMIT_TAG:只有Tag流水线会有这个变量值,分支流水线中不存在- 通过这两个变量可以精准区分两种流水线场景,避免重复触发导致的冗余运行
内容的提问来源于stack exchange,提问作者Krzysztof Wrona
相关产品推荐
相关产品推荐

