[英]Run bash command on jenkins pipeline
在 groovy 脚本中(对于 jenkins 管道):如何运行bash
命令而不是sh
命令?
我尝试了以下方法:
在sh
调用中调用“ #!/bin/bash
”:
stage('Setting the variables values') {
steps {
sh '''
#!/bin/bash
echo "hello world"
'''
}
}
用bash
调用替换sh
调用:
stage('Setting the variables values') {
steps {
bash '''
#!/bin/bash
echo "hello world"
'''
}
}
附加信息:
我的命令比echo hello world
更复杂。
您提供的 Groovy 脚本将生成脚本中的第一行格式化为空行。 告诉脚本使用 /bin/bash 而不是 /bin/sh 运行的 shebang 需要位于文件的第一行,否则将被忽略。
因此,您应该像这样格式化 Groovy:
stage('Setting the variables values') {
steps {
sh '''#!/bin/bash
echo "hello world"
'''
}
}
它将使用 /bin/bash 执行。
根据此文档,您应该可以这样做:
node {
sh "#!/bin/bash \n" +
"echo \"Hello from \$SHELL\""
}
对于多行 shell 脚本或多次运行的脚本,我将创建一个新的 bash 脚本文件(从#!/bin/bash
开始),然后使用 Jenkinsfile 中的sh
简单地运行它:
sh 'chmod +x ./script.sh'
sh './script.sh'
我确信上述答案完美无缺。 但是,我很难将双引号添加为接近 100 的 bash 行。因此,以下方式对我有所帮助。 (简而言之,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"
'''
}
}
}
}
上述执行的结果是
如果您想将 Jenkins 上所有项目的默认 shell 更改为bash
,您可以通过 Web 门户在 Jenkins 配置中执行此操作:
管理 Jenkins > 配置系统(如果需要,只需转到https://{YOUR_JENKINS_URL}/configure
即可跳过此单击。)
使用值/bin/bash
填写标记为“Shell executable”的字段,然后单击“Save”。
就我而言,我必须通过jenkinsfile
在 bash 中执行一个 Shell 脚本。 这对我有用:
sh 'core_devops/automation/scripts/ecs_initialize.sh'
脚本的第一行有
#!/bin/bash
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.