我们刚刚开始使用 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"'
答案 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
将正常工作。