假设分阶段定义了 4 个作业。
阶段:
- 建造
- 测试
- 部署
- 上传
现在测试、部署和上传仅在管道手动触发时运行。我们可以为此定义单独作业的规则,但它会重复。(不想使用它)
是否可以在“阶段”上定义规则,以便一个作业将在自动触发器上运行,其余 3 个作业将在管道的手动触发器上运行。
假设分阶段定义了 4 个作业。
阶段:
现在测试、部署和上传仅在管道手动触发时运行。我们可以为此定义单独作业的规则,但它会重复。(不想使用它)
是否可以在“阶段”上定义规则,以便一个作业将在自动触发器上运行,其余 3 个作业将在管道的手动触发器上运行。
我知道这是一个迟到的答案,但我在遇到这种情况时找到了解决方案。
使用工作流控制管道行为。(在 GitLab 12.5 中引入) https://docs.gitlab.com/ee/ci/yaml/index.html#workflow
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
恐怕目前不可能将规则应用于整个阶段。
一种可能的解决方法是将一个阶段的所有作业都放在一个单独的模板文件中。此包含操作可以具有规则 [1]。
示例:模板.yml
job1:
stage: test
script:
- run_tests
job2:
stage: deploy
script:
- do_deployment
job3:
stage: upload
script:
- do_the_uploading
.gitlab-ci.yml:
include:
- local: 'template.yml'
rule:
- your_rule_here
stages:
- build
- test
- deploy
- upload
build_job:
stage: build
script:
- gcc sourcecode.cpp