我正在尝试使用“.gitlab.ci.yml”文件中的“needs”为前一阶段作业创建具有“OR”条件的作业依赖项,但无法找到解决方案。
.gitlab-ci.yml 文件 ->
stages:
- build
- test
- deploy
Build_job:
stage: build
script:
- echo "hello from build job"
Test_job1:
stage: test
script:
- echo "Start test 1"
when: manual
Test_job2:
stage: test
script:
- echo "Start test 2"
when: manual
Deploy_job:
stage: deploy
script:
- echo "Start deploying the job"
when: manual
needs:
- job: Test_job1
optional: true
- job: Test_job2
optional: true
Run Code Online (Sandbox Code Playgroud)
我的目标是要么通过Test_job1要么Test_job2通过Deploy_job应该启用。但是使用上面的代码,我无法这样做,因为Deploy_job只有当前两个测试作业都通过时才启用。

有没有办法可以像这样使用某些东西needs: [Test_job1 or Test_job2]?
该needs:optional: 关键字的命名令人困惑。它用于当由于其他管道/作业逻辑(作业可以选择存在)而作业可能不存在于管道中时设置needs:要求。但是,管道中确实存在的任何可选名称都将是必需的。needs:job:
我看到了一些接近您想要的管道的选项:
您可以在 Test_job 作业中使用rules:关键字有条件地将它们添加到管道中。
决定运行哪个 Test_job 的人(基于您正在使用的事实的假设when: manual)可能遵循某种决策逻辑 - 或者团队可以决定预设的决策逻辑。然后,您可以将该逻辑构建到您的条件中,以确定您的作业needs:if:是否存在于管道中——然后.Test_job#Deploy_job:
例如,如果一个测试应在默认分支上运行,另一个测试应在功能分支上运行,则可以使用以下命令自动运行相关的 Test_job 并使 Deploy_job 依赖于它:
Test_job1:
stage: test
script:
- echo "Start test 1"
# this job is only added for pipelines on the default branch
rules:
- if $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
when: on_success
- when: never
Test_job2:
stage: test
script:
- echo "Start test 2"
# this job is only added for pipelines NOT on the default branch
rules:
- if $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
when: on_success
- when: never
Deploy_job:
stage: deploy
script:
- echo "Start deploying the job"
# this is the default value, it's added here to show the automation difference from the question's pipeline
rules:
- when: on_success
# depend on Test_job1 AND Test_job2 if they individually exist in the pipeline
needs:
- job: Test_job1
optional: true
- job: Test_job2
optional: true
Run Code Online (Sandbox Code Playgroud)
如果您仍然需要人员参与触发测试作业或部署作业,您可以换回when:manual原来的位置。when:on_success
或者,如果您真的只是希望您的人员手动做出Test_job:临时决策,那么只需needs:从您的关键字中删除关键字Deploy_job:并使用现有的 Stage 依赖结构即可。键when: manual隐式设置allow_failure: true,因此您的工作已经是可选的。如果不能信任您的人员通过手动作业自行管理“部署前测试”依赖项,那么请将人员排除在循环之外并查看上面的“自动化路径”。
| 归档时间: |
|
| 查看次数: |
10483 次 |
| 最近记录: |