只有' npm install'在package.json更新时,在GitLab CI中

时间:2016-11-15 16:58:21

标签: node.js npm gitlab npm-install gitlab-ci

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

根据某些情况,有没有办法 npm install作业中运行install_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...

2 个答案:

答案 0 :(得分:0)

你是否使用--cache选项安装?我已经听过一些人们拥有的Gitlab CI跑步者这个问题,这是解决方案的最佳时机。

希望它有所帮助!

答案 1 :(得分:0)

只需使用only:changes标志doc

工作将是:

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

另一点是:您设置缓存的正确方法吗? 读这个: https://docs.gitlab.com/runner/configuration/autoscale.html#distributed-runners-caching https://docs.gitlab.com/ee/ci/caching/