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 sh
van 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
Antwoord 5, autoriteit 3%
Als u uw standaardshell wilt wijzigen in bash
voor 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}/configure
te gaan.)
Vul in het veld ‘Shell executable’ de waarde /bin/bash
in en klik op ‘Opslaan’.