将Gitlab CI管道保留在单个运行器上,以确保共享缓存

时间:2018-12-31 15:16:15

标签: gitlab gitlab-ci

我有一个本地gitlab服务器,其中运行了一些Gitlab CI运行程序。过去,我们让每个跑步者都设置concurrent = 1,然后在运行管道时,任何可用的跑步者在每个阶段都从事任何工作。

但是,我想开始缓存阶段之间的依赖关系。这意味着我必须确保在单个运行器实例中运行整个管道(我试图避免上传缓存)。

是否可以为整个管道分配运行器?但是,是否有2条以上的管道同时在多个运行程序上运行?

2 个答案:

答案 0 :(得分:0)

缓存始终存储在运行程序安装和运行的位置[1]。因此,要在所有跑步者之间共享缓存,您需要设置S3替代品,例如minio [2],并配置跑步者以使用该缓存。
如果不将缓存上传(和下载)到中央存储,则不可能每个跑步者都可以访问另一个跑步者的缓存。

[1] https://docs.gitlab.com/ce/ci/caching/#cache-vs-artifacts
[2] https://docs.gitlab.com/runner/install/registry_and_cache_servers.html#install-your-own-cache-server

  

是否可以为整个管道分配一个运行器?

是的。只需给每个跑步者一个唯一的标签即可。比用一个跑步者的标签标记管道中的每个作业。这将确保您的管道仅由一个运行者执行。有关更多信息,请参见https://docs.gitlab.com/ce/ci/runners/#using-tags

答案 1 :(得分:0)

如果没有显着的管理开销(专门为每个作业分配每个运行程序),则当前所需的(GitLab 11.7)是不可能的(至少在Windows上如此)。将特定的运行器固定到您的项目并禁用所有共享的运行器也可以。

有很多问题阻止了此用例,因为即使使用S3 Blob存储配置(我们尝试使用minio)也无法共享运行器缓存。

其中之一是争用条件,如果后续的作业在不同的节点上执行,则竞争条件会阻止正确提取缓存。对于并行作业尤其如此。

我们尝试了什么:

  1. 使用所有运行程序计算机上可用的SMB文件夹共享缓存
  2. 使用minio共享缓存

您可以在此处找到我们的错误凭单: https://gitlab.com/gitlab-org/gitlab-runner/issues/3920