仅当 git 标签不以字符串“Release”或“Test”开头时才在 Gitlab CI 中启动管道

Posted

技术标签:

【中文标题】仅当 git 标签不以字符串“Release”或“Test”开头时才在 Gitlab CI 中启动管道【英文标题】:Only start pipeline in Gitlab CI when git tag does not start with String "Release" or "Test" 【发布时间】:2022-01-13 19:29:24 【问题描述】:

只有在没有 git 标签或 git 标签不是“Release_...”或“Test_...”时,我才需要开始构建作业。这是我的.gitlab-ci.yml 用于测试:

dev:
  rules: 
    - if: '$CI_COMMIT_TAG != /^Test_.*/ && $CI_COMMIT_TAG != /^Release_.*/' 
  script:
    - echo "dev"


test:
  rules: 
    - if: '$CI_COMMIT_TAG =~ /^Test_.*/'
  script:
    - echo "test"


prod:
  rules: 
    - if: '$CI_COMMIT_TAG =~ /^Release_.*/'
  script:
    - echo "prod"

如果我添加 git 标签 Release_2021-3.0.0devprod 构建作业就会启动。只应启动 prod 构建作业。开发构建作业的规则有什么问题?

【问题讨论】:

【参考方案1】:

要检查变量是否与正则表达式不匹配,您应该使用!~ (GitLab documentation)


在您的具体示例中,您需要修复 dev 阶段:

dev:
  rules: 
    - if: '$CI_COMMIT_TAG !~ /^Test_.*/ && $CI_COMMIT_TAG !~ /^Release_.*/' 
  script:
    - echo "dev"

然后只有prod 作业将在Release_2021-3.0.0 标签上启动。 您可以查看小项目示例here

【讨论】:

谢谢,我只是在看 Gitlab CI 参考,而不是在一般的 CI/CD 文档中。

以上是关于仅当 git 标签不以字符串“Release”或“Test”开头时才在 Gitlab CI 中启动管道的主要内容,如果未能解决你的问题,请参考以下文章

git标签合并了吗?

在 VSTS 中使用 git tag 或 package.json 版本作为 Release 名称

Circleci:如何根据 git release 进行部署(发布一个标签)

仅当字符串包含匹配项时才替换字符串周围的标签

如何使用正则表达式匹配不以某些字符开头或结尾的单词?

无法更改标记“文件夹”名称git的大小写