2016-11-15 204 views
5

我正在使用GitLab CI作为项目,并且该过程的第一步是npm install。我将缓存node_modules以便稍后更快地执行相同的作业,并将它们定义为构建工件以便在后续阶段中使用它们。但是,即使我缓存了node_modules并且它是最新的,每次运行install_packages作业都需要很长时间,因为该命令遍历所有package.json并检查软件包的更新等(我假设)。当package.json更新后,只有'npm install'在GitLab CI中

有什么办法可以只有运行npm installinstall_packages工作取决于一些条件?更具体地说(我认为是最好的解决方案),package.json自上次构建以来是否发生过更改?

下面是我.gitlab-ci.yml文件的相关部分:

image: node:6.9.1 

stages: 
    - install 
    - prepare 
    - deploy 

install_packages: 
    stage: install 
    script: 
    - npm prune 
    - npm install 
    cache: 
    key: ${CI_BUILD_REF_NAME} 
    paths: 
     - node_modules/ 
    artifacts: 
    paths: 
     - node_modules/ 
    only: 
    - master 
    - develop 

build_and_test: 
    stage: prepare 
    script: 
    #do_stuff... 

deploy_production: 
    stage: deploy 
    #do_stuff... 

deploy_staging: 
    stage: deploy 
    #do_stuff... 

回答

0

你NPM与--cache选项安装?我已经听说过一些人们拥有的几个Gitlab CI跑步者的问题,而且这是大多数时候的解决方案。

希望它有帮助!

+0

这听起来像是会做的伎俩,但你可以进一步指定?命令究竟应该是什么?就我所知,'npm install --cache'不存在。或者你是在谈论[npm缓存](https://docs.npmjs.com/cli/cache)cli命令?我不确定在GitLab CI中如何使用它。 – JorJor

+0

@JorJor这是我发现的GitLab CI集成。希望它有帮助 – Jaxi

+0

@JorJor https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/97 – Jaxi