如何仅对特定分支和标签运行Gitlab CI?

时间:2018-10-16 08:02:44

标签: regex gitlab gitlab-ci

我只想为3个分支和特定类型的标签设置project_dev CI,例如: dev_1.0,dev_1.1,dev_1.2

我该如何实现?

这就是我现在拥有的:

project_dev:
  stage: dev
  script:
    - export
    - bundle exec pod repo update
    - bundle exec pod install
    - bundle exec fastlane crashlytics_project_dev
  after_script:
    - rm -rf ~/Library/Developer/Xcode/Archives || true
  when: manual
  only:
    - develop
    - release
    - master
    - //here I need to add condition to fire that stage additionally only for specific tags. How can I setup regexp here?
  tags:
    - iOS

当我输入类似的内容时:

  only:
    - branches
    - /^dev_[0-9.]*$/

它也为诸如 dev1.2 之类的标签运行CI,但不应这样做。为什么?标记是否有正则表达式?

4 个答案:

答案 0 :(得分:8)

听起来像正则表达式问题。我刚刚在gitlab.com上为project创建了一个the regular expression

文件:.gitlab-ci.yml

project_dev:
  # Irrelevant keys is skipped
  script:
    - echo "Hello World"
  only:
    - develop
    - release
    - master
    - /^dev_[0-9]+(?:.[0-9]+)+$/ # regular expression

您被我提到all of tags测试该正则表达式。

Tags

如您所见,它将匹配dev_1.0dev_1.1之类的标签,但是作业project_dev不会被标签dev1.2触发,您可以检查结果在pipeline页上

Pipelines

答案 1 :(得分:3)

Gitlab.com? 您可以尝试结合使用exceptonly

only: 
- tags 
- branches 
except:
- /^(?!(branch1|branch2|branch3|dev_[0-9.]*$)$).*$/

想法是,除了分支[1-3]和dev_分支/标签以外的所有内容,只允许分支和标签触发作业

答案 2 :(得分:0)

这是此的官方文档:

GitLab CI/CD pipeline configuration reference

在其中找到section for only/except以及受支持的正则表达式语法。

答案 3 :(得分:0)

您可以使用功能更强大的rules来代替仅使用 / except

规则支持regex pattern matching

仅排除特定种类的分支/标记(例如 dev_1.0 dev_1.1 dev_1.2 )的规则应类似于:

rules:
    - if: '$CI_COMMIT_BRANCH =~ /^dev_[0-9]+\.[0-9]+$/ || $CI_COMMIT_TAG =~ /^dev_[0-9]+\.[0-9]+$/'

诸如{strong> CI_COMMIT_BRANCH 和 CI_COMMIT_TAG 之类的预定义环境变量在here中进行了描述。