Подтвердить что ты не робот

Новичок TeamCity не распознает исполняемый файл

Я пытаюсь запустить простой gruntfile.js как часть моей сборки в TeamCity. Однако даже после установки grunt и grunt-cli в качестве глобальных пакетов node TeamCity все равно их не узнает. Я могу ввести grunt в командной строке, и он работает, но когда я запускаю его в TeamCity либо с помощью командной строки или исполняемого файла с параметрами, он все равно дает

'grunt' is not recognized as an internal or external command

Я также попытался установить TeamCity.Node, который является плагином для запуска скриптов grunt, но он также не может найти хрюканье. Любые идеи?

4b9b3361

Ответ 1

Я не мог заставить принятое решение работать. Проблема для меня заключалась в том, что службы TeamCity (сервер и агент) выполнялись под системными учетными записями. AFAIK, нет понятия "глобально установить пакет npm для всех пользователей ОС". Итак, я:

  • создан пользователь Windows TeamCity.
  • изменил службы TeamCity для запуска в качестве этого пользователя.
  • зарегистрирован в ОС как пользователь TeamCity
  • запущен npm install -g grunt-cli
  • перезапустили службы.

Оттуда задачи NodeJS, NPM и Grunt только начали работать.

Ответ 2

Вот дополнение к Кристоферу (я не имею достаточной репутации, чтобы сделать комментарий).

Если вы не хотите создавать пользователя на сервере сборки, вы можете написать полный путь для выполнения пакета npm. Вот бегун командной строки для запуска Weyland без создания выделенного пользователя на сервере сборки:

  • Исполняемый файл: "C:\Program Files\nodejs\node.exe"
  • Параметры команды: c:\users\Administrator\AppData\Roaming\npm\node_modules\weyland\bin\cli.js build

Кстати, кажется, что установщик Node.js имеет другое решение. К сожалению, он обрезается!

Вот скриншот Node.js installer:

Ответ 3

Я столкнулся с той же проблемой при попытке заставить работать с TFS, где он будет управляться пользователем tfsservice. Выполнение наших сборок как другого пользователя, как говорит Кристофер, не было для нас вариантом. После того, как я добавил C:\Users\tfsservice\AppData\Roaming\npm пользователю tfsservice Path, он смог найти grunt-cli, когда я вручную зарегистрировался как tfsservice, но не тогда, когда агент сборки TFS выполнил сборку. Сначала я только что изменил процесс сборки, чтобы использовать полный путь к файлу grunt.cmd.

Итак, я изменил это:

grunt deploy

используя это:

"C:\Users\tfsservice\AppData\Roaming\npm\grunt.cmd" deploy

Я полагаю, что делать то же самое для вашего пользователя Team City также устранит проблему. Конечно, если вы это сделаете, вы должны убедиться, что grunt-cli установлен в одном месте на всех ваших серверах сборки.

Оказывается, хотя я только что пропустил последний этап перезагрузки моего компьютера (так, чтобы tfsservice запустился), а затем сборки смогли найти хрюканье, не указав полный путь.

Я предполагаю, что обрезанное описание установщика node.js, показанное ответом Zeke Lu, должно было сказать, что другим пользователям необходимо обновить переменную окружения Path.

Ответ 4

убедитесь, что% AppData%\Роуминг\npm путь находится на вас. GLOBAL path variable, перезапустите команду агента агента и будет работать

Ответ 5

Я знаю, что этот вопрос старый. Но я боролся с той же проблемой в наши дни и не мог найти решение... но, наконец, я это сделал. Вот вы.

Шаги сборки TeamCity должны включать:

1) Установка grunt-cli Командная строка Команда: npm install grunt-cli

2) Запуск задачи сборки grunt Командная строка Команда: node "node_modules/grunt-cli/bin/grunt

Рабочий каталог для обоих случаев должен находиться там, где находится ваш grountfile.js.

Ответ 6

Это была странная и очень раздражающая ошибка, но я, наконец, нашел обходное решение. В каталоге %AppData%\Roaming\npm есть два файла: "grunt" и "grunt.cmd" . "grunt" - это unix файл, а "grunt.cmd" должен запускать приложение grunt-cli с помощью node, но это не так. Мне пришлось создать новый файл под названием "grunt.bat" (который имеет приоритет над "grunt.cmd" ), который содержит

node "%~dp0\node_modules\grunt-cli\bin\grunt" %*

Теперь он работает. Не знаю, почему.

Ответ 7

Вам не нужно менять учетную запись TeamCity из системы на локальную как писал Christoper. Это проще:

1. [машина агента сборки] Убедитесь, что в вашем PATH есть каталог node и локальный каталог пакетов npm, например:

 C:\Users\'yourUserName'\AppData\Roaming\npm;C:\Program Files\nodejs 
  1. [агент агента сборки] Установите grunt по всему миру: npm install grunt-cli
  2. [шаг сборки] Запустите cmd в проекте dirctory: npm install -g grunt-cli. Вы можете сделать этот шаг только один раз (на вашем локальном компьютере) и зафиксировать изменения файла для репо
  3. [шаг сборки] Запустите cmd в проекте dirctory: npm install
  4. [шаг сборки] Запустите сборку grunt как powershell script: powershell -Command "grunt build"

По какой-то причине агент сборки, работающий в системной учетной записи, может получить доступ к C:\Users\'yourUserName'\AppData\Roaming\npm через cmd, но через powershell.

Ответ 8

После установки NPM необходимо перезапустить агентов сборки TeamCity.