在groovy脚本中(针对Jenkins管道):如何运行bash
命令而不是sh
命令?
我尝试了以下几种方式:
在sh
调用内部调用#!/bin/bash
:
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
更复杂。
7条答案
按热度按时间5fjcxozz1#
您提供的Groovy脚本正在将结果脚本中的第一行格式化为空行。Shebang告诉脚本使用/bin/bash而不是/bin/sh运行,它需要位于文件的第一行,否则将被忽略。
因此,您应该将Groovy设置为如下格式:
它将使用/bin/bash执行。
nfs0ujit2#
根据this document,您应该可以这样做:
gwo2fgha3#
对于多行的外壳脚本或那些多次运行的脚本,我会创建一个新的bash脚本文件(从
#!/bin/bash
开始),然后只需使用Jenkinsfile中的sh
运行它:6rvt4ljy4#
我相信以上这些答案都很管用。然而,我很难添加双引号作为我的猛烈抨击行,其中接近100。因此,下面的方法帮助了我。(简而言之,外壳的每一行都没有双引号)
此外,当我在步骤中使用“bash”“#!/bin/bash”时,我得到以下错误
java.lang.NoSuchMethodError: No such DSL method '**bash**' found among steps
上述执行的结果为
wpcxdonn5#
如果要将Jenkins上所有项目的默认外壳更改为
bash
,可以通过Web门户在Jenkins配置中执行此操作:管理Jenkins>配置系统(如果您想要跳过此点击,只需转到
https://{YOUR_JENKINS_URL}/configure
。)用值
/bin/bash
填写标记为‘Shell Executable’的字段,然后单击‘保存’。hmae6n7t6#
在我的例子中,我必须通过
jenkinsfile
在bash中执行一个Shell脚本。以下是对我起作用的方法:sh 'core_devops/automation/scripts/ecs_initialize.sh'
剧本的第一行写着
#!/bin/bash
u4dcyp6a7#
问题确实是,如果Shebang不是从文件的最开始开始,它就会被忽略。
作为破坏
Jenkinsfile
阅读器格式的替代方案,我已经开始使用以下内容:请注意,
stripIndent()
并不是它“工作”所必需的,但Jenkins Logs使用它要好得多。