Inside a groovy script (for a jenkins pipeline): How can I run a bash
command instead of a sh
command?
I have tried the following:
Call "#!/bin/bash
" inside the sh
call:
stage('Setting the variables values') {
steps {
sh '''
#!/bin/bash
echo "hello world"
'''
}
}
Replace the sh
call with a bash
call:
stage('Setting the variables values') {
steps {
bash '''
#!/bin/bash
echo "hello world"
'''
}
}
Additional Info:
My command is more complex than a echo hello world
.
The Groovy script you provided is formatting the first line as a blank line in the resultant script. The shebang, telling the script to run with /bin/bash instead of /bin/sh, needs to be on the first line of the file or it will be ignored.
So instead, you should format your Groovy like this:
And it will execute with /bin/bash.
I'm sure that the above answers work perfectly. However, I had the difficulty of adding the double quotes as my bash lines where closer to 100. So, the following way helped me. (In a nutshell, no double quotes around each line of the shell)
Also, when I had "bash '''#!/bin/bash" within steps, I got the following error
java.lang.NoSuchMethodError: No such DSL method '**bash**' found among steps
The result of the above execution is
According to this document, you should be able to do it like so:
For multi-line shell scripts or those run multiple times, I would create a new bash script file (starting from
#!/bin/bash
), and simply run it withsh
from Jenkinsfile: