Ошибка модуля Yarn не найдена в конвейерах Azure через механизм кэширования

#caching #azure-devops #azure-pipelines #hadoop-yarn #pipeline

#кэширование #azure-devops #azure-конвейеры #hadoop-yarn #конвейер

Вопрос:

заранее благодарю вас за рассмотрение этой проблемы для меня.

Я работаю над улучшением времени сборки CI в конвейерах Azure devops с помощью этого предлагаемого механизма кэширования. Я также использую логическую функцию восстановления кэша, указанную в ссылке.

Краткое описание шагов приведено на скриншоте нижевведите описание изображения здесь

Краткое описание шагов

  1. Проверьте кэш на наличие пакетов yarn.
  2. Извлекайте пакеты из кэша, если есть попадание в кэш
  3. Пропустите шаг установки yarn, который извлекает пакеты из общедоступного источника и занимает некоторое время, если есть попадание в кэш.
  4. Запустите сборку yarn.

Проблема появляется конкретно на этапе сборки yarn, где он жалуется на невозможность найти node_module согласно приведенному ниже журналу ошибок.

 2020-10-12T21:28:00.1761207Z ##[section]Starting: yarn build
2020-10-12T21:28:00.1884736Z ==============================================================================
2020-10-12T21:28:00.1885119Z Task         : PowerShell
2020-10-12T21:28:00.1885475Z Description  : Run a PowerShell script on Linux, macOS, or Windows
2020-10-12T21:28:00.1885806Z Version      : 2.170.1
2020-10-12T21:28:00.1886094Z Author       : Microsoft Corporation
2020-10-12T21:28:00.1886495Z Help         : https://learn.microsoft.com/azure/devops/pipelines/tasks/utility/powershell
2020-10-12T21:28:00.1886967Z ==============================================================================
2020-10-12T21:28:01.0882035Z Generating script.
2020-10-12T21:28:01.1294597Z ========================== Starting Command Output ===========================
2020-10-12T21:28:01.1574727Z ##[command]"C:windowsSystem32WindowsPowerShellv1.0powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:a_temp24379d8e-967c-4af6-9674-96aa85df30a4.ps1'"
2020-10-12T21:28:06.5140487Z yarn run v1.22.10
2020-10-12T21:28:06.5712118Z $ yarn run clean:builddir
2020-10-12T21:28:07.7032890Z $ npx rimraf ./Scripts/build
2020-10-12T21:28:31.4416409Z npx: installed 12 in 14.71s
2020-10-12T21:28:31.5265827Z $ npx concurrently --names "app,workspaces" "npx cross-env NODE_OPTIONS=--max-old-space-size=8192 npx webpack --mode production" "yarn wsrun -m --parallel build:prod" --verbose
2020-10-12T21:28:43.6196644Z npx: installed 54 in 11.679s
2020-10-12T21:28:44.5023615Z [workspaces] error Command "wsrun" not found.
2020-10-12T21:28:44.5026888Z [workspaces] info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
2020-10-12T21:28:44.5030627Z [workspaces] yarn wsrun -m --parallel build:prod exited with code 1
2020-10-12T21:28:46.4240020Z [app] npx: installed 7 in 1.967s
2020-10-12T21:29:09.1434285Z [app] C:npmprefixnode_moduleswebpack-clibincli.js:93
2020-10-12T21:29:09.1435399Z [app]              throw err;
2020-10-12T21:29:09.1435915Z [app]              ^
2020-10-12T21:29:09.1436363Z [app] 
2020-10-12T21:29:09.1436924Z [app] Error: Cannot find module 'webpack-bundle-analyzer'
2020-10-12T21:29:09.1437490Z [app] Require stack:
2020-10-12T21:29:09.1438065Z [app] - D:a1sAbstracted.Web.Appwebpack.config.js
2020-10-12T21:29:09.1438780Z [app] - C:npmprefixnode_moduleswebpack-clibinutilsconvert-argv.js
2020-10-12T21:29:09.1441594Z [app] - C:npmprefixnode_moduleswebpack-clibincli.js
2020-10-12T21:29:09.1442320Z [app] - C:npmprefixnode_moduleswebpackbinwebpack.js
2020-10-12T21:29:09.1443090Z [app]     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
2020-10-12T21:29:09.1443973Z [app]     at Function.Module._load (internal/modules/cjs/loader.js:841:27)
2020-10-12T21:29:09.1445082Z [app]     at Module.require (internal/modules/cjs/loader.js:1025:19)
2020-10-12T21:29:09.1446059Z [app]     at require (C:npmprefixnode_moduleswebpack-clinode_modulesv8-compile-cachev8-compile-cache.js:161:20)
2020-10-12T21:29:09.1447302Z [app]     at Object.<anonymous> (D:a1sAbstracted.Web.Appwebpack.config.js:3:30)
2020-10-12T21:29:09.1448348Z [app]     at Module._compile (C:npmprefixnode_moduleswebpack-clinode_modulesv8-compile-cachev8-compile-cache.js:194:30)
2020-10-12T21:29:09.1449351Z [app]     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
2020-10-12T21:29:09.1450132Z [app]     at Module.load (internal/modules/cjs/loader.js:985:32)
2020-10-12T21:29:09.1453332Z [app]     at Function.Module._load (internal/modules/cjs/loader.js:878:14)
2020-10-12T21:29:09.1454342Z [app]     at Module.require (internal/modules/cjs/loader.js:1025:19)
2020-10-12T21:29:09.1455342Z [app]     at require (C:npmprefixnode_moduleswebpack-clinode_modulesv8-compile-cachev8-compile-cache.js:161:20)
2020-10-12T21:29:09.1456524Z [app]     at WEBPACK_OPTIONS (C:npmprefixnode_moduleswebpack-clibinutilsconvert-argv.js:114:13)
2020-10-12T21:29:09.1457530Z [app]     at requireConfig (C:npmprefixnode_moduleswebpack-clibinutilsconvert-argv.js:116:6)
2020-10-12T21:29:09.1460155Z [app]     at C:npmprefixnode_moduleswebpack-clibinutilsconvert-argv.js:123:17
2020-10-12T21:29:09.1460996Z [app]     at Array.forEach (<anonymous>)
2020-10-12T21:29:09.1461622Z [app]     at module.exports (C:npmprefixnode_moduleswebpack-clibinutilsconvert-argv.js:121:15)
2020-10-12T21:29:09.1462534Z [app]     at C:npmprefixnode_moduleswebpack-clibincli.js:71:45
2020-10-12T21:29:09.1463445Z [app]     at Object.parse (C:npmprefixnode_moduleswebpack-clinode_modulesyargsyargs.js:576:18)
2020-10-12T21:29:09.1464195Z [app]     at C:npmprefixnode_moduleswebpack-clibincli.js:49:8
2020-10-12T21:29:09.1465077Z [app]     at Object.<anonymous> (C:npmprefixnode_moduleswebpack-clibincli.js:366:3)
2020-10-12T21:29:09.1465949Z [app]     at Module._compile (internal/modules/cjs/loader.js:1137:30)
2020-10-12T21:29:09.1467013Z [app]     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
2020-10-12T21:29:09.1467607Z [app]     at Module.load (internal/modules/cjs/loader.js:985:32)
2020-10-12T21:29:09.1468654Z [app]     at Function.Module._load (internal/modules/cjs/loader.js:878:14)
2020-10-12T21:29:09.1469217Z [app]     at Module.require (internal/modules/cjs/loader.js:1025:19)
2020-10-12T21:29:09.1469969Z [app]     at require (internal/modules/cjs/helpers.js:72:18)
2020-10-12T21:29:09.1470800Z [app]     at Object.<anonymous> (C:npmprefixnode_moduleswebpackbinwebpack.js:156:2)
2020-10-12T21:29:09.1471434Z [app]     at Module._compile (internal/modules/cjs/loader.js:1137:30)
2020-10-12T21:29:09.1472287Z [app]     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
2020-10-12T21:29:09.1473085Z [app]     at Module.load (internal/modules/cjs/loader.js:985:32) {
2020-10-12T21:29:09.1473556Z [app]   code: 'MODULE_NOT_FOUND',
2020-10-12T21:29:09.1474272Z [app]   requireStack: [
2020-10-12T21:29:09.1474736Z [app]     'D:\a\1\s\Abstracted.Web.App\webpack.config.js',
2020-10-12T21:29:09.1475804Z [app]     'C:\npm\prefix\node_modules\webpack-cli\bin\utils\convert-argv.js',
2020-10-12T21:29:09.1476626Z [app]     'C:\npm\prefix\node_modules\webpack-cli\bin\cli.js',
2020-10-12T21:29:09.1477161Z [app]     'C:\npm\prefix\node_modules\webpack\bin\webpack.js'
2020-10-12T21:29:09.1477854Z [app]   ]
2020-10-12T21:29:09.1478179Z [app] }
2020-10-12T21:29:09.2871272Z [app] npx cross-env NODE_OPTIONS=--max-old-space-size=8192 npx webpack --mode production exited with code 1
2020-10-12T21:29:11.8915556Z error Command failed with exit code 1.
2020-10-12T21:29:11.8918295Z info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
2020-10-12T21:29:12.1132424Z ##[error]PowerShell exited with code '1'.
2020-10-12T21:29:12.2192481Z ##[section]Finishing: yarn build
  

