web-dev-qa-db-fra.com

Exécuter une commande Shell en Jenkins

J'essaie d'exécuter une commande Shell dans Jenkins, je travaille sur Windows 7. Dans la sortie de la console, j'ai ceci:

Building in workspace C:\Program Files (x86)\Jenkins\workspace\test
[test] $ sh -xe C:\Windows\TEMP\hudson6299483223982766034.sh
The system cannot find the file specified

FATAL: L'exécution de la commande a échoué.
Java.io.IOException: Cannot run program "sh" (in directory "C:\Program Files (x86)\Jenkins\workspace\test"): CreateProcess error=2, Le fichier spécifié est introuvable
    at Java.lang.ProcessBuilder.start(Unknown Source)
    at hudson.Proc$LocalProc.<init>(Proc.Java:244)
    at hudson.Proc$LocalProc.<init>(Proc.Java:216)
    at hudson.Launcher$LocalLauncher.launch(Launcher.Java:816)
    at hudson.Launcher$ProcStarter.start(Launcher.Java:382)
    at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.Java:97)
    at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.Java:66)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.Java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.Java:779)
    at hudson.model.Build$BuildExecution.build(Build.Java:205)
    at hudson.model.Build$BuildExecution.doRun(Build.Java:162)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.Java:537)
    at hudson.model.Run.execute(Run.Java:1744)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.Java:43)
    at hudson.model.ResourceController.execute(ResourceController.Java:98)
    at hudson.model.Executor.run(Executor.Java:374)
Caused by: Java.io.IOException: CreateProcess error=2, Le fichier spécifié est introuvable
    at Java.lang.ProcessImpl.create(Native Method)
    at Java.lang.ProcessImpl.<init>(Unknown Source)
    at Java.lang.ProcessImpl.start(Unknown Source)
    ... 16 more
Build step 'Exécuter un script Shell' marked build as failure
[BFA] Scanning build for known causes...
[BFA] No failure causes found
[BFA] Done. 0s
Finished: FAILURE

Une idée?

20
Med braim

Pour Windows slave, veuillez utiliser Execute Windows batch command.
Pour les esclaves de type Unix comme Linux ou Mac, Execute Shell est l'option.

Execute Windows Command Shell

49
mainframer

Autant que je sache, Windows ne supportera pas les scripts Shell prêts à l'emploi. Vous pouvez installer Cygwin ou Git pour Windows, accédez à Gérer Jenkins> Configurer l’environnement système et indiquez-le à l’emplacement du fichier sh.exe figurant dans leur installation. Par exemple:

C:\Program Files\Git\bin\sh.exe

Il y a une autre option que j'ai découverte. Celui-ci est meilleur car il m'a permis d'utiliser Shell dans des scripts de pipeline avec un simple sh "something".

Ajoutez le dossier au système PATH. Cliquez avec le bouton droit sur Ordinateur, cliquez sur Propriétés> Paramètres système avancés> Variables d'environnement, ajoutez C:\Program Files\Git\bin\ à la propriété Path de votre système.

Remarque IMPORTANTE: pour une raison quelconque, je devais l'ajouter au chemin d'accès global au système, l'ajout à l'utilisateur Chemin ne fonctionnait pas, même si Jenkins s'exécutait sur cet utilisateur.

Une note importante (merci bugfixr!):

Cela marche. Il est à noter que vous devrez redémarrer Jenkins pour pouvoir récupérer la nouvelle variable PATH. Je suis juste allé à mes services et reformulé à partir de là.

Avertissement: les noms peuvent différer légèrement car je n'utilise pas Windows en anglais.

11
andrzej.szmukala

Une erreur montre que le script n'existe pas

Le fichier n'existe pas. vérifier votre chemin complet

C:\Windows\TEMP\hudson6299483223982766034.sh
The system cannot find the file specified

De plus, pour lancer des scripts .sh dans Windows, vous devez avoir CYGWIN installé et bien configuré dans votre chemin.

Confirmez que le script existe.

Dans le script Jenkins, procédez comme suit pour confirmer que vous avez bien le fichier.

cd C:\Windows\TEMP\
ls -rtl
sh -xe hudson6299483223982766034.sh
4
aorfevre

Ceci est dû au fait que Jenkins n'est pas au courant du chemin d'accès au shell. Dans Manage Jenkins -> Configure System -> Shell, définissez le chemin du shell comme

  • C:\Windows\system32\cmd.exe
1
Kashan

Allez à Jenkins -> Gérer Jenkins -> Configurer le système -> Propriétés globales Cochez la case "Variables d'environnement" et ajoutez le chemin Java_HOME = "C:\Program Files\Java\jdk-10.0.1"

* N'écris pas bin à la fin

0
Sim Reaper