Linux 在jenkins管道上运行bash命令
在groovy脚本中(对于jenkins管道):如何运行Linux 在jenkins管道上运行bash命令,linux,bash,shell,jenkins,groovy,Linux,Bash,Shell,Jenkins,Groovy,在groovy脚本中(对于jenkins管道):如何运行bash命令而不是sh命令 我尝试了以下方法: 在sh调用中调用“#!/bin/bash”: stage('Setting the variables values') { steps { sh ''' #!/bin/bash echo "hello world" ''' } } 将sh调用替换为bash调用: stage('Setting
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更复杂根据,您应该可以这样做:
node {
sh "#!/bin/bash \n" +
"echo \"Hello from \$SHELL\""
}
您提供的Groovy脚本正在将第一行格式化为结果脚本中的空行。shebang命令脚本使用/bin/bash而不是/bin/sh运行,它必须位于文件的第一行,否则将被忽略 因此,您应该像这样格式化Groovy:
stage('Setting the variables values') {
steps {
sh '''#!/bin/bash
echo "hello world"
'''
}
}
它将与/bin/bash一起执行。我确信上面的答案非常有效。然而,我很难添加双引号作为bash行,其中接近100行。所以,下面的方法帮助了我。(简而言之,外壳的每一行周围没有双引号)
另外,当我在步骤中使用“bash”#!/bin/bash时,我得到了以下错误
java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法“**bash**”
pipeline {
agent none
stages {
stage ('Hello') {
agent any
steps {
echo 'Hello, '
sh '''#!/bin/bash
echo "Hello from bash"
echo "Who I'm $SHELL"
'''
}
}
}
}
上述执行的结果是
对于多行shell脚本或多次运行的脚本,我将创建一个新的bash脚本文件(从#!/bin/bash
开始),然后从Jenkins文件中使用sh
运行它:
sh 'chmod +x ./script.sh'
sh './script.sh'
如果要将Jenkins上所有项目的默认shell更改为bash
,可以通过web门户在Jenkins配置中执行此操作:
管理Jenkins>Configure System(如果需要,只需转到https://{YOUR_Jenkins\u URL}/Configure
,即可跳过此单击)
在标记为“Shell可执行文件”的字段中填入值/bin/bash
,然后单击“保存”。您的问题是什么?请清楚地阐述你的问题,并提供你所面临的问题的细节。我想我们也有同样的问题。即使在第二个示例中,它仍然使用sh而不是bash执行。这就是你看到的吗?是的,是的!A创建一个解决方案,在我的git存储库中添加一个.bash文件,所以我告诉Jenkins在我的项目中的特定路径上运行它。请参阅我在这篇StackOverflow文章中的答案:看看我在这里对类似问题的回答:徽标返回“+”工作流脚本的错误:9:美元符号后的非法字符串体字符;解决方案:在第9行第68列转义字面美元符号“\$5”或将值表达式“${5}”括起来。2c-437a-b8a2-db013fe42f62\''+你能发布脚本吗?从您粘贴的内容来看,+
前面似乎有两个引号,这是错误的。谢谢@Jacob我也遇到了同样的问题,您的评论帮助我解决了这些问题!不要使用“\n”和“+”,只使用三个引号来生成多行字符串。您测试过了吗?我采用了一种方式,设置在我的git存储库中运行一个文件,通过这种方式,我确信代码将作为bash代码而不是shell代码执行。是的,它成功地为我工作。我有一个使用bash特定语法的脚本,但在我格式化它之前一直失败,因此第一行不是空的。并非所有Jenkins版本都支持bash
step。但是sh''.#/bin/bash…
也应该可以工作。java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法“bash”
对于多行脚本或那些多次运行的脚本,我会创建一个新的bash脚本文件(从#!/bin/bash开始),然后简单地使用:chmod+x./script.sh'&&sh./script.sh'运行它