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

GitLab CI如何仅在特定分支创建新标签时触发作业运行

配置不生效的核心原因

GitLab CI预定义变量有明确的取值规则:标签触发的流水线中,$CI_COMMIT_BRANCH变量值为空,该变量仅会在分支触发的流水线中被赋值。你原配置里的判断条件$CI_COMMIT_TAG && $CI_COMMIT_BRANCH == "CI_merge"永远无法满足,作业自然不会被触发。

正确实现方案

要满足「仅在CI_merge分支上创建新标签时运行作业」的需求,不能直接依赖$CI_COMMIT_BRANCH做判断,需要先匹配标签触发场景,再校验当前标签绑定的提交是否属于CI_merge分支。
可直接使用如下配置:

stages: 
  - shov_server # 原配置stage名含空格,建议修改为无空格格式,避免解析异常

test:
  stage: shov_server
  rules: 
    # 仅匹配打新标签触发的流水线
    - if: '$CI_COMMIT_TAG'
      when: on_success
  tags: 
    - runner
  before_script:
    # 拉取目标分支的提交历史,解决浅克隆导致的分支归属判断不准问题
    - git fetch origin CI_merge --depth=100
    # 校验当前标签对应的提交是否在CI_merge分支上,不满足则直接终止作业
    - |
      if ! git branch --remote --contains $CI_COMMIT_SHA | grep -q "origin/CI_merge"; then
        echo "标签对应提交不属于CI_merge分支,跳过作业执行"
        exit 1
      fi
  script:
    - docker-compose -f docker-compose.yml down 
    - docker-compose -f docker-compose.yml build 
    - docker-compose -f docker-compose.yml up -d 
补充说明
  • 上述判断逻辑兼容所有打标签场景:不管是本地打标签推送到远端,还是在GitLab界面上给历史提交打标签,只要提交属于CI_merge分支就会正常执行作业
  • 如果你的Runner配置了极浅的克隆深度,可适当调大--depth后面的数值,保证能拉取到对应分支的关联提交
  • 不要尝试用$CI_COMMIT_REF_NAME判断分支,标签触发流水线时,这个变量的取值是标签名,不是分支名

内容的提问来源于stack exchange,提问作者jake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:15:33