【发布时间】:2019-09-22 19:56:21
【问题描述】:
我是 GitLab CI 的新手,我一直在尝试不同的方法来在我的整个管道中使用 node_modules 目录。从我在official docs 中读到的内容来看,缓存和工件似乎是在作业之间传递文件的有效方法:
cache 用于指定文件和目录的列表 在作业之间缓存。您只能使用位于 项目工作区。
但是,我对缓存方法的问题是node_modules 默认情况下会在管道之间保留:
- 缓存可以全局和每个作业设置。
- 从 GitLab 9.0 开始,缓存默认启用并在管道和作业之间共享。
我不想在管道之间保留node_modules。我真正想要的是在我的设置阶段使用 npm 触发全新安装,然后允许管道中的所有进一步作业使用这些模块。因此,我开始使用工件而不是缓存,其描述类似:
artifacts 用于指定文件和目录的列表 成功后应依附于工作。 [...]
工件将在作业完成后发送到 GitLab 成功并且可以在 GitLab UI 中下载。 依赖特性应与工件结合使用 并允许您定义要在不同作业之间传递的工件。
artifact-dependency 方法在我的情况下似乎是可用的。但是,缓存和工件都非常低效和缓慢。 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
【问题讨论】:
标签: node.js gitlab node-modules gitlab-ci