You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免推送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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:20:48