1

我使用 GitLab,我有一个 2GB 的项目需要 Apple 公证。这是当前的管道流程:

编译 ==> 测试 ==> 压缩 ==>公证==> 创建安装程序 ==> 完成

公证步骤需要一小时。Apple 服务器有一个队列,因此 80% 的时间进程实际上什么都不做。它会打开一个连接并处于空闲状态,直到可以进行上传。所以这个过程在很长一段时间内几乎没有任何作用。

所以跑步者被这个任务阻止了。我可以将任务标记为“异步”,以便此运行器可以执行另一个任务吗?从技术上讲,可以同时对 100 个构建进行公证,而不会出现任何性能问题。非常感谢任何帮助!

4

1 回答 1

0

我没有看到管道中直接提供该功能。
只有gitlab-org/gitlab/issue 27165可能不是 100% 合适:

有时可能需要在不影响当前管道结果的情况下完成一项工作。

最简单的例子是覆盖测试。
现在我们必须等待覆盖测试的执行,尽管它们执行了很长时间,我们只需要执行通常的测试。

它确实参考了gitlab-org/gitlab-foss 问题 47063关于使用有向无环图的无序作业执行。

例如,当一个项目在多阶段管道中同时生成 Android 和 iOS 应用程序时,人们希望 iOS 部署在所有 iOS 测试通过后立即开始,而不是等待所有 Android 测试也通过。
总计算时间可能相同,但挂钟时间不同。

在更复杂的情况下,可以通过准确声明哪些作业依赖于哪些其他作业来显着减少管道的整体挂钟时间。

像 DAG 这样的解决方案可以允许根据依赖关系映射管道,然后以最有效的方式自动应用云计算资源以便执行。这非常强大,解决了很多关于管道的手动优化问题。

这是 GitLab 12.2 及更高版本(2019 年 4 月)

于 2020-02-07T05:29:21.330 回答