如何将 gitlab ci 中的作业限制为与模式匹配的标签?

How to limit a job in gitlab ci to a tag matching a pattern?

我希望能够在每次推送与模式匹配的标签时触发对特殊服务器的部署。

我使用以下作业定义:

# ...
deploy to stage:
  image: ruby:2.2
  stage: deploy
  environment:
    name: foo-bar
  script:
    - apt-get update -yq
    - apt-get install -y ruby-dev
    - gem install dpl
#    - ...
  only:
    - tags

现在我的问题是:如何将其限制为具有特定名称的标签,例如以 "V" 开头,以便我可以推送标签 "V1.0.0" 并获得特定的工作 运行?

Only accepts regex patterns 因此对于您的用例,它将是:

only:
  - /^V.*$/
except:
  - branches
  - triggers

最好的方法是通过与您的模式匹配的 Gitlab CI/CD 变量进行过滤

only
  variables:
    - $CI_COMMIT_TAG =~ /^my-custom-tag-prefix-.*/

正如 documentation 所说:

  • CI_COMMIT_TAG:提交标签名称。仅在构建标签时出现。

only / except are now being deprecated 以来,您现在应该更喜欢 rules 关键字

事情变得很简单,下面是使用规则的等价物:

rules:
  # Execute only when tagged starting with V followed by a digit
  - if: $CI_COMMIT_TAG =~ /^V\d.*/

规则应该能帮到你。 仅当由于 GIT 标签匹配例如模式而触发时,下面才会将作业限制为 运行 V1.0.0 或 V1.14.45(见 \d 后的 +)

rules:
    - if: '$CI_COMMIT_TAG =~ /^V\d+.\d+.\d+$/'
      when: manual