it-swarm.com.de

TeamCity Build Runner erkennt die ausführbare Datei nicht

Ich versuche, einen einfachen gruntfile.js als Teil meines Builds in TeamCity auszuführen. Selbst nach der Installation von grunt und grunt-cli als globale Knotenpakete werden sie von TeamCity nicht erkannt. Ich kann grunt in die Befehlszeile eingeben und es funktioniert, aber wenn ich es in TeamCity entweder über einen Befehlszeilenläufer oder über eine ausführbare Datei mit Parametern ausführte, gibt es immer noch

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

Ich habe auch versucht, TeamCity.Node zu installieren, ein Plugin zum Ausführen von Grunt-Skripten, aber es kann auch kein Grunzen finden. Irgendwelche Ideen?

23
Caleb Jares

Ich konnte die akzeptierte Lösung nicht zum Laufen bringen. Das Problem für mich war, dass die TeamCity-Dienste (Server und Agent) unter Systemkonten ausgeführt wurden. AFAIK, es gibt kein Konzept von "global installiertes npm-Paket für alle Benutzer des Betriebssystems". Also ich:

  1. einen TeamCity Windows-Benutzer erstellt
  2. die TeamCity-Dienste wurden so geändert, dass sie als dieser Benutzer ausgeführt werden
  3. als TeamCity-Benutzer am Betriebssystem angemeldet
  4. lief npm install -g grunt-cli
  5. dienste neu gestartet.

Von dort aus begannen die Aufgaben NodeJS, NPM und Grunt zu arbeiten.

32
Christopher

Hier ist eine Ergänzung zu Christopher's Antwort (ich habe nicht genug Ruf, um einen Kommentar abzugeben).

Wenn Sie keinen Benutzer auf dem Build-Server erstellen möchten, können Sie den vollständigen Pfad zum Ausführen eines NPM-Pakets angeben. Hier ist ein Befehlszeilenläufer zum Ausführen von Weyland , ohne einen dedizierten Benutzer auf dem Build-Server zu erstellen: 

  • Befehlsdatei: "C:\Program Files\nodejs\node.exe"
  • Befehlsparameter: c:\users\Administrator\AppData\Roaming\npm\node_modules\weyland\bin\cli.js build

BTW, es scheint, dass das Installationsprogramm von Node.js eine andere Lösung hat. Leider ist es getrimmt!

Hier ist der Screenshot des Installationsprogramms von Node.js:

14
Zeke Lu

Ich bin auf dasselbe Problem gestoßen, als ich versucht habe, mit TFS zu arbeiten wo es vom Benutzer tfsservice ausgeführt würde. Es war keine Option für uns, unsere Builds als einen anderen Benutzer auszuführen, wie die Antwort von Christopher andeutet. Nachdem ich C:\Users\tfsservice\AppData\Roaming\npm zum Benutzerpfad von tfsservice hinzugefügt habe, konnte ich den grunt-cli finden, wenn ich mich manuell als tfsservice anmeldete Nicht wenn der TFS Build Agent den Build durchgeführt hat. Zuerst habe ich gerade meinen Erstellungsprozess so geändert, dass der vollständige Pfad zur Datei grunt.cmd verwendet wird.

Also habe ich es anders gemacht:

grunt deploy

um dies zu verwenden:

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

Ich kann mir vorstellen, dass das Gleiche für Ihren Team City-Benutzer auch das Problem beheben würde. Wenn Sie dies tun, müssen Sie natürlich sicherstellen, dass das grunt-cli auf allen Build-Servern am selben Ort installiert ist.

Es stellte sich jedoch heraus, dass ich gerade den letzten Schritt des Neustarts meines PCs verpasst hatte (so dass der tfsservice neu gestartet wurde) und die Builds dann Grunt finden konnten, ohne den vollständigen Pfad anzugeben.

Ich gehe davon aus, dass die beschnittene Installationsdatei von node.js, die die Antwort von Zeke Lu zeigt, bedeuten würde, dass andere Benutzer ihre Path-Umgebungsvariable aktualisieren müssen.

5
deadlydog

stellen Sie sicher, dass der Pfad% AppData%\Roaming\npm sich in Ihrer Windows-Pfadvariablen GLOBAL befindet. Starten Sie den Team Agent-Dienst neu und funktionieren Sie

3
user1688046

Sie sollten die TeamCity Build Agents nach der Installation von NPM neu starten.

1
thebfactor

Ich weiß, dass diese Frage ziemlich alt ist. Aber ich hatte heutzutage mit dem gleichen Problem zu kämpfen und konnte keine Lösung finden ... aber schließlich tat ich es. Hier sind Sie ja.

TeamCity-Erstellungsschritte sollten Folgendes umfassen:

1) Installation grunt-cli Befehlszeile Befehl: npm install grunt-cli

2) Ausführen der Grunt-Build-Task Befehlszeile Befehl: Knoten "node_modules/grunt-cli/bin/grunt" build

Das Arbeitsverzeichnis für beide Fälle sollte dort liegen, wo sich Ihre grountfile.js befindet.

1
Kath

Dies war ein seltsamer und sehr ärgerlicher Fehler, aber ich fand schließlich eine Problemumgehung. Im %AppData%\Roaming\npm-Verzeichnis befinden sich zwei Dateien: "grunt" und "grunt.cmd". "grunt" ist eine Unix-Datei, und "grunt.cmd" soll die grunt-cli-Anwendung mit node ausführen, aber nicht. Ich musste eine neue Datei namens "grunt.bat" (die Vorrang vor "grunt.cmd" hat) erstellen, die enthält

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

Jetzt gehts. Nicht sicher warum.

0
Caleb Jares

Sie müssen das TeamCity-Konto nicht vom System in ein lokales wie Christoper schrieb ändern. Es ist einfacher Weg:

1. [Build-Agent-Computer] Stellen Sie sicher, dass sich im PATH ein Knotenverzeichnis und ein lokales NPM-Paketverzeichnis befinden. Beispiel:

  C:\Benutzer\"IhrUserName"\AppData\Roaming\npm; C:\Programme\nodejs 
  1. [Build-Agent-Computer] Installiere grunt global: npm install grunt-cli
  2. [Erstellungsschritt] Führen Sie cmd in Ihrem Projektverzeichnis aus: npm install -g grunt-cliSie können diesen Schritt nur einmal ausführen (auf Ihrem lokalen Computer) und Änderungen an der Repo-Datei vornehmen
  3. [Erstellungsschritt] Führen Sie cmd in Ihrem Projektverzeichnis aus: npm install
  4. [build step] Führe grunt build als Powershell-Skript aus: powershell -Command "grunt build"

Aus irgendeinem Grund kann der Build-Agent, der auf einem Systemkonto ausgeführt wird, nicht über cmd auf C:\Users\'yourUserName'\AppData\Roaming\npm zugreifen, jedoch über Powershell. 

0
Michał Jarzyna