在jenkins管道上运行bash命令

时间:2017-06-02 13:27:59

标签: linux bash shell jenkins groovy

在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更复杂。

5 个答案:

答案 0 :(得分:27)

您提供的Groovy脚本将第一行格式化为结果脚本中的空行。 shebang告诉脚本使用/ bin / bash而不是/ bin / sh运行,需要位于文件的第一行,否则将被忽略。

相反,您应该像这样格式化Groovy:

stage('Setting the variables values') {
    steps {
         bash '''#!/bin/bash
                 echo "hello world" 
         '''
    }
}

它将使用/ bin / bash执行。

答案 1 :(得分:9)

根据this document,您应该能够这样做:

node {
    sh "#!/bin/bash \n" + 
       "echo \"Hello from \$SHELL\""
}

答案 2 :(得分:2)

如果要将Jenkins上 all 项目的默认外壳程序更改为bash,则可以通过Web门户在Jenkins配置中执行以下操作:

管理Jenkins>配置系统(如果需要,只需单击https://{YOUR_JENKINS_URL}/configure即可跳过此单击。)

在标记为“ Shell可执行文件”的字段中填写值/bin/bash,然后单击“保存”。

答案 3 :(得分:1)

我确定上述答案可以完美地工作。但是,我很难将双引号作为bash行添加到接近100的位置。因此,以下方法对我有所帮助。 (简而言之,外壳的每一行都没有双引号)

另外,当我在步骤中使用“ 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"
                '''
            }
        }
    }
}

以上执行的结果是

enter image description here

答案 4 :(得分:0)

对于多行shell脚本或多次运行的脚本,我将创建一个新的bash脚本文件(从#!/bin/bash开始),并使用Jenkinsfile中的sh来运行它:

sh 'chmod +x ./script.sh'
sh './script.sh'