11

ビルド プロセスに必要なコマンド ライン ツールをキャッシュしようとしています。このツールは NodeJS で作成されています。ビルドは成功しますが、より高速に実行する必要があります。

私の circle.yml の関連部分は次のようになります。

dependencies:    
  post:
    - npm -g list
    - if [ $(npm -g list | grep -c starrynight) -lt 1 ]; then npm install -g starrynight; else echo "StarryNight seems to be cached"; fi

test:
  override:
    - npm -g list
    - starrynight run-tests --framework nightwatch

2 つ目npm -g liststarrynightが使用可能であることを示していますが、最初のものはキャッシュされていないことを示しています。

echo $(npm prefix -g)

. . . 私を取得します。. .

/home/ubuntu/nvm/v0.10.33

. . . そのため、CircleCI はグローバルにインストールされたものを nvm にキャッシュしないと想定しています。

「StarryNight がキャッシュされているようです」というメッセージが表示されません。

starrynightをキャッシュするにはどうすればよいですか?

4

2 に答える 2

6

わかりました、私はこれを理解しました。正しい方向に導いてくれた CircleCI の Hirokuni Kim に感謝します。

新しいの関連部分はcircle.yml次のようになります。

machine:
  node:
    version: 0.10.33

dependencies:
  cache_directories:
    - ~/nvm/v0.10.33/lib/node_modules/starrynight
    - ~/nvm/v0.10.33/bin/starrynight
  pre:
    - if [ ! -e ~/nvm/v0.10.33/bin/starrynight ]; then npm install -g starrynight; else echo "Starrynight seems to be cached"; fi;

Hirokuni はキャッシュを提案し~/nvmましたが、キャッシュの取得にはビルドと同じくらいの時間がかかりましたnodejs

姉妹の「ディレクトリ」が実際にはモジュールのエントリポイントへの重要なシンボリックリンクである~/nvm/v0.10.33/lib/node_modules/starrynightことを認識せずに、以前は単独でキャッシュしようとしました。bin/starrynight

私の想定では、NodeJS モジュールは一連のシンボリック参照を介してコマンド ラインから実行されます。おそらく次のようになります。. .

npm install -g starrynight2 つの新しいアーティファクトを作成します。

  • npmnamedの環境エイリアスstarrynight
  • のキーで指定され${prefix}/binたエントリ ポイント ファイルを指す、ディレクトリ内のシンボリック リンク。starrynight.jsbinpackage.json

ユーザーstarrynightが CLI コマンドとして入力すると、シェルはそれをエイリアスとして解釈してnpm実行します。 npm$0 を調べて を取得し、シンボリック リンクを実行するモジュールとしてstarrynight起動します。そのシンボリックリンクは、実際のアクションが行われる場所を指します。nodejs${prefix}/bin/starrynight~/nvm/v0.10.33/lib/node_modules/starrynight

つまり、 と の両方をキャッシュする必要が${prefix}/lib/node_modules/xxxあります。${prefix}/bin/xxx

于 2015-08-04T12:41:33.720 に答える
2

受け入れられた回答のパスは、もう機能していないようです。グローバルnpmパッケージが含まれているビルドインスタンスを確認しました

/opt/circleci/nodejs/<version>

そのため、circle.yml に次を追加しました。

- "/opt/circleci/nodejs/v4.3.2/lib/node_modules"
- "/opt/circleci/nodejs/v4.3.2/bin"
于 2016-10-21T16:07:38.737 に答える