我有一个本地gitlab服务器,其中运行了一些Gitlab CI运行程序。过去,我们让每个跑步者都设置concurrent = 1
,然后在运行管道时,任何可用的跑步者在每个阶段都从事任何工作。
但是,我想开始缓存阶段之间的依赖关系。这意味着我必须确保在单个运行器实例中运行整个管道(我试图避免上传缓存)。
是否可以为整个管道分配运行器?但是,是否有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)也无法共享运行器缓存。
其中之一是争用条件,如果后续的作业在不同的节点上执行,则竞争条件会阻止正确提取缓存。对于并行作业尤其如此。
我们尝试了什么:
您可以在此处找到我们的错误凭单: https://gitlab.com/gitlab-org/gitlab-runner/issues/3920