Linux 在jenkins管道上运行bash命令

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

在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更复杂根据,您应该可以这样做:

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'运行它