Я разместил шаг отладки в соответствии с приведенными ниже результатами и вижу, что определенно восстановлен модуль с указанным именем.

Вопрос Мне интересно, в чем может быть проблема, поскольку я не уверен, почему на этапе сборки yarn не отображается модуль кэша, хотя я установил значение для YARN_CACHE_FOLDER = $(Pipeline.Workspace).yarn и я вижу модуль сборки в отладке.

Вещи, которые я пробовал.

  • Если я не пропущу шаг установки yarn, все работает нормально.
  • Передали команду сборки yarn с вводом --cache-folder $(YARN_CACHE_FOLDER)
  • Установил npm_config_cache переменную, указывающую на то же местоположение, что и папка кэша yarn, поскольку я вижу, что yarn в конечном итоге yarn --> npm --> npx
  • Have set npm config set cache $(YARN_CACHE_FOLDER) --global

debug cache folder results

 2020-10-12T21:27:57.9564700Z ##[command]"C:windowsSystem32WindowsPowerShellv1.0powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:a_temp41464daa-068a-4419-b4ee-a22669f1d505.ps1'"
2020-10-12T21:27:58.2263973Z Yarn Cache Folder: D:a1.yarn
2020-10-12T21:27:58.2878796Z 
2020-10-12T21:27:58.2879351Z 
2020-10-12T21:27:58.2882145Z     Directory: D:a1.yarn
2020-10-12T21:27:58.2882732Z 
2020-10-12T21:27:58.2883036Z 
2020-10-12T21:27:58.2889439Z Mode                LastWriteTime         Length Name                                                                  
2020-10-12T21:27:58.2892321Z ----                -------------         ------ ----                                                                  
2020-10-12T21:27:58.2897508Z d-----       10/12/2020   9:14 PM                v6                                                                    
2020-10-12T21:27:58.3052399Z 
2020-10-12T21:27:58.3052981Z 
2020-10-12T21:27:58.3053995Z     Directory: D:a1.yarnv6
2020-10-12T21:27:58.3054249Z 
2020-10-12T21:27:58.3054668Z 
2020-10-12T21:27:58.3059237Z Mode                LastWriteTime         Length Name                                                                  
2020-10-12T21:27:58.3061399Z ----                -------------         ------ ----                                                                  
2020-10-12T21:27:58.3090817Z d-----       10/12/2020   9:13 PM                npm-webpack-bundle-analyzer-3.8.0-ce6b3f908daf069fd1f7266f692cbb3bded9
2020-10-12T21:27:58.3091604Z                                                  ba16-integrity                                                        
2020-10-12T21:28:00.0136005Z 
2020-10-12T21:28:00.0137465Z 
2020-10-12T21:28:00.0139239Z     Directory: 
2020-10-12T21:28:00.0140339Z     D:a1.yarnv6npm-webpack-bundle-analyzer-3.8.0-ce6b3f908daf069fd1f7266f692cbb3bded9ba16-integritynode_modules
2020-10-12T21:28:00.0141165Z 
2020-10-12T21:28:00.0142124Z 
2020-10-12T21:28:00.0145599Z Mode                LastWriteTime         Length Name                                                                  
2020-10-12T21:28:00.0148653Z ----                -------------         ------ ----                                                                  
2020-10-12T21:28:00.0286731Z d-----       10/12/2020   9:13 PM                webpack-bundle-analyzer                                               
2020-10-12T21:28:00.0320519Z 
2020-10-12T21:28:00.0321138Z 
2020-10-12T21:28:00.0365021Z     Directory: D:a1.yarnv6npm-webpack-bundle-analyzer-3.8.0-ce6b3f908daf069fd1f7266f692cbb3bded9ba16-integritynod
2020-10-12T21:28:00.0365533Z     e_moduleswebpack-bundle-analyzer.bin
2020-10-12T21:28:00.0365731Z 
2020-10-12T21:28:00.0365869Z 
2020-10-12T21:28:00.0370893Z Mode                LastWriteTime         Length Name                                                                  
2020-10-12T21:28:00.0373787Z ----                -------------         ------ ----                                                                  
2020-10-12T21:28:00.0378379Z -a----       10/12/2020   9:13 PM            309 webpack-bundle-analyzer                                               
2020-10-12T21:28:00.0390041Z -a----       10/12/2020   9:13 PM            186 webpack-bundle-analyzer.cmd                                           
2020-10-12T21:28:00.0964047Z 
2020-10-12T21:28:00.0964303Z 
2020-10-12T21:28:00.1723744Z ##[section]Finishing: debug cache folder
  

