gpt4 book ai didi

continuous-integration - 如果管道作业/阶段失败,则触发操作/作业

转载 作者:行者123 更新时间:2023-12-05 01:31:34 24 4
gpt4 key购买 nike

我有一个 GitLab 管道,其中一个作业将一些内容写入一个文件,一个简单的 .txt 文件,并推送一个 Git 标签。在这个作业之后,其他的作业被执行。

我想触发自动操作/作业或撤消 .txt 文件写入并删除 Git 标记的操作,以防管道中的任何作业失败。

有可能做这样的事情吗?是否有某种 GitLab 管道作业仅在另一个失败时触发?

最佳答案

您正在寻找 when: on_failure 选项。它的文档在这里:https://docs.gitlab.com/ee/ci/yaml/README.html#when

如果您将它放在一个作业上,则只有在您的管道中的另一个作业在较早阶段失败时,该作业才会运行。如果您只需要在流水线的末端使用一个,这会很好地工作,但它还允许您在需要它的每个阶段之后使用多个。这是文档中的示例:

stages:
- build
- cleanup_build
- test
- deploy
- cleanup

build_job:
stage: build
script:
- make build

cleanup_build_job:
stage: cleanup_build
script:
- cleanup build when failed
when: on_failure

test_job:
stage: test
script:
- make test

deploy_job:
stage: deploy
script:
- make deploy
when: manual

cleanup_job:
stage: cleanup
script:
- cleanup after jobs
when: always

build 阶段中的作业会运行构建项目所需的任何内容,但如果有任何失败,cleanup_build 阶段中的作业将运行并删除所有构建工件,或任何其他需要的东西。

如果构建作业通过,测试阶段作业将运行测试。如果这些都通过了,我们就不需要做任何清理工作,所以管道会立即失败。否则,我们继续部署阶段。

我们的部署阶段作业标有 when: manual,这是您的管道的另一个有用选项。这意味着在 Gitlab 用户或 API 按下按钮开始作业之前,该作业不会运行。

我们在 cleanup 阶段的最后一个作业有 when: always。这意味着无论前面的任何阶段发生什么,它都会一直运行。这对于最终清理非常有用,如果部署失败,我们可以执行回滚或我们可能需要的任何其他操作。

when 关键字及其所有选项的文档都在这里:https://docs.gitlab.com/ee/ci/yaml/README.html#when

关于continuous-integration - 如果管道作业/阶段失败,则触发操作/作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66103942/

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