wake-up-neo.net

jenkins Pipeline: mehrzeilige Shell-Befehle mit Pipe

Ich versuche, eine Jenkins-Pipeline zu erstellen, in der ich mehrere Shell-Befehle ausführen und das Ergebnis eines Befehls im nächsten Befehl verwenden muss. Ich fand heraus, dass das Umschließen der Befehle in ein Paar von drei einfachen Anführungszeichen ''' dasselbe bewirken kann. Ich habe jedoch Probleme bei der Verwendung von Pipe, um die Ausgabe eines Befehls an einen anderen Befehl weiterzuleiten. Zum Beispiel 

   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
      '''
   }

Befehle mit Pipe funktionieren nicht richtig. Hier ist die Ausgabe der Jenkins-Konsole:

+ 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
12
Mandeep Singh

Ich habe versucht, alle diese Befehle in den Jenkins-Snippet-Generator für Pipeline einzugeben, und dies ergab folgende Ausgabe:

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
'''

Beachten Sie die einzelnen Anführungszeichen in den Befehlen jq -r \'.public_url\' und jq -r \'.code\'. Durch die Verwendung des Codes auf diese Weise wurde das Problem behoben

UPDATE: : Nach einiger Zeit gab es sogar Probleme. Vor diesen Befehlen wurden bestimmte Befehle ausgeführt. Einer von ihnen war grunt serve und der andere war ./ngrok http 9000. Ich habe nach jedem dieser Befehle etwas Verzögerung hinzugefügt und das Problem wurde vorerst gelöst. 

6
Mandeep Singh

Ich teile die Befehle mit &&

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

Das Beispiel gibt Folgendes aus: - ls -a (die Dateien in Ihrem Arbeitsbereich - pwd (Standortarbeitsbereich) - echo world