2016-03-23 28 views

risposta

3

Se non ci sono ulteriori requisiti che vorrei fare semplicemente nella shell, ad esempio:

find $JENKINS_HOME/jobs/haystack -name log -exec grep -l needle {} \; \ 
    | sed 's|.*/\(.*\)/log|\1|' 
+1

Mentre questa è una risposta soddisfacente, sarei molto impaurito se uno dei miei sviluppatori chiedesse l'accesso al nostro server Jenkins in modo che possano eseguire comandi di shell contro le directory dei lavori. :) –

+0

È possibile creare un lavoro Jenkins che esegua questo in un passo della shell se si è preoccupati di ciò, @Dave. E riferendomi alla tua risposta, non penso che l'esecuzione degli script di Groovy in console sia più sicura che garantire l'accesso alla shell :) – jil

1

C'è la Log Parser Plugin

mettendo in evidenza le linee di interesse nel registro (errori, avvisi, informazioni)

dividendo il registro in sezioni che mostrano un riepilogo del numero di errori, avvertenze e linee di informazione all'interno del registro e delle sue sezioni.

che collega la sintesi di errori e avvisi nel contesto del registro completo, il che rende facile trovare una linea di interesse nel registro

che mostra un riepilogo di errori e avvisi sulla pagina di compilazione

Se sono vecchi registri, @jil ha la risposta assumendo che tu sia su Linux.

+0

Non c'è bisogno di assumere Linux. Solo _bash_, _find_, _grep_ e _sed_. Possono essere facilmente installati su Windows (ad es. Da cygwin o mingw) e è probabile che tu li abbia già, cioè se stai usando Git. – jil

5

Spesso utilizzo lo Jenkins Script Console per attività come questa. Lo Groovy plugin fornisce la console di script, ma se si intende utilizzare la console di script per la manutenzione periodica, è anche necessario lo Scriptler plugin che consente di gestire gli script eseguiti.

Da Manage Jenkins ->Script Console, è possibile scrivere uno script Groovy che consente di scorrere il lavoro del build cercando la stringa corrispondente:

JOB_NAME = "My Job" 
BUILD_STRING = "Hello, world" 

def job = Jenkins.instance.items.find { it.name == JOB_NAME } 
for (build in job.builds) { 
    def log = build.log 
    if (log.contains(BUILD_STRING)) { 
    println "${job.name}: ${build.id}" 
    } 
} 
+0

FWIW, per cercare tra tutti i lavori usa 'def job = Jenkins.instance.items.find {true}' –

+0

Questo non funziona con la nostra configurazione CI. Puoi confermare se questa ricerca per i registri della console dei lavori attualmente in esecuzione o anche i lavori completati? Come posso cercare tutti i lavori che sono in esecuzione e completati (non riusciti/non stabili/riusciti)? – askb

+0

@dave bacher Ottengo: groovy.lang.MissingPropertyException: Nessuna proprietà del genere: build per la classe: java.lang.Boolean Qualche idea? – DenCowboy