2012-01-03 7 views
10

Sto lavorando con due plug-in Jenkins, Email-Ext e Log Parser. Ho le espressioni regolari per il plug-in Log Parser come le desidero e vorrei includere l'output del plug-in Log Parser nell'e-mail che viene inviato agli utenti dopo una compilazione.Invia l'output della console analizzata nell'e-mail

Il plugin Email-Ext ha accesso all'output della console e potrei riscrivere le mie espressioni regolari per l'output della console nell'e-mail, ma poiché il plug-in Log Parser ha già svolto il duro lavoro speravo che ci fosse un qualche modo Potrei semplicemente inserire il suo output nell'e-mail.

Qualcuno sa di qualsiasi modo (come una variabile di ambiente Jenkins) questo può essere fatto?

risposta

0

Se è possibile estrarre i registri e scrivere in un file. Puoi allegare quel file come allegato alla tua email usando Email-Ext.

+0

E 'anche possibile integrare i registri con Email-Ext? Non è possibile trovare questo alla documentazione? Forse in qualche modo tramite lo scripting? – Strinder

+1

Hai trovato la soluzione: aggiungi

${BUILD_LOG, maxLines=9999, escapeHtml=false}
all'area di contenuto – Strinder

1

Un collega mi ha detto che ogni build in Jenkins ha "azioni" associate e che i plugin Jenkins fanno la loro magia tramite le azioni. Sono stato in grado di trovare tutte le azioni delle mie azioni con build.getActions(). Ho quindi eseguito il loop delle azioni finché non ho ottenuto LogParserAction, ovvero l'azione fornita dal plug-in Log Parser di Jenkins.

Ho quindi controllato il codice sorgente di LogParserAction.class per trovare il metodo getErrorLinksFile(). Con questo metodo sono riuscito a ottenere il testo del log analizzato. Un metodo simile chiamato getWarningLinksFile() è disponibile per gli avvisi e un altro è disponibile per informazioni.

Ho quindi inserito il testo sul carattere \n e applicato alcune espressioni regolari per farlo sembrare come volevo. Le parti importanti del codice sono sotto. Sembra meglio se lo si visualizza come HTML in Notepad ++

%> 
    <TABLE width="100%"> 
     <TR> 
      <TD class="bg1" colspan="2">ERRORS</TD> 
     </TR> 
<% 
    def publisher = null 
    for(iter in project.getPublishersList()){ 
     if(iter.getDescriptor().getDisplayName().equals("Editable Email Notification")){ 
      publisher = iter 
      break 
     } 
    } 
    if(publisher != null){ 
     def logParserResult 
     //Get the LogParserAction from Jenkins 
     for(action in build.getActions()){ 
      if(action.toString().contains("LogParserAction")){ 
       //Get the LogParserResult from the LogParserAction 
       logParserResult = action.getResult() 
       break 
      } 
     } 

     //Get the ErrorLinksFile from the LogParserResult 
     def errorLinksFile = new File(logParserResult.getErrorLinksFile()) 

     //Rewrite the URL so it directs to something useful 
     pattern = ~/<a.*?><font.*?>/ 
     def errorList = [] 
     for(line in errorLinksFile.getText().split("\n")){ 
      //All errors have a link, so this makes sure no superfluous text is displayed 
      if(!line.contains("href")){ 
       continue 
      } 
      errorList.add(line.replaceAll(pattern, "<a href="+ rooturl + build.url + "parsed_console/?\">").minus("</font>")) 
     } 
%> 
     <TR> 
      <TD class="bg2" colspan="2">Total : ${errorList.count{it}} error(s)</TD> 
     </TR> 
<% 
     for(error in errorList){ 
%> 
     <TR> 
      <TD class="errors" colspan="2">${error}</TD> 
     </TR> 
<% 
     } 
%> 
    </TABLE> 
+3

Vedere [questo elenco] (https://gist.github.com/1566181) per idee sull'utilizzo di più codice Groovy canonico; è non testato ma abbastanza vicino. Sembra un peccato scrivere Groovy in questo modo :( –

+1

Haha, grazie ... Bloccato nel mondo di Java, immagino :) – ubiquibacon

Problemi correlati