Сборщик TeamCity не распознает исполняемый файл
Я пытаюсь запустить простой gruntfile.js
как часть моей сборки в TeamCity. Однако даже после установки grunt и grunt-cli в качестве пакетов глобальных узлов TeamCity по-прежнему не распознает их. я могу печатать grunt
в командной строке, и он работает, но когда я запускаю его в TeamCity либо из командной строки, либо из исполняемого файла с параметрами, он все равно дает
'grunt' is not recognized as an internal or external command
Я также попытался установить TeamCity.Node, который является плагином для запуска скриптов grunt, но он также не может найти grunt. Есть идеи?
8 ответов
Я не мог заставить принятое решение работать. Проблема для меня заключалась в том, что службы TeamCity (сервер и агент) работали под системными учетными записями. AFAIK, нет понятия "глобально установить пакет npm для всех пользователей ОС". Так что я:
- создал пользователя Windows TeamCity
- изменил сервисы TeamCity для запуска под этим пользователем
- вошел в ОС как пользователь TeamCity
- запустил npm install -g grunt-cli
- перезапустил сервисы.
Оттуда задачи NodeJS, NPM и Grunt только начали работать.
Вот дополнение к ответу Кристофера (у меня недостаточно репутации, чтобы комментировать).
Если вы не хотите создавать пользователя на сервере сборки, вы можете написать полный путь для выполнения пакета 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:
Я столкнулся с той же проблемой, пытаясь заставить работать с TFS, где он будет запускаться пользователем tfsservice. Запуск сборок от имени другого пользователя, как показывает ответ Кристофера, для нас не вариант. После того, как я добавил C:\Users\tfsservice\AppData\Roaming\npm в Путь пользователя tfsservice, он смог найти grunt-cli, когда я вошел в систему как tfsservice вручную, но не тогда, когда агент сборки TFS выполнил сборку. Сначала я просто изменил процесс сборки, чтобы использовать полный путь к файлу grunt.cmd.
Поэтому я перестал использовать это:
grunt deploy
чтобы использовать это:
"C:\Users\tfsservice\AppData\Roaming\npm\grunt.cmd" deploy
Я думаю, что то же самое для вашего пользователя Team City также решит проблему. Конечно, если вы делаете это, вы должны убедиться, что grunt-cli установлен в одном месте на всех ваших серверах сборки.
Оказывается, однако, что я только что пропустил последний шаг перезагрузки моего компьютера (чтобы перезапустить tfsservice), и тогда сборки смогли найти ворчание, не указав полный путь.
Я предполагаю, что в описании установщика trimmed node.js, показанном в ответе Зика Лу, другие пользователи должны обновить свою переменную среды Path.
Убедитесь, что путь%AppData%\Roaming\npm указан на вашей переменной Windows GLOBAL path, перезапустите службу агента группы и будете работать
Вам следует перезапустить TeamCity Build Agents после установки NPM.
Я знаю, что этот вопрос довольно старый. Но я боролся с той же проблемой в настоящее время и не мог найти решение... но в конце концов я сделал. Вот ты где.
Этапы сборки TeamCity должны включать:
1) Установка grunt-cli Командная строка: npm установить grunt-cli
2) Запуск задачи сборки grunt Командная строка: сборка узла "node_modules/grunt-cli/bin/grunt"
В обоих случаях рабочий каталог должен находиться там, где находится ваш grountfile.js.
Вам не нужно менять учетную запись TeamCity с системной на локальную, как писал Кристопер. Это более простой способ:
1. [машина агента сборки] Убедитесь, что в вашем PATH есть каталог узла и локальный каталог пакетов npm, например:
C: \ Users \ 'yourUserName' \ AppData \ Roaming \ npm; C: \ Program Files \ nodejs
- [build agent machine] Установите grunt глобально:
npm install grunt-cli
- [шаг сборки] Запустите cmd в каталоге вашего проекта:
npm install -g grunt-cli
, Вы можете сделать этот шаг только один раз (на своем локальном компьютере) и зафиксировать изменения файла в репозитории. - [шаг сборки] Запустите cmd в каталоге вашего проекта:
npm install
- [шаг сборки] Запустите grunt build как скрипт powershell:
powershell -Command "grunt build"
По какой-то причине агент сборки, работающий под системной учетной записью, не может получить доступ к C:\Users\'yourUserName'\AppData\Roaming\npm
через cmd, но через powershell можно.
Это была странная и очень раздражающая ошибка, но я наконец нашел обходной путь. в %AppData%\Roaming\npm
В каталоге есть два файла: "grunt" и "grunt.cmd". "grunt" - это файл Unix, а "grunt.cmd" должен запускать приложение grunt-cli с использованием узла, но это не так. Мне пришлось создать новый файл с именем "grunt.bat" (который имеет приоритет над "grunt.cmd"), который содержит
node "%~dp0\node_modules\grunt-cli\bin\grunt" %*
Теперь это работает. Не уверен почему.