使用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
相关产品推荐
相关产品推荐

