web-dev-qa-db-fra.com

Exécuter la commande bash sur le pipeline jenkins

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.

32
Yago Azedias

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.

33
Jake

Selon ce document , vous devriez pouvoir le faire comme suit:

node {
    sh "#!/bin/bash \n" + 
       "echo \"Hello from \$Shell\""
}
9
Jacob

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

enter image description here

2