如何解决如何在管道中坚持使用 Gitlab CI Runner?
在我们的 Gitlab 项目组中,我们使用多个共享运行器进行 CI。 但是,某些作业具有依赖性,因此前一个作业必须在同一个运行器上执行。
这是一个例子:
- 作业 1 构建了一个 docker 容器
- 作业 2 检查 docker 的执行情况,因此它需要来自作业 1 的 docker 映像
- 作业 3 将 docker 镜像推送到容器中心,因此它需要来自作业 1 的 docker 镜像
现在,如果有多个共享运行器,可能会发生作业 1 和作业 2 和作业 3 在与运行器 1 不同的运行器上执行的情况。这会在作业 2 和 3 中引发错误,因为 docker 映像在本地不可用在那个跑步者身上。
另一方面,由于我们项目中的计算量,我们需要多个运行器。因此,如果在特定工作中选择一名跑步者后,它会为正在进行的工作保留同一个跑步者,那就太好了。
有什么想法可以解决这个问题吗?
解决方法
Gitlab 调度并不容易。跑步者之间的平衡工作如下:
- 在 Gitlab 实例上创建作业时,它会在 待处理状态
- 运行程序每 3 秒检查一次(默认为 3 秒,
配置为
check_interval
) 如果有待处理的作业 队列。如果是,并且该跑步者是该工作的合适跑步者(对于 例如,如果作业标签符合运行程序),则运行程序从队列中启动 N 个作业,N 受每个运行程序的最大并发作业数限制 (concurrent
选项)
所以这不是 Gitlab 本身安排哪个运行器运行哪个作业。 Gitlab 只是将作业放在队列中运行,运行程序经常检查队列并选择作业。它非常适合可扩展性,但不适合您的用例。
在我看来,你有两个选择:
- 首先,只在一个运行器上放置一个特定的标签,并将其用于需要在同一主机上运行的作业
- 第二,更灵活的是,在构建结束时将生成的 docker 镜像存储在您的 Gitlab 项目注册表中,并从需要该镜像的任何作业(job2 和 job3)中提取它,请参阅https://docs.gitlab.com/ee/user/packages/container_registry/#build-and-push-by-using-gitlab-cicd
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。