Абстрагированный YAML определения конвейера

 variables:
  - name: System.Debug 
    value: false
  - name: YARN_CACHE_FOLDER
    value: $(Pipeline.Workspace).yarn
  - name: npm_config_cache 
    value: $(Pipeline.Workspace).yarnv6

  
stages:
  # Build All Apps
- stage: Stage1
  displayName: Build
  condition: true
  jobs:
    
    - job: BuildCI
      condition: succeeded()
      steps:

      - checkout: self
        fetchDepth: 1
      - task: Cache@2
        displayName: Cache Yarn packages
        # condition: false
        inputs:
          key: 'yarn | "$(Agent.OS)" | CompanyName.Web.Appyarn.lock'
          restoreKeys: |
            yarn | "$(Agent.OS)"
          path: $(YARN_CACHE_FOLDER)
          cacheHitVar: CACHE_RESTORED

      - powershell: |
          Write-Host "Yarn Cache Folder: $(YARN_CACHE_FOLDER)"
          Write-Host "Searching Pipeline.Workspace Folder for WebPack"
          gci $(Pipeline.Workspace) -filter "*webpack-bundle-analyzer*" -recurse | Select FullName
        #condition: false
        displayName: 'debug folder'
  
      - task: Yarn@2
        displayName: 'Yarn Install Web.App'
        # condition: succeeded()
        condition: |
          and
          (
            succeeded(),
            ne(variables.CACHE_RESTORED, 'false')
          )
        inputs:
          ProjectDirectory: 'CompanyName.Web.App'
          Arguments: '--network-timeout 100000'
      
      - powershell: |
          Write-Host "Yarn Cache Folder: $(YARN_CACHE_FOLDER)"
          Write-Host "Searching Pipeline.Workspace Folder for WebPack"
          gci $(Pipeline.Workspace) -filter "*webpack-bundle-analyzer*" -recurse | Select FullName
        #condition: false
        displayName: 'debug folder'

      - powershell: |
          yarn --cwd "CompanyName.Web.App" build:prod --verbose
        displayName: 'yarn build'
  

