我在Jenkins上运行了持续集成设置,每当我将更改推送到特定分支时,Jenkins就会启动50个EC2从站。每个奴隶检查分支并对分支运行一些测试。
问题是50个EC2从设备一次启动,它们从我的GitLab服务器检出分支,它为每个从设备启动一个git进程并快速耗尽内存(尽管服务器有7.5GB) RAM。)
如果我正在查看顶部,我可以看到,一旦奴隶开始行动,就会出现许多git进程并开始快速消耗所有内存。 kern.log告诉我内核必须定期杀死一个git进程,因为系统内存不足。
我的问题是如何限制GitLab启动的git进程数量,以免奴隶认为GitLab已经消失。 (例如,我希望GitLab将请求放入队列并一次为它们提供10个。)
我也考虑过其他一些想法。例如,我可以让一些奴隶(种子奴隶)从GitLab拉出分支然后让其余的奴隶从那些种子奴隶中拉出分支。但这似乎可能涉及一些工作。
另一个想法是,我可以将EC2发布错开几秒钟,以便在几分钟内传播请求。或者,我可以获得更多记忆。
我欢迎任何其他处理此问题的方法的想法。
答案 0 :(得分:0)
我认为你最后的想法是最好的: 尝试为你的gitlab实例传播负载。
例如,您可以通过构建工件来启动CI:
假设您使用say java,您可以在CI服务器上构建war文件,并通过共享的S3存储桶进行分发。
这样,每个构建只查询一次gitlab,并根据需要运行多个副本。每个实例都下载构建并运行其测试。