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

使用release-cli时如何避免触发新的构建流水线?

解决GitLab中release-cli打Tag后触发额外流水线的问题

1. 调整Workflow规则顺序(核心修复)

你之前的Workflow规则顺序搞反了——当用release-cli推送Tag时,CI_PIPELINE_SOURCE会被识别为push,第一个规则会直接匹配并允许流水线运行,后面的Tag阻止规则根本不会生效。把Tag判断放在最前面,就能从根源上阻止Tag相关的流水线:

workflow:
  rules:
    # 先拦截所有Tag触发的流水线
    - if: '$CI_COMMIT_TAG'
      when: never
    # 再允许分支推送触发正常流水线
    - if: '$CI_PIPELINE_SOURCE == "push"'
      when: always
    # 如果需要支持手动触发、合并请求等其他场景,可添加对应规则
    # 比如允许手动触发:
    # - if: '$CI_PIPELINE_SOURCE == "web"'
    #   when: always

2. 替换旧的except语法为rules

GitLab 17.x已不推荐使用except/include这类旧语法,而且你之前写的except: -tags是语法错误(正确旧写法应为except: [tags]),这才导致流水线无法正常运行。把Build任务的规则换成rules:

build:
  script:
    - echo "Project pipeline ID = $CI_PIPELINE_IID"
    - echo "Current commit SHA = $CI_COMMIT_SHA"
    - echo "Running pipeline for branch/tag = $CI_COMMIT_REF_NAME"
    - echo "Is this specifically a branch build? Branch = $CI_COMMIT_BRANCH"
    - echo "Pipeline triggered by = $CI_PIPELINE_SOURCE"
    - ./Scripts/Build.ps1 -a -w
    - echo "Completed building"
  rules:
    # Tag环境下不执行该任务
    - if: '$CI_COMMIT_TAG'
      when: never
    # 其他情况正常执行
    - when: always

3. 给Release任务加双重保障

同样给Release任务加上rules,确保它只在分支流水线里执行,就算Workflow规则出意外也不会乱触发:

release:
  # 保留你原有的任务配置(如阶段、依赖等)
  script:
    - > 
      release-cli create
      --name "My Program"
      --tag-name v${VERSION}
      --assets-link "{\"name\":\"${ARCHIVE_NAME}\",\"url\":\"${PACKAGE_URL}\"}"
  rules:
    - if: '$CI_COMMIT_TAG'
      when: never
    - when: always

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:07:12