让 Gitlab Runner 使用 node_modules 作为工件而不是在缓存中
Having Gitlab Runner use node_modules as an artifact instead of in cache
根据 GitLab Documentation for cache vs artifacts,node_modules
应该存储为缓存而不是工件。这个问题是,如果有多个运行器并且创建“构建”的运行器不同,那么缓存(node_modules
)将不存在,这将使 GitLab CI 随机失败(如果同一位跑步者碰巧完成了其余的工作,那么它将成功)。
我可以做到,所有的事情都在一个工作中完成,但是一旦我必须进行部署,这个问题就会再次发生。另一种选择是标记它,以便只有一个特定的跑步者完成工作,但我觉得这很慢。
在研究之后我意识到我可以将 node_modules
作为工件而不是缓存放入,无论哪个运行器运行该作业它都会被拾取但是我找不到任何文档好不好。
所以把node_modules
当成神器可以吗?如果是这样,为什么人们通常不把它作为一个人工制品(假设他们添加了一个过期时间)?
这里的简短回答是,您可以随心所欲地使用该工具。您绝对可以将工件用于 node_modules。但是,还有一种方法可以使缓存也起作用。
默认情况下,当运行器缓存文件或目录时,它会将其存储在本地主机 运行 该运行器上(这就是其他运行器不可用的原因)。但是,在运行器配置中,您可以将其更改为将缓存对象存储在 AWS S3 或类似 S3 的存储库(如 Minio)中。如果所有运行器都这样配置,或者至少有 2 个,那么这些运行器也可以使用相同的缓存项。
您可以在此处阅读有关运行器缓存配置选项的信息:https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnerscache-section
您可以在此处阅读有关 Minio(一种提供 S3 API 接口的开源存储解决方案)的信息:https://docs.min.io/
根据 GitLab Documentation for cache vs artifacts,node_modules
应该存储为缓存而不是工件。这个问题是,如果有多个运行器并且创建“构建”的运行器不同,那么缓存(node_modules
)将不存在,这将使 GitLab CI 随机失败(如果同一位跑步者碰巧完成了其余的工作,那么它将成功)。
我可以做到,所有的事情都在一个工作中完成,但是一旦我必须进行部署,这个问题就会再次发生。另一种选择是标记它,以便只有一个特定的跑步者完成工作,但我觉得这很慢。
在研究之后我意识到我可以将 node_modules
作为工件而不是缓存放入,无论哪个运行器运行该作业它都会被拾取但是我找不到任何文档好不好。
所以把node_modules
当成神器可以吗?如果是这样,为什么人们通常不把它作为一个人工制品(假设他们添加了一个过期时间)?
这里的简短回答是,您可以随心所欲地使用该工具。您绝对可以将工件用于 node_modules。但是,还有一种方法可以使缓存也起作用。
默认情况下,当运行器缓存文件或目录时,它会将其存储在本地主机 运行 该运行器上(这就是其他运行器不可用的原因)。但是,在运行器配置中,您可以将其更改为将缓存对象存储在 AWS S3 或类似 S3 的存储库(如 Minio)中。如果所有运行器都这样配置,或者至少有 2 个,那么这些运行器也可以使用相同的缓存项。
您可以在此处阅读有关运行器缓存配置选项的信息:https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnerscache-section
您可以在此处阅读有关 Minio(一种提供 S3 API 接口的开源存储解决方案)的信息:https://docs.min.io/