web-dev-qa-db-fra.com

Le coureur de génération de TeamCity ne reconnaît pas l'exécutable

J'essaie d'exécuter un simple gruntfile.js dans le cadre de ma construction dans TeamCity. Cependant, même après avoir installé grunt et grunt-cli en tant que packages de nœuds globaux, TeamCity ne les reconnaît toujours pas. Je peux taper grunt en ligne de commande et cela fonctionne, mais lorsque je l'exécute dans TeamCity, via un programme d'exécution en ligne de commande ou un exécutable avec des paramètres, le résultat est toujours correct.

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

J'ai aussi essayé d'installer TeamCity.Node , qui est un plugin pour exécuter des scripts grunt, mais il ne trouve pas non plus grunt. Des idées?

23
Caleb Jares

Je ne pouvais pas obtenir la solution acceptée au travail. Le problème pour moi était que les services TeamCity (serveur et agent) étaient exécutés sous des comptes système. Autant que je sache, il n’existe pas de concept «installer globalement le paquet npm pour tous les utilisateurs du système d’exploitation». Donc je:

  1. créé un utilisateur de TeamCity windows
  2. changé les services TeamCity pour fonctionner en tant que cet utilisateur
  3. connecté au système d'exploitation en tant qu'utilisateur de TeamCity
  4. couru npm installer -g grunt-cli
  5. redémarré les services.

À partir de là, les tâches NodeJS, NPM et Grunt commencent à fonctionner.

32
Christopher

Voici un complément à la réponse de Christopher (je n'ai pas assez de réputation pour faire un commentaire).

Si vous ne souhaitez pas créer un utilisateur sur le serveur de génération, vous pouvez écrire le chemin complet pour exécuter un package npm. Voici un programme en ligne de commande permettant d'exécuter Weyland sans créer d'utilisateur dédié sur le serveur de génération: 

  • Exécutable de la commande: "C:\Program Files\nodejs\node.exe"
  • Paramètres de commande: c:\users\Administrator\AppData\Roaming\npm\node_modules\weyland\bin\cli.js build

BTW, il semble que l'installateur de Node.js a une autre solution. Malheureusement, c'est coupé!

Voici la capture d'écran du programme d'installation de Node.js:

14
Zeke Lu

J'ai rencontré le même problème lorsque j'essayais de travailler avec TFS où il serait exécuté par l'utilisateur tfsservice. Exécuter nos versions en tant qu'utilisateur différent, comme le suggère la réponse de Christopher, n'était pas une option pour nous. Après avoir ajouté C:\Utilisateurs\tfsservice\AppData\Roaming\npm au chemin d'accès de l'utilisateur tfsservice, il a été en mesure de trouver le grunt-cli lorsque je me suis connecté manuellement en tant que tfsservice, mais pas lorsque TFS L’agent de compilation a effectué la construction. Au début, je viens de changer mon processus de construction pour utiliser le chemin complet du fichier grunt.cmd.

J'ai donc changé en utilisant ceci:

grunt deploy

à utiliser ceci:

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

J'imagine que faire de même pour votre utilisateur de Team City permettrait également de résoudre le problème. Bien sûr, si vous faites cela, vous devez vous assurer que le grunt-cli est installé au même emplacement sur tous vos serveurs de build.

Il s'avère que je venais juste de manquer l'étape finale du redémarrage de mon PC (pour que le service tfsservice soit redémarré), puis les versions ont pu trouver un grognement sans spécifier le chemin d'accès complet.

Je suppose que la description du programme d’installation de node.js ajustée indiquée par la réponse de Zeke Lu allait indiquer que les autres utilisateurs devaient mettre à jour leur variable d’environnement Path.

5
deadlydog

assurez-vous que le chemin% AppData%\Roaming\npm se trouve sur la variable de chemin GLOBAL de Windows, redémarrez le service d'agent de l'équipe et fonctionnera

3
user1688046

Vous devez redémarrer les agents de construction TeamCity après avoir installé NPM.

1
thebfactor

Je sais que cette question est un peu ancienne. Mais je me débattais avec le même problème aujourd'hui et je ne pouvais pas trouver de solution ... mais finalement je l'ai fait. Vous voilà.

Les étapes de construction de TeamCity doivent inclure:

1) Installation de grunt-cli Ligne de commande Commande: npm install grunt-cli

2) Exécution de la tâche de construction grunt Ligne de commande Commande: noeud "noeuds_modules/grunt-cli/bin/grunt" build

Le répertoire de travail pour les deux cas devrait être l'emplacement de votre fichier grountfile.js.

1
Kath

C'était un bug étrange et très ennuyant, mais j'ai finalement trouvé une solution de contournement. Dans le répertoire %AppData%\Roaming\npm, il y a deux fichiers: "grunt" et "grunt.cmd". "grunt" est un fichier Unix, et "grunt.cmd" est supposé exécuter l'application grunt-cli à l'aide d'un noeud, mais ce n'est pas le cas. J'ai dû créer un nouveau fichier appelé "grunt.bat" (qui a priorité sur "grunt.cmd") qui contient

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

Maintenant ça marche. Pas certain de pourquoi.

0
Caleb Jares

Vous n'avez pas besoin de changer le compte TeamCity du système au local comme l'a écrit Christoper . C'est plus simple:

1. [machine agent de génération] Assurez-vous que vous avez le répertoire du noeud et le répertoire des packages npm locaux dans votre PATH, exemple:

  C:\Users\'yourUserName'\AppData\Roaming\npm; C:\Program Files\nodejs 
  1. [build agent machine] Installez grunt globalement: npm install grunt-cli
  2. [étape de construction] Exécutez cmd dans le répertoire de votre projet: npm install -g grunt-cliVous pouvez effectuer cette étape une seule fois (sur votre ordinateur local) et valider les modifications de fichier dans le référentiel.
  3. [étape de compilation] Lancez cmd dans le répertoire de votre projet: npm install
  4. [étape de construction] Exécuter la construction grunt en tant que script powershell: powershell -Command "grunt build"

Pour une raison quelconque, l’agent de compilation exécuté sur un compte système ne peut pas accéder à C:\Users\'yourUserName'\AppData\Roaming\npm via cmd, mais via powershell. 

0
Michał Jarzyna