Gitlab CI使用rules规则时如何实现except:tags效果避免标签触发流水线
问题原因与解决方案
你当前配置不生效的核心原因是规则优先级设置不合理,以及缺少全局流水线触发规则控制。按照以下步骤调整即可实现需求:
- 调整阶段规则顺序,优先匹配标签场景
GitLab CI 的 rules 按照从上到下的顺序匹配,命中第一条符合条件的规则后就会终止后续判断。把标签阻断规则放到 rules 列表的最顶部,确保所有标签提交第一时间被拦截,避免被后续规则意外匹配。调整后的 deploy 阶段配置如下:
deploy: stage: deployment rules: - if: '$CI_COMMIT_TAG' when: never - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $sample == "one"' when: manual - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS' when: never - if: '$CI_COMMIT_BRANCH && $sample == "one"' when: manual script: - ... - ...
- 添加全局流水线触发规则(可选,符合原
except: - tags全局效果)
如果你需要的是创建标签时整个流水线都不触发,而不是仅跳过 deploy 阶段,需要在.gitlab-ci.yml根级别添加workflow:rules配置,全局控制流水线创建逻辑:
# 放在配置文件最顶部,全局生效 workflow: rules: - if: '$CI_COMMIT_TAG' when: never # 其余场景正常创建流水线,可根据自身需求修改其他全局规则 - when: always
调整完成后,创建标签时要么整个流水线不会被触发,要么 deploy 阶段会被直接跳过,完全实现原有 except: - tags 的效果。
内容的提问来源于stack exchange,提问作者hammer89
相关产品推荐
相关产品推荐

