web-dev-qa-db-fra.com

Le pipeline Jenkins échoue avec "ne peut pas exécuter le programme Nohup" sous Windows

J'ai Windows 10 et je veux exécuter la commande sh dans Jenkinsfile à partir du pipeline Jenkins en utilisant bash pour Ubuntu pour Windows, mais cela ne fonctionne pas.

J'ai l'étape suivante dans mon pipeline Jenkins:

stage('sh how to') {
        steps {
            sh 'ls -l'
        }
    }

Le message d'erreur est:

[C:\Program Files (x86)\Jenkins\workspace\pipelineascode] Exécution du script shell Impossible d'exécuter le programme "Nohup" (dans le répertoire "C:\Program Files (x86)\Jenkins\workspace\pipelineascode"): CreateProcess error = 2

J'ai essayé de changer le paramètre Jenkins -> Shell exécutable avec 

C:\Windows\System32\bash.exe

mais même erreur ...

comment exécuter le script sh en utilisant bash de Windows 10?

13
flopic

Une recherche très rapide semble indiquer que votre erreur est liée au problème suivant: JENKINS-33708

La cause principale semble être que l'étape sh n'est pas prise en charge sous Windows. Vous pouvez utiliser bat ou installer Cygwin par exemple.

Néanmoins, deux solutions ont été proposées dans le lien précédent, vous suggérant de suivre les étapes suivantes: 

  • Installer git-bash
  • Assurez-vous que le dossier Git\bin (c'est-à-dire: C:\Program Files\Git\bin) se trouve dans le chemin de recherche global, afin que Jenkins trouve sh.exe.
  • Rendez Nohup disponible pour Jenkins, en procédant comme suit dans git-bash (adaptez vos chemins en conséquence):
    • mklink "C:\Program Files\Git\bin\Nohup.exe" "C:\Program Files\git\usr\bin\Nohup.exe"
    • mklink "C:\Program Files\Git\bin\msys-2.0.dll" "C:\Program Files\git\usr\bin\msys-2.0.dll"
    • mklink "C:\Programmes\Git\bin\msys-iconv-2.dll" "C:\Programmes\git\usr\bin\msys-iconv-2.dll"
    • mklink "C:\Program Files\Git\bin\msys-intl-8.dll" "C:\Program Files\git\usr\bin\msys-intl-8.dll" 

En fonction de votre installation, vous devrez peut-être utiliser ces chemins: 

  • mklink "C:\Program Files\Git\cmd\Nohup.exe" "C:\Program Files\git\usr\bin\Nohup.exe"
  • mklink "C:\Program Files\Git\cmd\msys-2.0.dll" "C:\Program Files\git\usr\bin\msys-2.0.dll"
  • mklink "C:\Program Files\Git\cmd\msys-iconv-2.dll" "C:\Program Files\git\usr\bin\msys-iconv-2.dll"
  • mklink "C:\Program Files\Git\cmd\msys-intl-8.dll" "C:\Program Files\git\usr\bin\msys-intl-8.dll"
20
John-Philip

Avec Git pour Windows 2.16.2, j’ai pu ajouter C:\Program Files\Git\usr\bin à PATH (plutôt que C:\Program Files\Git\bin) et par conséquent mes commandes sh fonctionnent à la fois dans FreeStyle Pipeline construit. Aucun mklink n'était nécessaire. ( La source )

1
thSoft

Avec Git pour Windows, je devais ajouter C:\Program Files\Git\bin à la variable d'environnement PATH du noeud esclave de Jenkins (pour accéder à sh), puis ajouter C:\Program Files\Git\usr\bin à PATH localement sur l'esclave Windows (pour accéder à Nohup).

1
sonicwave

Changer sh to bat a fonctionné pour moi - je lance Jenkins sous Windows. Mais ce n’est qu’après avoir résolu un problème lié au fait que je n’avais pas configuré correctement mes outils (maven et le JDK) dans Jenkins.

0
Mike