Voer bash-commando uit op jenkins-pijplijn

In een groovy script (voor een jenkins-pijplijn): Hoe kan ik een bash-opdracht uitvoeren in plaats van een sh-opdracht?

Ik heb het volgende geprobeerd:

Bel “#!/bin/bash” binnen de sh-aanroep:

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

Vervang de sh-aanroep door een bash-aanroep:

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

Aanvullende informatie:

Mijn opdracht is complexer dan een echo hello world.


Antwoord 1, autoriteit 100%

Het Groovy-script dat u hebt opgegeven, maakt de eerste regel op als een lege regel in het resulterende script. De shebang, die het script vertelt om te draaien met /bin/bash in plaats van /bin/sh, moet op de eerste regel van het bestand staan, anders wordt het genegeerd.

Dus in plaats daarvan moet je je Groovy als volgt formatteren:

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

En het wordt uitgevoerd met /bin/bash.


Antwoord 2, autoriteit 13%

Volgens dit document, je zou het zo moeten kunnen doen:

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

Antwoord 3, autoriteit 8%

Voor shellscripts met meerdere regels of die meerdere keren worden uitgevoerd, zou ik een nieuw bash-scriptbestand maken (beginnend bij #!/bin/bash), en het gewoon uitvoeren met shvan Jenkinsfile:

sh 'chmod +x ./script.sh'
sh './script.sh'

Antwoord 4, autoriteit 7%

Ik weet zeker dat de bovenstaande antwoorden perfect werken. Ik had echter de moeilijkheid om de dubbele aanhalingstekens toe te voegen omdat mijn bash-regels dichter bij 100 waren. Dus de volgende manier hielp me. (In een notendop, geen dubbele aanhalingstekens rond elke regel van de schaal)

Ook toen ik “bash ”’#!/bin/bash” binnen de stappen had, kreeg ik de volgende fout 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"
                '''
            }
        }
    }
}

Het resultaat van de bovenstaande uitvoering is

voer hier de afbeeldingsbeschrijving in


Antwoord 5, autoriteit 3%

Als u uw standaardshell wilt wijzigen in bashvoor alleprojecten op Jenkins, kunt u dit doen in de Jenkins-configuratie via de webportal:

Jenkins > beheren Systeem configureren (Sla deze klikken over als je wilt door gewoon naar https://{YOUR_JENKINS_URL}/configurete gaan.)

Vul in het veld ‘Shell executable’ de waarde /bin/bashin en klik op ‘Opslaan’.

Other episodes