让我们想象一下,我想在 gitlab 中有 2 个不同的 CI 管道。第一个应该从任何分支上的每次推送开始,另一个仅在提交标题以部署结束时开始。
我如何意识到这一点?
所以我的想法:
.gitlab-ci.yml
stages:
- pre
- build
include:
- local: ci/a.gitlab-ci.yml
- local: ci/b.gitlab-ci.yml
a.gitlab-ci.yml
workflow:
rules:
# only triggered by "-deploy" at the end of commit
- if: $CI_COMMIT_TITLE == /-deploy$/
test-job1:
stage: pre
script:
- echo "Workflow a runs pre."
tags:
- x86
test-job2:
stage: build
script:
- echo "Workflow a runs build."
tags:
- x86
b.gitlab-ci.yml
workflow:
rules:
# only triggered if commit does not end with "-deploy"
- if: $CI_COMMIT_TITLE =~ /-deploy$/
test-job1:
stage: pre
script:
- echo "Workflow b runs pre."
tags:
- x86
test-job2:
stage: build
script:
- echo "Workflow b runs build."
tags:
- x86
要达到您想要的效果,最好的选择是使用 include:rules:
workflow:rules:
。我相信你在正则表达式匹配规则中也可能有一个小错误。您可能希望在第一种情况下使用正则表达式匹配运算符(
=~
,即与模式匹配),在第二种情况下使用负匹配重新运算符(
!~
,即not与模式匹配)。
include:
- local: ci/a.gitlab-ci.yml
rules:
- if: $CI_COMMIT_TITLE =~ /-deploy$/
- local: ci/b.gitlab-ci.yml
rules:
- if: $CI_COMMIT_TITLE !~ /-deploy$/
然后从每个模板中删除 workflow:rules:
。