Tob*_*ann 7 gitlab gitlab-ci gitlab-ci-runner
给定两个阶段,第一阶段有两个工作,第二阶段有一个工作:
stages:
- a
- b
foo:
stage: a
when: manual
faa:
stage: a
when: manual
bar:
stage: b
when: i_dont_know
Run Code Online (Sandbox Code Playgroud)
当前一阶段中的至少一项工作成功时,我想运行第二阶段。
但是,文档仅显示以下选项:when
on_success- 仅当早期阶段的所有作业都成功时才执行作业,或者因为它们具有 而被视为成功allow_failure: true。on_failure- 仅当早期阶段至少有一项作业失败时才执行作业。always- 无论早期阶段的作业状态如何,都执行作业。有什么技巧可以实现我的目标吗?
我认为您想要的是 GitLab CI 管道的 DAG 实现。这样就可以在作业之间添加依赖关系以创建非循环图。
最小的例子:
stages:
- a
- b
foo:
stage: a
when: manual
allow_failure: true
script:
- echo "hello world"
faa:
stage: a
when: manual
allow_failure: true
script:
- echo "hello world"
bar:
stage: b
needs:
- job: foo
optional: true
- job: FAA
optional: true
script:
- echo "hello world"
Run Code Online (Sandbox Code Playgroud)
这样,如果前面的任何一个阶段的作业通过,第二阶段就会开始执行,但我认为这可能仍然不是您真正想要的。
因此,考虑到您的管道执行将包含阶段 A 中的两个作业,如果 A 中的两个依赖作业都成功,我提供的示例只会运行第二阶段的作业。如果任何作业被省略并且没有放入管道中,这仍然可以工作,因为依赖项是可选的,但是 - 这是要点 - 如果指定了任何依赖项并且相应的作业是一个管道执行的一部分,那么needs将进行逻辑 AND,以便在开始作业之前需要满足所有依赖关系。
如果您可以保证阶段 A 中的一项作业始终是您的管道的一部分,您仍然可以将其添加为依赖项。
如果你的阶段 B 甚至不依赖于前一个阶段,也可以提供一个空的需求数组,这相当于“立即开始这项工作 - 不考虑哪个阶段先出现”
# this job would start at the same time as jobs in stage a
job-def:
stage: b
script:
- echo "hello world"
needs: []
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2475 次 |
| 最近记录: |