GitLab CI,规则不触发作业

时间:2021-03-08 08:05:48

标签: gitlab-ci

我们刚刚开始使用 GitLab,但在行为上遇到了一些问题。 站在分支上:feature/test,我希望以下所有作业都被触发,但只有 All Branches except master/dev 被触发。

有人知道我做错了什么吗?

在此处阅读文档:https://docs.gitlab.com/13.8/ee/ci/yaml/#rules

stages:
  - pre-build
  - build
  - post-build
  - test
  - publish
  - deploy

All Branches except master/dev:
  stage: build
  image: openjdk:16-slim
  script:
    - 'cd .tools'
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: never
    - if: '$GIT_COMMIT_BRANCH =~ /^dev.*/'
      when: never
    - when: always

Only Branch Regex:
  stage: build
  image: openjdk:16-slim
  script:
    - 'cd .tools'
  rules:
    - if: '$GIT_COMMIT_BRANCH =~ /^feature.*/'

Only Branch Specific:
  stage: build
  image: openjdk:16-slim
  script:
    - 'cd .tools'
  rules:
    - if: '$GIT_COMMIT_BRANCH == "feature/test"'

1 个答案:

答案 0 :(得分:0)

您使用的变量不存在:$GIT_COMMIT_BRANCH,或者至少它不是由 Gitlab CI 定义的,因此您必须自己在某处定义它,我没有看到在 yaml 文件中。我想你想使用 CI_COMMIT_BRANCH,它是由 Gitlab 预定义的,包含正在构建的分支的名称。

您的作业未正确运行的原因是变量不存在,条件评估为“false”,因此最后两个作业将永远不会运行,并且“除 master/dev 之外的所有分支”将由于第二个条件,除了默认分支之外的所有运行。第一个条件,检查分支是否是默认分支,工作正常。由于变量不存在,第二个评估为 false,因此它落在第三个 rules 行:when: always

您应该能够通过更改变量名称来修复它。但是,请注意 CI_COMMIT_BRANCH 并不总是存在。如果管道是从合并请求启动的,则此变量将为空。此外,如果您在开发工作流程中使用标签,则该标签将为空。另一方面,CI_COMMIT_REF_NAME 变量将保存正在构建的项目的分支或标签名称,如果合并请求启动了管道,则该变量将存在。在这种情况下,它持有 CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 的值(它们是等价的)。

但是,如果您不使用标签并且不使用合并请求或单独处理这些管道,CI_COMMIT_BRANCH 将正常工作。