webentwicklung-frage-antwort-db.com.de

Lassen Sie die Jenkins-Pipeline warten, bis der Server hochgefahren ist

Ich beginne gerade damit, unsere Builds in eine Jenkins-Build-Pipeline umzuwandeln. Ab einem bestimmten Punkt müssen wir auf den Start einer Webanwendung in einem Docker-Container warten.

Meine Idee war, so etwas zu benutzen:

timeout(120) {
    waitUntil {
        sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
    }
}

Leider schlägt der Pipeline-Build dadurch fehl:

FEHLER: Skript hat Exit-Code 4 zurückgegeben

Gibt es eine einfache Möglichkeit, diese Arbeit zu machen?

Bearbeiten:

Ich habe es geschafft, es mit dem folgenden Code zum Laufen zu bringen, aber die Phase ist immer noch als fehlgeschlagen markiert (obwohl der Build fortgesetzt wird und am Ende grün markiert ist).

timeout(120) {
    waitUntil {
        try {
            sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
            return true
        } catch (exception) {
            return false
        }
    }
}
13
Nitek

Sie haben gerade eine neue Version des Pipeline Nodes and Processes Plugin veröffentlicht, die Unterstützung für Rückkehr zum Exit-Status hinzufügt. Dies scheint den Job jetzt zu machen:

timeout(5) {
    waitUntil {
       script {
         def r = sh script: 'wget -q http://remoterhoste/welcome.jsf -O /dev/null', returnStatus: true
         return (r == 0);
       }
    }
}
30
Nitek

Sie können wget-Optionen verwenden, um dies zu erreichen:

waitUntil {
    sh 'wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}

120 Versuche plus Wartezeit von 1 Sekunde zwischen den Wiederholungsversuchen, selbst wenn die Verbindung verweigert wird, kann dies etwas länger dauern. Um sicherzustellen, dass es nur 120 Sekunden sind, können Sie timeout von Shell verwenden:

waitUntil {
    sh 'timeout 120 wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}
5