首页 > 解决方案 > GitLab CI 仅在提交消息与正则表达式不同时才允许作业运行

问题描述

我正在使用 GitLab.com。我想在 beta 分支上运行一个作业并且提交消息不是以: 开头chore(release)。这是我的尝试:

# --snip--

release_beta:
  stage:  release
  image: 
    name: <private_image>
    entrypoint:
      - '/usr/bin/env'
      - 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
  before_script:
    - cp $SR_CONFIG_PATH/.releaserc.json .
  script:
    - npx semantic-release
  rules:
    # so we don't trigger a release job when semantic-release pushes the release
    - if: '$CI_COMMIT_BRANCH == "beta" && $CI_COMMIT_MESSAGE !~ /^chore(release)/'

这不起作用,作业总是在beta分支上触发。我尝试了=~变化,但它也不起作用。即使在文档中提到它,我似乎也无法使正则表达式测试工作:https ://docs.gitlab.com/ee/ci/jobs/job_control.html#common-if-clauses-for-rules 。

文档截图

作业失败,因为用户没有该图像的权限(这就是我想首先阻止作业运行的原因):

在此处输入图像描述

标签: shellgitlabgitlab-ci

解决方案


括号定义捕获组。您必须转义它们以匹配文字括号。

- if: '$CI_COMMIT_BRANCH == "beta" && $CI_COMMIT_MESSAGE !~ /^chore\(release\)/'

推荐阅读