我们拥有的是什么?
我们有一个Gitlab EE,它在一个Droplet上运行多个项目,此外,我们还有一个用于CI运行程序的运行程序服务器。所有项目都是Docker项目,并且4个跑步者可以同时忙。服务器是否适合所有项目?或者每个项目最好有1个运行程序?

我知道配置项卡住时,运行程序也会被卡住,这意味着它将丢失1个运行程序直到重置。因此,此时每个项目使用单个运行程序似乎更好,但是它将使大量运行程序使用可能需要服务器空闲资源的运行程序?

此处没有任何内容正在运行或正在工作:


任何人都可以告诉我,您认为更好的是什么,以及为什么两者都对您更好在我看来,这些方法似乎是合法的,我想知道其他人的经验。

#1 楼

经过一些研究,我发现共享的运行者对几乎相同的项目有好处,而特定的运行者对与其他项目不同的项目则更好。

共享的跑步者可以通过队列最终吃掉所有可用资源,这使特定的跑步者更加有趣。

我现在的选择更像是两者兼而有之适用于所有小型项目,也适用于文档建议的大型新项目。

来自共享vs特定运行者:


...主要共享运行者和特定运行者之间的区别是:




共享运行者对于在多个项目之间具有相似要求的工作很有用。而不是让多个
Runner在许多项目上空转,您可以拥有一个或几个
处理多个项目的Runner。这样可以更轻松地维护和更新它们。共享跑步者使用公平的使用队列处理作业。与使用FIFO队列的特定运行程序相反,这可以防止项目创建数百个作业的情况,从而导致耗尽所有可用的共享运行程序资源。

特定运行程序是对于有特殊要求的工作或有特定需求的项目很有用。如果某项工作有某些要求,您可以
设置特定的Runner,而不必对所有Runner都这样做。例如,如果您
要部署某个项目,则可以设置特定的Runner来具有正确的凭据。在这种情况下,标签的使用可能
有用。特定的运行程序使用FIFO
队列处理作业。

特定的运行程序仅针对指定的项目运行。
共享Runner可以为每个启用了
选项设置Settings CI / CD下的允许共享Runner的项目运行作业。

对CI活动有很高要求的项目也可以从使用特定的Runners中受益。通过拥有专用的Runner,可以确保Runner不会被另一个项目的工作所阻碍。

您可以设置特定的Runner,以供多个项目使用。
与共享Runner的区别在于,您必须显式启用每个
项目,以便Runner能够运行其作业。

特定Runner不会与fork共享
分叉确实复制了
克隆存储库的CI设置(作业,允许共享等)。


我还是想知道每个人的关于此的心态,因为我仍然对您的操作方式感兴趣!

#2 楼

感谢您的结论,它也适用于我。

在我的情况下,我有不同类型的项目,例如纯Java,.NET以及一些打包在Docker中的项目。目前,尚无要建立的工作数量,但是我担心特定项目的工作创造高峰会在主要版本发布之前出现,例如...

我只配置了带有标签的共享运行器(dotnet,java,docker等),并且该项目在其.gitlab-ci.yml中指定了正确的标签:

在创造就业机会的高峰期,我可以为项目临时分配一个跑步者。当然,峰值检测和锁定/解锁可以通过Runner API自动执行,但我暂时不这样做。