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

Bar*_*zyk 3 regex gitlab gitlab-ci

我想project_dev为3个分支和特定类型的标记设置我的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.]*$/

它还为以下标记运行CI:dev1.2但它不应该.为什么?是否有标签的正则表达式?

Gas*_*sol 8

听起来像一个正则表达式问题.我刚刚在gitlab.com上为正则表达式创建了一个项目.

文件:.gitlab-ci.yml

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

我推你提到的所有标签来测试这个正则表达式.

标签

正如您所看到的,它将匹配像dev_1.0,等标签dev_1.1,但作业project_dev不会被标签触发dev1.2,您可以检查管道页面上的结果

管道


Jak*_*kow 8

您可以使用更强大的规则,而不是使用only/except

规则支持正则表达式模式匹配

您仅排除特定类型的分支/标签(如dev_1.0dev_1.1dev_1.2 )的规则应如下所示:

rules:
    - if: '$CI_COMMIT_BRANCH =~ /^dev_[0-9]+\.[0-9]+$/ || $CI_COMMIT_TAG =~ /^dev_[0-9]+\.[0-9]+$/'
Run Code Online (Sandbox Code Playgroud)

此处描述预定义的环境变量,如CI_COMMIT_BRANCHCI_COMMIT_TAG


小智 5

Gitlab.com?你可以尝试的组合exceptonly。就像是

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

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