TeamCity с npm - Ошибка: ENOENT, stat 'C:\Windows\system32\config\systemprofile\AppData\Роуминг\npm'

У меня возникли серьезные проблемы с получением последних частей моей конфигурации TeamCity.

У меня есть шаг powershell, который выполняет следующие команды:

& npm install
& grunt build

запись следующего вывода:

Build (Powershell) (1s)
[13:18:08]PowerShell Executable: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
[13:18:08]Working directory: C:\BuildAgent\work\6a434ee5d01fd0d9
[13:18:08]PowerShell arguments: [-NonInteractive, -ExecutionPolicy, ByPass, -File, C:\BuildAgent\temp\buildTmp\powershell8407335260182621582.ps1]
[13:18:09]Error: ENOENT, stat 'C:\Windows\system32\config\systemprofile\AppData\Roaming\npm'
[13:18:09]
[13:18:09]grunt-cli: The grunt command line interface. (v0.1.13)
[13:18:09]Process exited with code 0

Я видел, что это известная проблема, но никто из решений работал у меня до сих пор.

Моя настройка такова: у меня есть две виртуальные машины в Azure, build и agent. Оба подключены к одному домену AD, domain, в котором есть пользователь domain\teamcityuser, который имеет "стандартный" класс (т.е. Не админ). Этот пользователь запускает как сервер сборки (в экземпляре build), так и агент сборки (в экземпляре agent).

Я пробовал эти вещи без успеха:

  • Создание каталога в сообщении об ошибке, удостоверение, что domain\teamcityuser имеет полные права доступа к нему.
  • Создание каталога npm в C:\Users\teamcityuser\AppData\Roaming
  • Создание файла C:\Windows\System32\config\SystemProfile\.npmrc с содержимым prefix=C:\npm-global, а также создание последней папки
  • Запуск npm cache clean перед запуском сборки
  • Установка глобального пакета npm через npm install -g npm

Чем больше я могу попытаться заставить это работать?


И чтобы избежать проблемы XY, вот моя фактическая проблема:

У меня есть проект .NET Web API с настройкой CI через эту установку TeamCity через Octopus Deploy и на сервер хостинга. У меня также есть github repo с кодом для веб-SPA, который будет использовать API. Спа-центр построен с grunt build, после чего есть папка dist со всем, что мне нужно развернуть.

Я бы хотел как можно больше использовать архитектуру CI для развертывания клиента.

Ответ 1

Учитывая, что путь к исполняемому файлу содержит SysWOW64, это x32 Powershell, поэтому он относится к пути профиля системы x32, который находится в C:\Windows\sysWOW64\config\systemprofile. Таким образом, вам нужно использовать этот путь в качестве базы для реализации любых обходных решений, например, создать папку C:\Windows\sysWOW64\config\systemprofile\AppData\Roaming\npm, а не просто C:\Windows\system32\config\systemprofile\AppData\Roaming\npm.