我对GitLab CI相当陌生,我一直在尝试不同的方法来在整个管道中使用node_modules
目录。根据我在official docs中所读到的内容,缓存和工件似乎是在作业之间传递文件的有效方法:
cache用于指定应列出的文件和目录的列表 在作业之间被缓存。您只能使用位于 项目工作区。
但是,我与缓存方法有关的问题是,node_modules
默认情况下将在管道之间保留:
- 可以全局设置和按作业设置缓存。
- 从GitLab 9.0开始,默认情况下启用缓存并在管道和作业之间共享缓存。
我不想在管道之间保留node_modules
。我真正想要的是在设置阶段使用npm触发全新安装,然后允许管道中的所有其他作业使用这些模块。因此,我开始使用工件代替缓存,其描述类似:
artifacts用于指定文件和目录的列表,其中 成功后应该附加到工作上。 [...]
工件将在作业完成后发送到GitLab 成功,可以在GitLab UI中下载。 依赖项功能应与工件一起使用 并允许您定义在不同作业之间传递的工件。
在我的情况下,工件依赖方法似乎可用。但是,缓存和工件都非常低效且缓慢。 node_modules
已安装并可用,但是整个目录随后在某处上传并在每个作业之间重新下载。 (我真的很想知道这里发生了什么……模块去哪里了?)
是否有更好的方法在流水线的开头只运行一次npm install
,然后在整个运行期间将node_modules
保留在流水线中?我不想在所有作业完成后保留node_modules
,因此不需要在任何地方上传或下载它们。
示例管道配置文件以重现此行为:
image: node:lts
stages:
- setup
- build
- test
node:
stage: setup
script:
- npm install
artifacts:
paths:
- node_modules/
build:
stage: build
script:
- npm run build
dependencies:
- node
test:
stage: test
script:
- npm run lint
- npm run test
dependencies:
- node
答案 0 :(得分:1)
这些模块在哪里?
默认情况下,工件被保存在主gitlab machine上:
/var/opt/gitlab/gitlab-rails/shared/artifacts
是否有更好的方法在管道开始时仅运行一次npm install,然后在整个运行期间将node_modules保留在管道中?
您可以尝试以下选项:
将设置和构建阶段合并到一个阶段。
Local npm cache在构建器计算机上。快npm install
次。或使用私有npm代理注册表(例如-Nexus / Artifactory)
检查gitlab主机和构建器是否在同一网络中,以便上载/下载更快