繁体   English   中英

在詹金斯管道上运行 bash 命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM