2016-06-20 22 views
5

Attualmente sto iniziando a convertire le nostre build in una pipeline di build Jenkins. Ad un certo punto è necessario attendere l'avvio di un'applicazione web all'interno di un container.Attendere la pipeline Jenkins fino a quando il server non è attivo

La mia idea era di usare qualcosa di simile:

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

Purtroppo questo rende la costruzione gasdotto venga meno

ERROR: script returned exit code 4

C'è un modo semplice per fare questo lavoro?

Edit:

sono riuscito a farlo funzionare utilizzando il seguente codice, ma lo stadio è ancora segnato come non riuscito (anche se la build continua ed è contrassegnato verde alla fine).

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

risposta

10

Hanno appena rilasciato una nuova versione del Pipeline Nodes and Processes Plugin, che aggiunge il supporto per returning the exit status. Questo sembra fare il lavoro ora:

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

Ho dovuto avvolgere il codice con 'script {def ... return}'. – xverges

+1

Vale anche la pena notare che, nella mia versione jenkins, le unità di timeout sono impostate su minuti. – xverges

+0

Hanno cambiato la sintassi della pipeline molto negli ultimi mesi, quindi è abbastanza probabile che questo non sia aggiornato. – Nitek

1

È possibile utilizzare le opzioni di wget per raggiungere questo:

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

120 tentativi, più aspettare 1s tra i tentativi, riprovare anche in caso di connessione rifiutata, questo potrebbe essere un po 'più secondi. Quindi, per assicurarsi che sia solo 120s, quindi è possibile utilizzare timeout da shell:

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

Approccio interessante! Non c'è più bisogno del waitUntil, vero? – Nitek

+0

Ho appena realizzato che non funziona nel mio caso, perché una volta avviato il server delle applicazioni restituirà un 404 fino all'avvio dell'applicazione. Se wget trys per connettersi durante questo periodo uscirà con il codice di errore 8 – Nitek

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

questa soluzione funziona bene.

+2

Si prega di provare a fornire una spiegazione per migliorare la risposta. –

+1

@ MickaëlB è solo una copia della risposta accettata ... – Nitek

Problemi correlati