web-dev-qa-db-ja.com

ジェンキンスパイプライン:パイプを使用した複数行のシェルコマンド

複数のシェルコマンドを実行し、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
17
Mandeep Singh

パイプライン用の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でした。これらの各コマンドの後に遅延を追加し、今のところ問題を解決しました。

10
Mandeep Singh

コマンドを&&で分割します

node {
  FOO = world
  stage('Preparation') { // for display purposes
      sh "ls -a && pwd && echo ${FOO}"
  }
}

出力例:-ls -a(ワークスペース内のファイル-pwd(ロケーションワークスペース)-echo world