it-swarm.com.de

Führen Sie den Befehl bash in der jenkins-Pipeline aus

In einem groovigen Skript (für eine Jenkins-Pipeline): Wie kann ich einen bash -Befehl anstelle eines sh -Befehls ausführen?

Ich habe folgendes versucht:

Anruf "#!/bin/bash "innerhalb des sh Aufrufs:

stage('Setting the variables values') {
    steps {
         sh '''
            #!/bin/bash
            echo "hello world"
         '''
    }
}

Ersetzen Sie den sh -Aufruf durch einen bash -Aufruf:

stage('Setting the variables values') {
    steps {
         bash '''
            #!/bin/bash
            echo "hello world"
         '''
    }
}

Additional Info:

Mein Befehl ist komplexer als ein echo hello world.

32
Yago Azedias

Das von Ihnen bereitgestellte Groovy-Skript formatiert die erste Zeile als leere Zeile im resultierenden Skript. Der Shebang, der dem Skript mitteilt, dass es mit/bin/bash anstelle von/bin/sh ausgeführt werden soll, muss sich in der ersten Zeile der Datei befinden, da er sonst ignoriert wird.

Deshalb sollten Sie Ihren Groovy stattdessen wie folgt formatieren:

stage('Setting the variables values') {
    steps {
         bash '''#!/bin/bash
                 echo "hello world" 
         '''
    }
}

Und es wird mit/bin/bash ausgeführt.

33
Jake

Laut dieses Dokument solltest du es so machen können:

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

Ich bin sicher, dass die obigen Antworten perfekt funktionieren. Ich hatte jedoch die Schwierigkeit, die doppelten Anführungszeichen als meine Bash-Linien hinzuzufügen, die näher an 100 lagen. Daher half mir der folgende Weg. (Kurz gesagt, keine doppelten Anführungszeichen um jede Zeile der Shell)

Auch wenn ich "bash '' '#!/Bin/bash" innerhalb von Schritten hatte, bekam ich den folgenden Fehler 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"
                '''
            }
        }
    }
}

Das Ergebnis der obigen Ausführung ist

enter image description here