web-dev-qa-db-fra.com

L'exécution de la commande batch Windows à partir de Jenkins échoue mais s'exécute correctement dans cmd.exe

J'essaie d'exécuter cette commande dans Jenkins après un MSbuild

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 

Y: est un lecteur réseau mappé. Cela fonctionne bien dans cmd.exe, mais lorsque j'essaie de l'exécuter dans Jenkins, l'erreur Invalid drive specification s'affiche.

Voici la sortie de Jenkins:

Time Elapsed 00:00:04.03
[trunk] $ cmd /c call C:\Windows\TEMP\hudson3389873107474371072.bat

C:\Program Files (x86)\Jenkins\workspace\trunk>xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 
Invalid drive specification
0 File(s) copied

C:\Program Files (x86)\Jenkins\workspace\trunk>exit 4 
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

Toute aide serait appréciée.

12
Chris

Moi aussi, j'ai eu un problème similaire une fois. Essayez d’accorder le service Jenkins «Ouvrir une session en tant que ce compte» sous services.msc et assurez-vous que le compte que vous tapez est le même que celui que vous utilisez pour exécuter cmd.exe.

enter image description here

14
adarshr

Ces commandes basées sur des fichiers JAR Java ont fonctionné pour moi:
cmd
Net Use x: \\
xcopy "dist \" x:\/Y

Et c'est tout! J'ai passé beaucoup de temps à résoudre ce problème et rien ne fonctionnait jusqu'à ce que j'écrive CMD et Net Use!
Je n'ai pas eu besoin de changer d'autorisation sur le service Jenkins ni d'utiliser la commande runas.

Mais je dois mentionner que tout le monde avait un accès en lecture et en écriture au lecteur réseau.

3
Jiří

Solution facile pour la plupart des choses.

  1. Créez une commande batch avec ce que vous essayez d'exécuter, filename.bat, avec la commande Invite text in.
  2. Créez un raccourci Windows normal pour la commande batch, modifiez les propriétés avancées des raccourcis et cochez la case "Exécuter en tant qu'administrateur" (astuce délicate). 
  3. Maintenant, lancez le raccourci nomfichier.lnk à partir de l’appel en ligne de commande de jenkins, cela vous évitera tout le jazz. 

:)

1
James Stevenson

J'avais le même problème avec ma tâche Windows qui exécutait un fichier de traitement par lots (je sais que ce n’était pas exactement la même chose), où j’ai essayé de copier le fichier dans un emplacement réseau, c’est-à-dire un lecteur partagé. J'ai utilisé le chemin UNC et le lecteur mappé également, mais l'erreur était la même. Pour moi, il s’agissait de l’erreur numéro 4 - code d’erreur MS DOS . La solution consistait à utiliser Net Use command! J'espère que ça aide.

1
user3104116

Face à un problème similaire et a trouvé deux façons de résoudre.

Type 1: Informer Jenkins du lecteur mappé . 1.Goto -> Gérer Jenkins -> Console de script (script Groovy) . 2. Exécuter la commande ci-dessous.

 def mapdrive = "Net Use Y: \\\\copy_nework_address"
 mapdrive.execute();
 println "Net Use".execute().getText()

Tapez: 2 1.Goto -> cmd -> lancez "Net Use" pour connaître l'adresse réseau

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Copy_Network_Address\Extraction_Zone\Jenkins\" /E

Conclusion: - Je préfère les deuxièmes types, car après chaque redémarrage, je devrais exécuter Groovy Script.

0
LearNer

La solution de adarshr (modification des identifiants de connexion du service) a fonctionné pour moi dans une partie du problème: dans mon cas, cela m'a permis d'extraire avec succès un référentiel Mercurial (utilisant le protocole ssh), ce que je pouvais ne pas faire lorsque vous utilisez «compte système local».

Cependant, mon comportement est toujours différent entre l'exécution d'un script de ligne de commande ou le même script à partir du script "exécuter Shell" de jenkins dans la section de construction. Dans mon cas, je compile une extension Python. Dans Jenkins, je ne peux pas importer l'extension (je ne vois aucune erreur, mais l'exécution s'arrête tout simplement, alors je suppose qu'elle se bloque).

Si je désinstalle le service et exécute l'agent esclave en tant que Java Web Start, j'obtiens le même comportement. C'est une solution temporaire pour moi, mais cela signifie que lorsque je redémarre la machine de génération de Windows, je dois redémarrer manuellement l'application Java Web Start.

Donc - au moins dans mon cas - il est clair qu'il s'agit d'un problème de justificatif d'identité.

Documentation d'utilisation des informations d'identification: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

0
mfiers

J'ai résolu mon problème avec le plugin CIFS .

0
swist