2016-05-11 19 views
12

Qual è il modo corretto di avviare uno script da jenkins, non far appendere la build e lasciare che il processo sia in esecuzione? Non riesco a farlo funzionare. O lo script non viene eseguito o la build si blocca.Un modo pulito per avviare uno script di shell in background da Jenkins

Se metto a "guscio Execute" del costruire passo bash relaunch.sh & o relaunch.sh > output.log & o nohup bash relaunch.sh &, non succede nulla; la build termina, ma il processo non viene eseguito. Immagino che possa essere collegato a Jenkins in attesa del error pipe to close.

Se faccio nohup bash relaunch.sh 2>&1 > output.log come suggerito here, l'uscita è correttamente reindirizzato, ma si blocca di compilazione (non completa), e il processo muore quando uccido la compilazione.

Aggiunta export BUILD_ID=dontKillMe, come suggerito here, here e here, sia alla "Esegui shell" step o dello stesso script non aiuta. La build si blocca e il processo muore quando uccido la build. Inutile dire che la mia conoscenza di Linux è molto limitata.

Come fanno le persone in modo pulito?

risposta

18

Un modo conveniente per ottenere vale a cambiare l'ambiente variabile BUILD_ID sotto Eseguire shell che Jenkins'sProcessTreeKiller sta cercando.

Facendo,

BUILD_ID=dontKillMe nohup bash relaunch.sh & 

Jenkins assumerà che il processo in background non viene generato dalla costruzione e non li ucciderà dopo aver terminato il lavoro.

Grazie a Joshua per la sua osservazione che si potrebbe anche usare come JENKINS_NODE_COOKIE

JENKINS_NODE_COOKIE=dontKillMe 
+1

Grazie, questo ci ha aiutato tremendamente oggi! –

+1

Se questo non funziona, prova a impostare 'JENKINS_NODE_COOKIE = dontKillMe' invece - https://devops.stackexchange.com/questions/1473/running-a-background-process-in-pipeline-job?newreg=13a0d91a60b34ad19103b50348945dd4 – Joshua

4

stavo avendo lo stesso identico problema. Ho finito per fissare questo inserendo il seguente nella casella di Jenkins eseguire la shell:

BUILD_ID=dontKillMe ./grid.sh 

ho spostato la & all'interno del file di script. Ecco come appare lo script:

#!/bin/bash 
java -jar selenium-server-standalone-3.0.1.jar -role hub & 

Speriamo che questo aiuti qualcuno!