max*_*ian 5 continuous-integration shared runner gitlab
在我们的 Gitlab 项目组中,我们使用多个共享运行器进行 CI。但是,某些作业具有依赖性,因此前一个作业必须在同一个运行器上执行。
这是一个例子:
现在,对于多个共享运行程序,可能会发生以下情况:作业 1 在运行程序 1 上执行,而作业 2 和 3 在与运行程序 1 不同的运行程序上执行。这会在作业 2 和 3 中引发错误,因为 docker 映像在该运行程序上本地不可用。
另一方面,由于项目中的计算量,我们需要多个运行器。因此,如果一旦在特定工作中选择了某个跑步者,就可以为正在进行的工作保留相同的跑步者,那就太好了。
有什么想法可以解决这个问题吗?
Gitlab 调度不允许这样做。跑步者之间的平衡工作如下:
check_interval)检查待处理队列中是否有作业。如果是,并且运行程序是该作业的正确运行程序(例如,如果作业标签与运行程序兼容),则运行程序从队列中启动 N 个作业,N 受每个运行程序的最大并发作业数限制(选项concurrent
)因此,Gitlab 本身并不是调度哪个运行器运行哪个作业。Gitlab 只是将要运行的作业放入队列中,运行者经常检查队列并选择作业。它对于可扩展性很有帮助,但不适合您的用例。
在我看来,你有两个选择: