web-dev-qa-db-ja.com

Azureパイプライン「Cache @ 2」が「## [エラー]指定されたファイルが見つかりません」で失敗する

ホストされたビルドで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

キャッシュが機能するようにビルド定義を修正するにはどうすればよいですか?

3
jklemmack

昨日、これを使用することで、セルフホストのマシンエージェントで問題なく動作させることができました。

- 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、グラインディングボードに戻ります。とにかく、多分あなたのセルフホストパイプラインであなたのために働くことができます

1
Briana Finney

これはこれに関連しているようです 未解決の問題

ビルドエージェントプールをhostedに切り替え、windows-latestイメージを使用することで、問題を解決しました。

pool:
  vmImage: 'windows-latest'
0
Matt

Windows Server 2017サーバーにログインして、フォルダー$(Pipeline.Workspace)/。npmが作成され、依存関係が内部に保存されているかどうかを確認できます。

Yamlをコピーしてテストしました。ローカルエージェント(win2019)とクラウドエージェントの両方で機能しました。クラウドエージェントまたは新しいシステムを備えた他のエージェントでパイプラインを実行して、このエラーの原因がエージェントであるかどうかを確認できます。

0
Levi Lu-MSFT

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)
0
FLabranche