长 运行 作业不应阻止 MR 被合并
Long running job should not prevent a MR from being merged
考虑具有以下作业的管道:
build
:运行构建并花费 1 分钟
report
:运行静态代码分析,post将结果发送给 MR,耗时 59 分钟
应尽快将 report
阶段的结果告知开发人员,但不应阻止 MR 被合并。管道的行为应如下所示:
build
必须始终成功,才能合并 MR。
report
应该总是最终启动并成功执行,但不应该强制等待它才能合并 MR。
gitlab 中是否有可能创建这样的管道?
到目前为止,我知道以下选项:
- 禁用“Pipelines must succeed”设置:此时即使
build
不成功也可以合并MR。
- 将
report
的 allow_failure
设置为真。在这种情况下,可以在 build
完成后通过取消 report
作业合并 MR,但这违反了报告应始终执行的要求。如果您必须在能够合并之前取消可选作业,这也是糟糕的开发人员体验。
- 合并后执行
report
作业。这有两个缺点:
- 只有MR合并后才会收到报告,而不是尽快收到。
report
作业不能post 将结果提交给 MR,MR 会通知相关人员。
您可以将 report
作业移动到子管道(= 项目中的单独 .yml
文件)并使用 trigger
keyword and without strategy: depend
触发它。
这使您可以触发作业而无需等待它,也无需考虑它在管道中的状态。
考虑具有以下作业的管道:
build
:运行构建并花费 1 分钟report
:运行静态代码分析,post将结果发送给 MR,耗时 59 分钟
应尽快将 report
阶段的结果告知开发人员,但不应阻止 MR 被合并。管道的行为应如下所示:
build
必须始终成功,才能合并 MR。report
应该总是最终启动并成功执行,但不应该强制等待它才能合并 MR。
gitlab 中是否有可能创建这样的管道?
到目前为止,我知道以下选项:
- 禁用“Pipelines must succeed”设置:此时即使
build
不成功也可以合并MR。 - 将
report
的allow_failure
设置为真。在这种情况下,可以在build
完成后通过取消report
作业合并 MR,但这违反了报告应始终执行的要求。如果您必须在能够合并之前取消可选作业,这也是糟糕的开发人员体验。 - 合并后执行
report
作业。这有两个缺点:- 只有MR合并后才会收到报告,而不是尽快收到。
report
作业不能post 将结果提交给 MR,MR 会通知相关人员。
您可以将 report
作业移动到子管道(= 项目中的单独 .yml
文件)并使用 trigger
keyword and without strategy: depend
触发它。
这使您可以触发作业而无需等待它,也无需考虑它在管道中的状态。