Комментарии:

1. На этапе отладки модуль был установлен в D:a1.yarn folder . Но из журнала ошибок, похоже, он не использует пакеты в этой папке. При использовании установки yarn, пожалуйста, проверьте расположение пакетов (установка yarn). Пожалуйста, поделитесь с нами определением конвейера.

2. привет @KevinLu-MSFT Я добавил yaml определение в исходное сообщение, слишком длинное для комментариев. Да, пакет определенно извлекается, но не уверен, почему yarn install он его не извлекает.

3. Из примера yaml кажется, что пакет будет загружен в .yarn папку. Но с вашего этапа отладки пакеты загружаются в xxx/.yarn/v6 . Вы можете попытаться создать новый конвейер и настроить его для кэширования пакета в xx/.yarn папку. Пожалуйста, проверьте, может ли он внести некоторые изменения.

4. @walkerrandophsmith нет, мы этого не делали, я считаю, что шаг установки yarn делает больше, чем извлекает пакеты на основе того, что мы узнали о yarn, он фактически связывает пакеты yarn вместе, когда мы углубляемся в него дальше, и сборка yarn не делает этого, поэтому извлечения из кэша недостаточно.

5. @Sl-NZ Спасибо за ответ. Сегодня я проработал свою проблему и опубликовал ответ ниже. Возможно, вы перешли от этой проблемы, но, надеюсь, это также решит вашу проблему.

Ответ №1:

Я обнаружил, что каталог, который мне нужен для кэширования, — это не глобальные модули yarn, а мой проект node_modules . Я обновил свой конвейер yml, чтобы включить

 variables:
  YARN_CACHE_FOLDER: myprojectnode_modules