web-dev-qa-db-ja.com

ジェンキンスパイプラインでbashコマンドを実行する

Groovyスクリプト内(ジェンキンスパイプライン用):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よりも複雑です。

32
Yago Azedias

指定したGroovyスクリプトは、結果のスクリプトの最初の行を空白行としてフォーマットしています。/bin/shの代わりに/ bin/bashで実行するようスクリプトに指示するShebangは、ファイルの最初の行にある必要があります。そうしないと無視されます。

代わりに、Groovyを次のようにフォーマットする必要があります。

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

そして、/ bin/bashで実行されます。

33
Jake

このドキュメント によると、次のようにできるはずです。

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

上記の答えは完璧に機能すると確信しています。しかし、二重引用符を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