在groovy脚本中(对于jenkins管道):如何运行bash
命令而不是sh
命令?
我尝试了以下内容:
致电" #!/bin/bash
"在sh
电话中:
stage('Setting the variables values') {
steps {
sh '''
#!/bin/bash
echo "hello world"
'''
}
}
将sh
来电替换为bash
来电:
stage('Setting the variables values') {
steps {
bash '''
#!/bin/bash
echo "hello world"
'''
}
}
其他信息:
我的命令比echo hello world
更复杂。
答案 0 :(得分:27)
您提供的Groovy脚本将第一行格式化为结果脚本中的空行。 shebang告诉脚本使用/ bin / bash而不是/ bin / sh运行,需要位于文件的第一行,否则将被忽略。
相反,您应该像这样格式化Groovy:
stage('Setting the variables values') {
steps {
bash '''#!/bin/bash
echo "hello world"
'''
}
}
它将使用/ bin / bash执行。
答案 1 :(得分:9)
根据this document,您应该能够这样做:
node {
sh "#!/bin/bash \n" +
"echo \"Hello from \$SHELL\""
}
答案 2 :(得分:2)
如果要将Jenkins上 all 项目的默认外壳程序更改为bash
,则可以通过Web门户在Jenkins配置中执行以下操作:
管理Jenkins>配置系统(如果需要,只需单击https://{YOUR_JENKINS_URL}/configure
即可跳过此单击。)
在标记为“ Shell可执行文件”的字段中填写值/bin/bash
,然后单击“保存”。
答案 3 :(得分:1)
我确定上述答案可以完美地工作。但是,我很难将双引号作为bash行添加到接近100的位置。因此,以下方法对我有所帮助。 (简而言之,外壳的每一行都没有双引号)
另外,当我在步骤中使用“ bash'''#!/ bin / bash“时,出现以下错误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"
'''
}
}
}
}
以上执行的结果是
答案 4 :(得分:0)
对于多行shell脚本或多次运行的脚本,我将创建一个新的bash脚本文件(从#!/bin/bash
开始),并使用Jenkinsfile中的sh
来运行它:
sh 'chmod +x ./script.sh'
sh './script.sh'