web-dev-qa-db-ja.com

package.jsonが更新された場合、GitLabCIでは「npminstall」のみ

プロジェクトにGitLabCIを使用していますが、プロセスの最初のステップは_npm install_です。後で同じジョブをすばやく実行するために_node_modules_をキャッシュし、後の段階で使用するためにビルドアーティファクトとして定義します。ただし、_node_modules_をキャッシュして最新の状態にしていますが、_npm install_ジョブが実行されるたびに_install_packages_を呼び出すと、コマンドがすべての_package.json_そしてパッケージなどの更新をチェックします(私は推測します)。

条件に応じて、_npm install_ジョブで_install_packages_をonly実行する方法はありますか?より具体的には(私が最善の解決策だと思うもの)、前回のビルド以降に_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...
_
15
JorJor

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

もう1つのポイントは、キャッシュを正しい方法で設定したかどうかです。これを読んでください: https://docs.gitlab.com/runner/configuration/autoscale.html#distributed-runners-cachinghttps://docs.gitlab.com/ee/ci/caching /

1
Jhonn Frazão

--cacheオプションを指定してnpmをインストールしていますか?人々が持っているいくつかのGitlabCIランナーでこの問題を聞いたことがあり、これがほとんどの場合の解決策です。

それが役に立てば幸い!

0
Sasha