如何配置GitLab CI仅在符合语义化版本的新标签触发且限定分支
配置GitLab CI流水线仅在指定分支的合法语义化标签触发
关于语义化标签的正则选择
- 你写的
/[0-9]+\.[0-9]+\.[0-9]+.*/完全能用,只要团队里的标签不会出现离谱的格式(比如1.0.3-或者2.1.4_abc这类)。它的优点是简单易懂,维护成本低,能覆盖你提到的1.0.2、0.2.3-rc.1、2.3.5-beta这些常见场景。 - 那个复杂的正则是严格遵循语义化版本2.0规范的,能精准匹配带预发布版本(比如
-rc.1)和构建元数据(比如+build.123)的标签,还能过滤掉不符合规范的无效标签。如果你们团队需要严格管控标签格式,防止错误标签触发流水线,就用这个;如果标签都是人工规范创建的,简单版正则足够。
同时满足分支和标签条件的配置
GitLab CI的only默认是逻辑或关系,要实现「分支是master/main 且 标签符合正则」的逻辑,推荐两种写法:
方式1:用rules(更灵活,推荐)
rules: - if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/ && ($CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "main")' when: always - when: never
这里把复杂正则做了简化,保留核心匹配规则的同时,兼容常见的预发布后缀格式。
方式2:用only关键字(写法简洁)
only: refs: - master - main variables: - $CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+.*/ # 这里可替换为你选择的复杂正则
refs限定触发分支,variables限定标签格式,两者为逻辑与关系,只有同时满足才会触发流水线。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

