Gitlab:即使之前某个步骤失败,始终有可能启动手动作业

69次阅读
没有评论

问题描述

在使用Gitlab的CI/CD时,我有一个流水线(pipeline),其中包含以下步骤:

  1. 代码验证(code-verification)
  2. 一些测试(some tests)
  3. 部署(手动)(deploy)
  4. 更多测试(some more tests)
  5. 回滚(手动)(rollback)

其中,部署和回滚作业必须手动启动,因此我在我的gitlab-ci.yml文件中使用了when: manual

然而,我希望即使之前的某个步骤/作业失败了(例如,部署失败或者在“更多测试”阶段出现了失败),仍然可以启动回滚作业。我曾考虑使用when: always,但由于我已经在使用when: manual,所以无法实现(我尝试过了)。

目前,我将“更多测试”和“回滚”放在同一个阶段,这样一个步骤的失败不会影响另一个步骤。但是否有其他方法可以实现这一点呢?我真的希望将所有步骤都放在同一个流水线中(因此不使用触发器),并且始终有可能启动回滚作业,无论之前发生了什么。

解决方案

请注意以下操作可能受Gitlab版本影响,确保参考官方文档进行调整。

使用allow_failure实现控制的回滚

在Gitlab CI/CD中,您可以使用allow_failure属性来实现控制性的回滚。通过在您的测试作业中设置allow_failure: true,即使其中的某个测试失败,整个流水线也不会中断,从而保留手动控制回滚的权利。以下是如何实现的步骤:

  1. 打开您的gitlab-ci.yml文件。
  2. 在您的测试作业中,将allow_failure属性设置为true
  3. 在回滚作业中,使用when: manual,以便您可以手动启动回滚。

以下是示例gitlab-ci.yml文件的一部分:

stages:
  - test
  - deploy
  - rollback

test_job:
  stage: test
  script:
    - run your tests here
  allow_failure: true  # 允许测试失败,不会中断流水线

deploy_job:
  stage: deploy
  script:
    - run your deployment here
  when: manual

rollback_job:
  stage: rollback
  script:
    - perform rollback actions here
  when: manual

在上述示例中,我们将测试作业的allow_failure属性设置为true,以允许测试失败,但不会中断流水线。这样,即使测试失败,部署作业仍然会等待手动启动。回滚作业也设置为when: manual,以便您可以手动控制何时启动回滚。

通过这种方式,您可以在保持手动控制的同时,即使部分作业失败,仍有可能启动回滚。这可以确保您始终有机会决定是否进行回滚操作,而不受之前步骤的影响。

请注意,具体的Gitlab版本可能会影响这些设置的行为。在使用之前,建议查阅官方文档以获取最新信息。

参考链接:Gitlab CI/CD – Jobs: allow_failure

正文完