GitLab CI如何针对自动发布提交精准控制作业执行?
GitLab CI 配合 semantic-release 配置解决方案
需求2的配置修正
GitLab CI 使用RE2正则,匹配提交信息时要注意语法限制(不支持反向引用等高级语法)。针对chore(release): x.x.x格式的自动发布提交,你可以通过以下配置让test1和semantic-release仅在常规人工提交时执行:
variables: RELEASE_COMMIT_PATTERN: '^chore\(release\): \d+\.\d+\.\d+$' test1: script: - echo "Running test1" rules: - if: '$CI_COMMIT_MESSAGE !~ /$RELEASE_COMMIT_PATTERN/' - if: '$CI_COMMIT_TAG == null' semantic-release: script: - npx semantic-release rules: - if: '$CI_COMMIT_MESSAGE !~ /$RELEASE_COMMIT_PATTERN/' - if: '$CI_COMMIT_TAG == null'
正则说明
^chore\(release\): \d+\.\d+\.\d+$是符合RE2语法的精准匹配规则:^和$确保匹配整个提交信息,避免部分匹配干扰- 括号
()需转义为\(和\),因为RE2中括号属于特殊字符 \d+匹配数字序列,\.匹配点号(点号为特殊字符,必须转义)
- 加入
$CI_COMMIT_TAG == null规则,排除标签触发的流水线,和需求1的配置逻辑保持统一
RE2正则测试方法
GitLab没有官方单独的RE2测试工具,但可以用两种方式验证:
- 本地安装
re2命令行工具(比如通过Python的re2库),直接测试正则与目标字符串的匹配结果 - 在GitLab CI中添加临时测试作业,打印提交信息并验证匹配:
test-regex: script: - echo "Commit message: $CI_COMMIT_MESSAGE" - | if echo "$CI_COMMIT_MESSAGE" | grep -E '^chore\(release\): \d+\.\d+\.\d+$'; then echo "匹配自动发布提交" else echo "非自动发布提交" fi rules: - if: '$CI_COMMIT_BRANCH == "main"' # 按需指定测试分支
需求1的配置优化(可选)
你已完成需求1,这里补充更精准的配置,确保deploy-pages仅在自动发布提交时执行:
deploy-pages: script: - echo "Deploying pages" rules: - if: '$CI_COMMIT_MESSAGE =~ /$RELEASE_COMMIT_PATTERN/' - if: '$CI_COMMIT_TAG == null'
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

