ホストされたビルドでAzurePipelinesを使用して、Webプロジェクトをビルドしています。ビルド時間は10〜15分に達し、ほとんど(5〜10分)はnpm install
の実行に費やされました。これを高速化するために、私はCache
タスクを使用しようとしています( https://docs.Microsoft.com/en-us/Azure/devops/pipelines/caching/?view=Azure -devops )。
ただし、自動追加されたタスクPost-job: Cache
を実行すると、常に次のエラーが発生します。
##[error]The system cannot find the file specified
ホストサーバーはWindowsServer2017です。
これが私のビルドYAML全体です
# Node.js with Vue
# Build a Node.js project that uses Vue.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.Microsoft.com/Azure/devops/pipelines/languages/javascript
trigger:
- develop
pool:
name: Default
variables:
FONTAWESOME_NPM_AUTH_TOKEN: $(FONTAWESOME_NPM_AUTH_TOKEN_VARIABLE)
npm_config_cache: $(Pipeline.Workspace)/.npm
steps:
- task: DutchWorkzToolsAllVariables@1
- task: NodeTool@0
inputs:
versionSpec: '10.x'
displayName: 'Install Node.js'
- task: Cache@2
inputs:
key: 'npm | "$(Agent.OS)" | package-lock.json'
path: $(npm_config_cache)
cacheHitVar: NPM_CACHE_RESTORED
- task: Npm@1
displayName: 'npm install'
inputs:
command: 'install'
condition: ne(variables.NPM_CACHE_RESTORED, 'true')
- task: Npm@1
displayName: 'npm run build'
inputs:
command: 'custom'
customCommand: 'run build'
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.Repository.LocalPath)\dist'
Contents: '**'
TargetFolder: '$(Build.StagingDirectory)'
CleanTargetFolder: true
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
キャッシュタスク出力:
Starting: Cache
==============================================================================
Task : Cache
Description : Cache files between runs
Version : 2.0.0
Author : Microsoft Corporation
Help : https://aka.ms/pipeline-caching-docs
==============================================================================
Resolving key:
- npm [string]
- "Windows_NT" [string]
- package-lock.json [file] --> F93EFA0B87737CC825F422E1116A9E72DFB5A26F609ADA41CC7F80A039B17299
Resolved to: npm|"Windows_NT"|rbCoKv9PzjbAOWAsH9Pgr3Il2ZhErdZTzV08Qdl3Mz8=
Information, ApplicationInsightsTelemetrySender will correlate events with X-TFS-Session zzzzz
Information, Getting a pipeline cache artifact with one of the following fingerprints:
Information, Fingerprint: `npm|"Windows_NT"|rbCoKv9PzjbAOWAsH9Pgr3Il2ZhErdZTzV08Qdl3Mz8=`
Information, There is a cache miss.
Information, ApplicationInsightsTelemetrySender correlated 1 events with X-TFS-Session zzzzz
Finishing: Cache
ポストジョブ:キャッシュ出力:
Starting: Cache
==============================================================================
Task : Cache
Description : Cache files between runs
Version : 2.0.0
Author : Microsoft Corporation
Help : https://aka.ms/pipeline-caching-docs
==============================================================================
Resolving key:
- npm [string]
- "Windows_NT" [string]
- package-lock.json [file] --> 2F208E865E6510DE6EEAA6DB0CB7F87B323386881F42EB63E18ED1C0D88CA84E
Resolved to: npm|"Windows_NT"|OQo0ApWAY09wL/ZLr6fxlRIZ5qcoTrNLUv1k6i6GO9Q=
Information, ApplicationInsightsTelemetrySender will correlate events with X-TFS-Session zzzzz
Information, Getting a pipeline cache artifact with one of the following fingerprints:
Information, Fingerprint: `npm|"Windows_NT"|OQo0ApWAY09wL/ZLr6fxlRIZ5qcoTrNLUv1k6i6GO9Q=`
Information, There is a cache miss.
Information, ApplicationInsightsTelemetrySender correlated 1 events with X-TFS-Session zzzzz
##[error]The system cannot find the file specified
Finishing: Cache
キャッシュが機能するようにビルド定義を修正するにはどうすればよいですか?
昨日、これを使用することで、セルフホストのマシンエージェントで問題なく動作させることができました。
- task: Cache@2
inputs:
key: '**/package-lock.json, !**/node_modules/**/package-lock.json, !**/.*/**/package-lock.json'
path: '$(System.DefaultWorkingDirectory)/node_modules'
displayName: 'Cache Node Modules'
今日、ホストされているエージェントで作業しようとしていますが、これではまったく効果がありません。 Aggh、グラインディングボードに戻ります。とにかく、多分あなたのセルフホストパイプラインであなたのために働くことができます
これはこれに関連しているようです 未解決の問題 。
ビルドエージェントプールをhostedに切り替え、windows-latestイメージを使用することで、問題を解決しました。
pool:
vmImage: 'windows-latest'
Windows Server 2017サーバーにログインして、フォルダー$(Pipeline.Workspace)/。npmが作成され、依存関係が内部に保存されているかどうかを確認できます。
Yamlをコピーしてテストしました。ローカルエージェント(win2019)とクラウドエージェントの両方で機能しました。クラウドエージェントまたは新しいシステムを備えた他のエージェントでパイプラインを実行して、このエラーの原因がエージェントであるかどうかを確認できます。
Package-lock.jsonで生成されたキーは、2つのタスク間で異なります。ファイルが変更されたときに発生します。ここでは、npmインストールタスクによって変更されています。
最新のキャッシュエントリにフォールバックするようにキャッシュタスクを構成するときに、restoreKeysオプションを使用できます。そして、「npminstall」タスクは必要ないと思います。
これを置き換えてみてください:
- task: Cache@2
inputs:
key: 'npm | "$(Agent.OS)" | package-lock.json'
path: $(npm_config_cache)
cacheHitVar: NPM_CACHE_RESTORED
- task: Npm@1
displayName: 'npm install'
inputs:
command: 'install'
condition: ne(variables.NPM_CACHE_RESTORED, 'true')
この定義によると:
- task: Cache@2
inputs:
key: 'npm | "$(Agent.OS)" | package-lock.json'
restoreKeys: |
npm | "$(Agent.OS)"
npm
path: $(npm_config_cache)
displayName: Cache npm
- script: npm ci --cache $(npm_config_cache)