工作时的错误需要手动工作

13.12我们修复了一个错误这可能会影响管道的现有行为。我们解释为什么我们必须修复错误,这对您的管道上的可能影响以及如果您想还原此行为,则提出的解决方法。

在两份工作管道上的背景

在Gitlab CI / CD中,您可以在运行之前轻松地配置作业以需要手动干预。该作业将添加到管道中,但在点击时不会运行按钮上。

让我们看看一条两份的管道:

阶段-阶段1-第2阶段Job1.阶段阶段1脚本-回声“这是一项自动工作”manual_job.阶段第2阶段脚本-echo“这是一个手动作业,不会自动启动,并且管道可以在没有它启动的情况下完成。”什么时候手动的#此设置将作业转换为手动

这就是看看管道图的看起来如何:

image2.

请注意,手动作业被跳过,即使手动作业未被触发,管道也会成功完成。发生这种情况是因为手动作业被认为是可选的,并且不需要运行。

在内部,手动工作有allow_failure.默认设置为true,这意味着这些跳过的手动作业不会导致管道故障。下面的yaml代码演示了如何编写手动作业,这会导致相同的行为。工作不会自动启动,被跳过,并流水线通过。

manual_job.阶段第2阶段脚本-echo“这是一个手动作业,不会自动启动,并且管道可以在没有它启动的情况下完成。”什么时候手动的allow_failure.真的#此行是冗余的,因为手动作业默认情况下具有此设置

你可以设置allow_failure.对于任何作业,包括手动和自动作业,然后管道不关心任何作业,如果作业成功运行。

如何扩展配置需要(DAG)

去年我们介绍了需要允许您创建定向的非循环图(DAG)以加快管道的关键字。这需要关键字如何在两个作业之间创建依赖性,而不管其阶段如何。

让我们来看看这个例子:

阶段-阶段1....-第10阶段Job1.#这是第一份在管道中运行的作业阶段阶段1脚本-回声“退出0”.....Job10.需要#定义了与作业的“需要”关系-Job1.阶段第10阶段脚本-echo“这项工作一旦工作完成,即使这份工作是在第10阶段。”

需要关键字在两个作业之间创建依赖性,因此Job10.一旦跑了Job1.完成跑步成功,无论舞台订购如何。

所以如果一份工作会发生什么需要手动作业,它不会自动启动运行?

让我们来看看以下例子:

阶段-建造-测试-部署建造阶段建造脚本退出0.测试阶段测试什么时候手动的脚本退出0.部署阶段部署脚本回声“这项工作何时运行?”需要-测试

在13.12之前,这种类型的配置将导致管道卡住。这部署工作只能开始测试工作完成,但是测试作业不会自动启动。管道的其余部分停止并等待某人运行手册测试工作。

图像3.

这种行为甚至更糟糕的是较大的管道​​:

image4.

上面的示例显示了有需要的关系后测试工作和测试作业(这是一个手动作业),因为您可以看到管道在运行状态下卡住,任何后续作业都不会运行。

这不是大多数用户所期望的行为,所以我们在13.12中改进了它。现在,如果有一个需要与手动作业的关系,管道不再默认停止。默认情况下,手动作业被认为是可选的。任何有一个工作需要如果手动作业未触发,则与手动作业的关系也被视为可选和跳过。如果开始手动作业,则完成它可以在完成后启动的作业。

请注意,如果您在稍后的作业之前启动手动作业需要配置,后来的作业仍将等待手动作业完成运行。

如果我不想要这种新行为怎么办?

我们选择此解决方案的原因之一是您可以快速恢复此更改。如果您使用此无意行为并配置了您的管道,请使用它来阻止手动作业,很容易返回先前的行为。您所要做的就是覆盖默认值allow_failure.在手工工作中allow_failure:false.。这样,手动作业不再是可选的,流水线状态将被标记为已阻止并等待手动运行作业。

阶段-建造-测试-部署建造阶段建造脚本退出0.测试阶段测试什么时候手动的allow_failure.错误的#设置为false返回以前的行为。脚本退出0.部署阶段部署脚本退出0.需要-测试

通过在Gitlab开设问题并提及我(@dhershkovitch)。

尝试所有Gitlab功能 - 免费30天

Gitlab不仅仅是源代码管理或CI / CD。它是一个完整的软件开发生命周期和Devops工具在一个应用程序中。

尝试Gitlab免费
18新利赢钱

尝试18luck mx 无风险30天。

不需要信用卡。有问题吗?联系我们。

gitlab x图标svg