2017-02-02 1 views
0

Ich habe das folgende Skript als Post Build-Schritt in Jenkins:SHELL: Build Schritt ‚Ausführen Shell‘ markiert als Versagen bauen

#!/bin/sh 
out=$(sudo curl http://192.168.33.19:8080/job/$JOB_NAME/lastBuild/api/json/json.tail.test --user "jenkins:jenkins" | jq -r '.result') 

res=$(echo $out|grep "FAIL") 

if [ "$res" = "FAILURE" ]; then 
    curl -X POST -d 'json={"RESULT":"'$res'","JOB_NAME":"'$JOB_NAME'","BUILD_NUMBER":"'$BUILD_NUMBER'"}' http://localhost:8888/jenkins.e2e.build.status 
fi; 

Der Build SUCCESS ist aber nach der Ausführung des Skripts, Ergebnis AUSFALL wird mit unten Konsolenausgabe in Jenkins:

+ out=SUCCESS 
++ grep FAIL 
++ echo SUCCESS 
+ res= 
Build step 'Execute shell' marked build as failure 
Xvfb stopping 
Finished: FAILURE 

Was ist der Fehler, den ich im Skript gemacht habe?

Antwort

0

Ihre Eingangsleitungen,

res=$(echo $out|grep "FAIL") 
if [ "$res" = "FAILURE" ]; then 

viel Sinn machen nicht, wie Sie für die Zeichenfolge FAIL an einer Schnur SUCCESS, die res Variable wäre natürlich leer sein,

echo "SUCCESS" |grep "FAIL" 
            # Empty output returned 
echo $? 
1         # Code '1' indicating failure error code of grep 
zu suchen versuchen

Bei einem String-Vergleich wie diesen benötigen Sie den Exit-Code grep, um einen Such-Erfolg/Fehler zu bestimmen.

Verwenden Sie einfach den Exit-Code grepdirekt und fragen Sie es leise mit dem -q Flag. Die folgende Bedingung führt die Anforderung cURL aus, wenn sie die Zeichenfolge FAIL aus der früheren Zeichenfolgenausgabe findet.

if grep -q "FAIL" <<<"$out" 
then 
    curl -X POST -d 'json={"RESULT":"'$res'","JOB_NAME":"'$JOB_NAME'","BUILD_NUMBER":"'$BUILD_NUMBER'"}' http://localhost:8888/jenkins.e2e.build.status 
fi 
+1

Vielen Dank für diese Hilfe. Ich bin eigentlich nicht so gut in Shell Scripting und weiß nicht viele Dinge darauf. Danke dir nochmal. –

+0

@MahbubRahman: Schätzen Sie es nützlich zu finden! – Inian

Verwandte Themen