gpt4 book ai didi

Gitlab-CI:如果作业 A 失败,指定作业 C 应在作业 B 之后运行

转载 作者:行者123 更新时间:2023-12-04 00:15:41 26 4
gpt4 key购买 nike

假设您有以下管道:

Job A (deploy) -> Job B (test) -> Job C (remove test deployment)
管道应部署测试镜像并在成功部署后对其进行测试。测试结束后,我想运行一个清理脚本,不管测试输出如何,但前提是测试镜像(作业 A)已部署。
总结一下:我希望 Gitlab 只有在 Job A 成功时才执行 Job C, 但在 Job B 之后。
行不通的事情:
  • when: on-failure(作业 A 或作业 B 可能失败,但只有作业 A 重要)
  • when: always(可能是作业 A 失败导致作业 C 失败)
  • when: on-success(要求所有作业都成功)

  • 我知道 GitLab 有一个名为 DAG 管道的功能,它允许您使用 needs 关键字指定对其他作业的多个依赖项,但遗憾的是 when 关键字始终适用于所有先前的作业。所以你不能说这样的话:
    when:
    on-success: job-a
    always: job-b
    我错过了什么还是没有办法实现这种行为?

    最佳答案

    如果作业 B 失败或成功,则 needs DAG 字段可用于有条件地执行清理(作业 C),但不能用于因作业 A 失败而被跳过的情况。
    创建 2 个符合以下 bool 条件的清理作业:

  • (Job A succeeds and Job B succeeds) :如果所有先前的任务都成功(作业 A 和作业 B),我们可以使用 when: on_success 运行清理。但是,如果作业 A 成功而作业 B 失败,则不会触发。
  • (Job A succeeds and Job B fails) :为了通过未触发的清理(作业 C)规避前面的场景,我们利用这样一个事实:如果作业 B 失败,这意味着作业 A 在管道中成功。通过创建重复的清理任务并在作业 B 和 needs 上指定 when: on_failure 标签,清理任务只会在作业 A 成功而作业 B 失败时运行。

  • 重申:如果 (Job A succeeds and Job B succeeds)(Job A succeeds and Job B fails) ,则清理作业将运行,通过 bool 表达式缩减相当于 (Job A succeeds)
    这里一个明显的警告是现在有 2 个清理作业显示在管道中;然而,它们是相互排斥的,只能执行一个。
    这是一个示例配置:
    stages:
    - deploy
    - test
    - cleanup

    deploy_job:
    stage: deploy
    script:
    - echo Deployed
    - "true"
    when: always

    test_job:
    stage: test
    script:
    - echo Executing tests
    - "true"
    when: on_success

    # a YAML anchor reduces repetition
    .cleanup_job: &cleanup_job
    stage: cleanup
    script:
    - echo Cleaned up deployment

    cleanup_deployment_success:
    when: on_success
    <<: *cleanup_job

    cleanup_deployment_failure:
    needs: ["test_job"]
    when: on_failure
    <<: *cleanup_job

    在各种有意失败的情况下,会产生以下管道状态:
  • 管道失败 : Job A succeeds and Job B fails
  • 管道失败 : Job A fails and Job B is skipped
  • 通过管道 : Job A succeeds and Job B succeeds

  • 从逻辑上讲,这表示无论作业 B 成功还是失败,只要作业 A 成功,作业 C 就会运行。此外,故障状态保留在整个管道中。

    关于Gitlab-CI:如果作业 A 失败,指定作业 C 应在作业 B 之后运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64205410/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com