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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:26:15