web-dev-qa-db-fra.com

Faire attendre le pipeline Jenkins jusqu'à ce que le serveur soit en place

Je commence actuellement à convertir nos builds en un pipeline de build Jenkins. À un certain moment, il nous faut attendre le démarrage d'une application web dans un conteneur docker.

Mon idée était d'utiliser quelque chose comme ça:

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

Malheureusement, cela fait échouer la construction du pipeline:

ERREUR: le script a renvoyé le code de sortie 4

Existe-t-il un moyen simple de faire fonctionner cela?

Modifier:

J'ai réussi à le faire fonctionner en utilisant le code suivant, mais l'étape est toujours marquée comme ayant échoué (bien que la construction continue et soit marquée en vert à la fin).

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

Ils viennent de publier une nouvelle version du Plugin Node and Processes Plugin qui ajoute la prise en charge de retour du statut de sortie . Cela semble faire le travail maintenant:

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

Vous pouvez utiliser les options wget pour y parvenir:

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

120 essais, plus attendre 1 seconde entre les tentatives, réessayer même en cas de connexion refusée, cela peut prendre un peu plus de secondes. Donc, pour vous assurer qu'il ne s'agit que de 120, vous pouvez utiliser timeout à partir de Shell:

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