複数のシェルコマンドを実行し、1つのコマンドの結果を次のコマンドなどで使用する必要があるJenkinsパイプラインを作成しようとしています。コマンドを3つの単一引用符のペア'''
でラップすると同じことができることがわかりました。しかし、パイプを使用して、あるコマンドの出力を別のコマンドに送る際に問題に直面しています。例えば
stage('Test') {
sh '''
echo "Executing Tests"
URL=`curl -s "http://localhost:4040/api/tunnels/command_line" | jq -r '.public_url'`
echo $URL
RESULT=`curl -sPOST "https://api.ghostinspector.com/v1/suites/[redacted]/execute/?apiKey=[redacted]&startUrl=$URL" | jq -r '.code'`
echo $RESULT
'''
}
パイプを使用したコマンドが正しく機能していません。 jenkinsコンソールの出力は次のとおりです。
+ echo Executing Tests
Executing Tests
+ curl -s http://localhost:4040/api/tunnels/command_line
+ jq -r .public_url
+ URL=null
+ echo null
null
+ curl -sPOST https://api.ghostinspector.com/v1/suites/[redacted]/execute/?apiKey=[redacted]&startUrl=null
パイプライン用のjenkinsスニペットジェネレーターでこれらすべてのコマンドを入力しようとすると、次の出力が得られました。
sh ''' echo "Executing Tests"
URL=`curl -s "http://localhost:4040/api/tunnels/command_line" | jq -r \'.public_url\'`
echo $URL
RESULT=`curl -sPOST "https://api.ghostinspector.com/v1/suites/[redacted]/execute/?apiKey=[redacted]&startUrl=$URL" | jq -r \'.code\'`
echo $RESULT
'''
コマンドjq -r \'.public_url\'
およびjq -r \'.code\'
のエスケープされた単一引用符に注意してください。この方法でコードを使用すると、問題が解決しました
PDATE::しばらくしてからでも問題が発生し始めました。これらのコマンドの前に実行される特定のコマンドがありました。それらの1つはgrunt serve
で、もう1つは./ngrok http 9000
でした。これらの各コマンドの後に遅延を追加し、今のところ問題を解決しました。
コマンドを&&で分割します
node {
FOO = world
stage('Preparation') { // for display purposes
sh "ls -a && pwd && echo ${FOO}"
}
}
出力例:-ls -a(ワークスペース内のファイル-pwd(ロケーションワークスペース)-echo world