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"'

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

你的作业没有正确运行的原因是由于变量不存在,条件被评估为"假",所以最后两个作业将永远不会运行,并且"除master/dev之外的所有分支";由于第二个条件,将运行除默认分支之外的所有分支。第一个条件,检查分支是否是默认分支,工作正常。第二个计算结果为false,因为变量不存在,所以它落在rules的第三行:when: always.

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

但是,如果你不使用标签,或者不使用合并请求或单独处理这些管道,CI_COMMIT_BRANCH将工作得很好。

最新更新