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
よりも複雑です。
指定したGroovyスクリプトは、結果のスクリプトの最初の行を空白行としてフォーマットしています。/bin/shの代わりに/ bin/bashで実行するようスクリプトに指示するShebangは、ファイルの最初の行にある必要があります。そうしないと無視されます。
代わりに、Groovyを次のようにフォーマットする必要があります。
stage('Setting the variables values') {
steps {
bash '''#!/bin/bash
echo "hello world"
'''
}
}
そして、/ bin/bashで実行されます。
このドキュメント によると、次のようにできるはずです。
node {
sh "#!/bin/bash \n" +
"echo \"Hello from \$Shell\""
}
上記の答えは完璧に機能すると確信しています。しかし、二重引用符を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"
'''
}
}
}
}
上記の実行の結果は