长时间运行的作业不应阻止合并 MR

Posted

技术标签:

【中文标题】长时间运行的作业不应阻止合并 MR【英文标题】:Long running job should not prevent a MR from being merged 【发布时间】:2022-01-07 20:08:15 【问题描述】:

考虑具有以下作业的管道:

build:运行构建,需要 1 分钟 report:运行静态代码分析,将结果发布到 MR,耗时 59 分钟

应尽快通知开发人员report 阶段的结果,但不应阻止合并MR。管道的行为应该是这样的:

    build 必须始终成功,然后才能合并 MR。 report 应始终最终启动并成功执行,但不应强制等待它才能合并 MR。

gitlab中是否有可能创建这样的管道?

到目前为止,我知道以下选项:

    禁用“Pipelines must succeed”设置:这种情况下可以合并MR,即使build不成功。 将allow_failurereport 设置为真。在这种情况下,可以在build 完成后通过取消report 作业来合并MR,但这违反了始终执行报告的要求。此外,如果您必须在合并之前取消可选作业,那么开发人员体验也会很差。 合并后执行report 作业。这有两个缺点: 我只会在 MR 合并后才得到报告,而不是尽快得到报告。 report 作业无法将其结果发布给 MR,MR 会通知相关人员。

【问题讨论】:

【参考方案1】:

您可以将report 作业移动到子管道(= 项目中的单独.yml 文件)并使用trigger keyword 和不带 strategy: depend 触发它。 这允许您触发作业而无需等待它,也无需考虑其在您的管道中的状态。

【讨论】:

以上是关于长时间运行的作业不应阻止合并 MR的主要内容,如果未能解决你的问题,请参考以下文章

为啥我对 web.api 的请求被长时间运行的控制器代码阻止?

使用长时间运行的方法阻止 ASP.NET Web 窗体中的网页

在长时间运行的工作中防止更改

如何阻止用户等待很长时间才能获得位置修复?

如何阻止我的推送与我的公开 PR 合并?

垃圾收集需要很长时间[如何调试收集的内容?]