#caching #azure-devops #azure-pipelines #hadoop-yarn #pipeline
#кэширование #azure-devops #azure-конвейеры #hadoop-yarn #конвейер
Вопрос:
заранее благодарю вас за рассмотрение этой проблемы для меня.
Я работаю над улучшением времени сборки CI в конвейерах Azure devops с помощью этого предлагаемого механизма кэширования. Я также использую логическую функцию восстановления кэша, указанную в ссылке.
Краткое описание шагов приведено на скриншоте ниже
Краткое описание шагов
- Проверьте кэш на наличие пакетов yarn.
- Извлекайте пакеты из кэша, если есть попадание в кэш
- Пропустите шаг установки yarn, который извлекает пакеты из общедоступного источника и занимает некоторое время, если есть попадание в кэш.
- Запустите сборку 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