Dans un script groovy (pour un pipeline jenkins): Comment puis-je exécuter une commande bash
au lieu d'une commande sh
?
J'ai essayé ce qui suit:
Appelez "#!/bin/bash
" à l'intérieur de l'appel sh
:
stage('Setting the variables values') {
steps {
sh '''
#!/bin/bash
echo "hello world"
'''
}
}
Remplacez l'appel sh
par un appel bash
:
stage('Setting the variables values') {
steps {
bash '''
#!/bin/bash
echo "hello world"
'''
}
}
Informations supplémentaires:
Ma commande est plus complexe qu'un echo hello world
.
Le script Groovy que vous avez fourni formate la première ligne en tant que ligne vierge dans le script résultant. Shebang, indiquant au script de s'exécuter avec/bin/bash au lieu de/bin/sh, doit figurer sur la première ligne du fichier, sinon celui-ci sera ignoré.
Au lieu de cela, vous devriez formater votre Groovy comme ceci:
stage('Setting the variables values') {
steps {
bash '''#!/bin/bash
echo "hello world"
'''
}
}
Et il s'exécutera avec/bin/bash.
Selon ce document , vous devriez pouvoir le faire comme suit:
node {
sh "#!/bin/bash \n" +
"echo \"Hello from \$Shell\""
}
Je suis sûr que les réponses ci-dessus fonctionnent parfaitement. Cependant, j'ai eu du mal à ajouter les guillemets doubles car mes lignes bash étaient plus proches de 100. La méthode suivante m'a donc aidé. (En un mot, pas de guillemets doubles autour de chaque ligne du shell)
Aussi, quand j'ai eu "bash '' '#!/Bin/bash" dans les étapes, j'ai eu l'erreur suivante Java.lang.NoSuchMethodError: No such DSL method '**bash**' found among steps
pipeline {
agent none
stages {
stage ('Hello') {
agent any
steps {
echo 'Hello, '
sh '''#!/bin/bash
echo "Hello from bash"
echo "Who I'm $Shell"
'''
}
}
}
}
Le résultat de l'exécution ci-dessus est