作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个使用 Gulp 进行构建的 GitLab Pages 站点。我的 .gitlab-ci.yml 文件与此类似:
image: node:latest
before_script:
- npm install gulp-cli -g
- npm install gulp [...and a whole bunch of packages] --save-dev
build:
stage: build
script:
- gulp buildsite
artifacts:
paths:
- public
pages:
stage: deploy
script:
- gulp
artifacts:
paths:
- public
cache:
paths:
- node_modules/
在 build
和 pages
作业之前,会执行 npm install
命令(在每个作业之前执行一次)。由于我有很多包,这通常需要一段时间。
有没有办法在整个构建中只安装一次?
我认为这就是 cache
应该提供的帮助,但它似乎仍然会重新下载所有内容。
最佳答案
尽管评论中的答案基本上是正确的。我认为针对您的案例的具体答案会很好。您可以使用的一种方法是添加第三阶段来承担安装 Node 模块的负载,此外您还可以缓存它们以加速后续构建:
image: node:latest
stages:
- prep
- build
- deploy
before_script:
- npm install gulp-cli -g
prep:
stage: prep
script:
- npm install gulp [...and a whole bunch of packages] --save-dev
artifacts:
paths:
- node_modules
cache:
paths:
- node_modules
build:
stage: build
script:
- gulp buildsite
artifacts:
paths:
- public
pages:
stage: deploy
script:
- gulp
artifacts:
paths:
- public
此解决方案将只执行一次安装并将结果缓存以供将来的 ci 管道使用,您还可以在 Node 模块工件上设置过期时间。
关于node.js - 亚搏体育appCI : How can I reuse installed npm packages between jobs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43751313/
我是一名优秀的程序员,十分优秀!