2016-05-23 29 views
10

Desidero accedere a grep Jenkins Console Output come fase di post-produzione nello stesso lavoro che crea questo output. Il reindirizzamento dei registri con >> log.txt non è una soluzione poiché non è supportata dai miei passi di generazione.Posizione del log di "Console Output" di Jenkins nel filesystem

Corporatura:

echo "This is log" 

Messaggio costruire passo:

grep "is" path/to/console_output 

Dove si trova il file di registro specifico creato nel file system?

risposta

16

@Bruno Lavit ha una grande risposta, ma se si vuole si può semplicemente accedere al registro e scaricare come file txt per l'area di lavoro dal URL del lavoro:

${BUILD_URL}/consoleText 

Poi è solo una questione di scaricare questa pagina al tuo ${Workspace}

  • è possibile utilizzare "Invoke ANT" e utilizzare il target GET
  • Su Linux è possibile utilizzare wget per scaricarlo sul vostro spazio di lavoro
  • ecc

Buona fortuna!

Modifica: Il file di registro effettivo nel file system non è sullo slave, ma è conservato nella macchina master. Puoi trovarlo sotto: $JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log

Se stai cercando un'altra build, sostituisci lo lastSuccessfulBuild con la build che stai cercando.

+0

In passato, ho provato la soluzione proposta da @ Dvir669 e il comando wget non ha ottenuto il registro completo della console. Ecco perché ho usato il metodo descritto nella mia soluzione. Quindi se vuoi lavorare sul tuo log di build in un'azione step post build, la mia soluzione è migliore (credo). –

+0

Questo fallisce per il mio Jenkins a causa del fatto che la cartella viene chiamata solo "lastSuccessful". Ma mentre una build è in esecuzione, 'lastSuccessful' è una build precedente e di successo, non la build corrente. La build corrente diventa l'ultima completata se termina correttamente. –

+0

Anche questo non riesce se il lavoro di compilazione è all'interno di una cartella. JOB_NAME non contiene le cartelle intermedie "/ jobs /" che sono presenti in una cartella. –

6

È possibile installare questo plug-in Jenkins Console log per scrivere il registro nell'area di lavoro come fase di post-produzione.

Devi build the plugin yourself e install the plugin manually.

Avanti, è possibile aggiungere una fase di post costruzione del genere:

enter image description here

Con una fase di post accumulo supplementare (script di shell), si sarà in grado di grep il registro.

spero che aiutato :)

+0

Tuttavia sembra un piccolo plug-in, continuo a pensare che potrebbe essere raggiunto senza installazioni aggiuntive. Ci deve essere un modo in cui questo plugin ottiene l'output della console. Ma come e da dove? – Sayid

+0

Ho provato a installare questo plug-in, ho cambiato zip in hpi e ho provato a caricare dall'opzione avanzata nella gestione dei plugin, ma sta dando un errore 'Si è verificato un problema durante l'elaborazione della richiesta. Si prega di controllare il nostro bug tracker per vedere se un problema simile è già stato segnalato. Se è già stato segnalato, vota e metti un commento per consentirci di valutare l'impatto del problema. Se pensi che questo sia un nuovo problema, ti preghiamo di presentare un nuovo problema. Quando presenti un problema, assicurati di aggiungere l'intera traccia dello stack, insieme alla versione di Jenkins e ai relativi plugin. –

+0

@Sweety Hai costruito il plug-in prima di caricarlo dalla sezione avanzata? Devi ottenere il sorgente da Github, compilare questo plugin e caricare il file hpi. C'è un link su come costruire un plugin Jenkins nel mio post originale. –

5

Jenkins memorizza il master di log della console. Se si desidera l'accesso programmatico al registro e si sta eseguendo su master, è possibile accedere al registro già presente in Jenkins, senza copiarlo per le risorse utente o per ottenere l'URL del processo http.

Da http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Run.html#getLogFile(), restituisce l'oggetto File per l'output della console (nel file system jenkins, questo è il file "log" nella directory di output di build).

Nel mio caso, utilizziamo un lavoro concatenato (figlio) per eseguire analisi e analisi sulla build di un processo genitore.

Quando si utilizza uno script groovy eseguito in Jenkins, si ottiene un oggetto denominato "build" per l'esecuzione.Usiamo questo per ottenere il http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Build.html per il lavoro upstream, quindi chiama il lavoro .getLogFile().

bonus aggiuntivo; dato che è solo un oggetto File, chiamiamo .getParent() per ottenere la cartella in cui Jenkins memorizza il collaterale (come xml di test, variabili d'ambiente e altre cose che potrebbero non essere esplicitamente esposte attraverso le risorse) che possiamo anche analizzare.

Doppio vantaggio aggiuntivo; usiamo anche lavori matrice. Questo a volte fa pensare che il percorso del file sul sistema sia un dolore. .getLogFile(). getParent() elimina tutto il dolore.

1

Ho trovato l'uscita della console del mio lavoro nel browser al seguente indirizzo:

http://[Jenkins URL]/job/[Job Name]/default/[Build Number]/console

2

Questo è stato progettato per l'uso quando si ha un passaggio di generazione script di shell. Utilizzare solo le prime due righe per ottenere il nome del file.

È possibile ottenere il file di log della console (usando la magia bash) per la generazione di corrente da uno script di shell in questo modo e controllare la presenza di una certa stringa di errore, in mancanza del lavoro se trovato:

logFilename=${JENKINS_HOME}/${JOB_URL:${#JENKINS_URL}} 
logFilename=${logFilename//job\//jobs\/}builds/${BUILD_NUMBER}/log 

grep "**Failure**" ${logFilename} ; exitCode=$? 
[[ $exitCode -ne 1 ]] && exit 1 

Devi creare il nome del file prendendo il JOB_URL, rimuovendo la parte del nome host principale, aggiungendo nel percorso a JENKINS_HOME, sostituendo "/ job /" in "/ jobs /" per gestire tutte le cartelle nidificate, aggiungendo il numero di build corrente e il file nome.

Il grep restituisce 0 se la stringa viene trovata e 2 se c'è un errore di file. Quindi un 1 significa che ha trovato la stringa di indicazione dell'errore. Questo fa fallire la build.