在 Jenkins 管道上运行 bash 命令
- 2024-11-12 08:36:00
- admin 原创
- 24
问题描述:
在 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
。
解决方案 1:
您提供的 Groovy 脚本将结果脚本中的第一行格式化为空白行。指示脚本使用 /bin/bash 而不是 /bin/sh 运行的 shebang 需要位于文件的第一行,否则将被忽略。
因此,您应该像这样格式化您的 Groovy:
stage('Setting the variables values') {
steps {
sh '''#!/bin/bash
echo "hello world"
'''
}
}
它将使用 /bin/bash 执行。
解决方案 2:
根据本文档,您应该能够这样做:
node {
sh "#!/bin/bash
" +
"echo \"Hello from $SHELL\""
}
解决方案 3:
对于多行 shell 脚本或多次运行的脚本,我将创建一个新的 bash 脚本文件(从 开始),然后从 Jenkinsfile 中#!/bin/bash
直接运行它:sh
sh 'chmod +x ./script.sh'
sh './script.sh'
解决方案 4:
我确信上述答案非常有效。但是,我在添加双引号时遇到了困难,因为我的 bash 行接近 100。因此,以下方法对我有帮助。(简而言之,shell 的每一行周围都没有双引号)
另外,当我在步骤中使用“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"
'''
}
}
}
}
上述执行的结果是
解决方案 5:
如果您想要将Jenkins 上所有bash
项目的默认 shell 更改为,您可以通过 Web 门户在 Jenkins 配置中进行更改:
管理 Jenkins > 配置系统(如果您愿意,可以跳过此点击,直接进入https://{YOUR_JENKINS_URL}/configure
。)
在标有“Shell 可执行文件”的字段中填写值/bin/bash
,然后单击“保存”。
解决方案 6:
在我的例子中,我必须通过 bash 执行 Shell 脚本jenkinsfile
。以下是对我有用的方法:
sh 'core_devops/automation/scripts/ecs_initialize.sh'
剧本的第一行是
#!/bin/bash
解决方案 7:
问题确实是,如果 shebang 不是从文件最开始处启动的话,它就会被忽略。
作为对读者格式进行修改的替代方法Jenkinsfile
,我采用了以下方法:
sh label: 'Run fancy bash script',
script: '''
#!/usr/bin/env bash
echo "Hello ${SHELL}!"
'''.stripIndent().stripLeading()
请注意,这对于它的运行stripIndent()
来说并不是绝对必要的,但是有了它,Jenkins 日志会好得多。
解决方案 8:
就我的情况而言
sh '''#!/bin/bash
echo "Hello ${SHELL}!"
'''
返回“Hello /bin/sh”...
经过一番搜索,我发现另一个终端上的“sh”是“dash”,而不是 bash
Ubuntu22:
jenkins@ubuntu22:~$ command -v sh
/usr/bin/sh
jenkins@ubuntu22:~$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 4 Mar 23 2022 /usr/bin/sh -> dash
jenkins@ubuntu22:~$ command -v dash
/usr/bin/dash
在我的旧 Red Hat 7.4 上:
[jenkins@RH7.4 ~]$ command -v sh
/usr/bin/sh
[jenkins@RH7.4 ~]$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 4 Sep 6 2018 /usr/bin/sh -> bash
[jenkins@RH7.4 ~]$ command -v bash
/usr/bin/bash
[jenkins@RH7.4 ~]$ ls -l /usr/bin/bash
-rwxr-xr-x 1 root root 960632 Aug 3 2017 /usr/bin/bash
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件