muf*_*fin 6 node.js node-modules gitlab gitlab-ci
我是 GitLab CI 的新手,我一直在尝试不同的方法来node_modules在我的整个管道中使用该目录。从我在官方文档中读到的内容来看,缓存和工件似乎是在作业之间传递文件的有效方法:
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
Run Code Online (Sandbox Code Playgroud)
模块去哪里了?
默认情况下,工件保存在主gitlab 机器上:
/var/opt/gitlab/gitlab-rails/shared/artifacts
是否有更好的方法在管道开始时仅运行 npm install 一次,然后在整个运行时将 node_modules 保留在管道中?
您可以尝试以下一些选项:
将设置和构建阶段合并为一个阶段。
构建器计算机上的本地 npm 缓存。更快的npm install时间。或者使用私有 npm 代理注册表(例如 - Nexus/Artifactory)
检查gitlab主机和构建器是否在同一网络中,这样上传/下载会更快
| 归档时间: |
|
| 查看次数: |
2560 次 |
| 最近记录: |