微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在管道中坚持使用 Gitlab CI Runner?

如何解决如何在管道中坚持使用 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 只是将作业放在队列中运行,运行程序经常检查队列并选择作业。它非常适合可扩展性,但不适合您的用例。

在我看来,你有两个选择:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?