2012-01-03 12 views
10

Estoy trabajando con dos complementos de Jenkins, Email-Ext y Log Parser. Tengo las expresiones regulares para el plugin Log Parser como las quiero, y me gustaría incluir el resultado del complemento Log Parser en el correo electrónico que se envía a los usuarios después de una compilación.Enviar la salida de la consola analizada en el correo electrónico

El complemento Email-Ext tiene acceso a la salida de la consola, y pude reescribir mis expresiones regulares para la salida de la consola en el correo electrónico, pero dado que el plugin Log Parser ya hizo el trabajo duro, esperaba que hubiera alguna manera Podría simplemente llevar su salida al correo electrónico.

¿Alguien sabe de alguna manera (como una variable de entorno de Jenkins) esto se puede hacer?

Respuesta

0

Si puede extraer los registros y escribir en un archivo. Puede adjuntar ese archivo como un archivo adjunto a su correo electrónico usando Email-Ext.

+0

¿Es con Email-Ext también posible alinear los registros? ¿No pudo encontrar esto en la documentación? Tal vez de alguna manera a través de secuencias de comandos? – Strinder

+1

Encontré la solución: simplemente agregue

${BUILD_LOG, maxLines=9999, escapeHtml=false}
al área de contenido – Strinder

1

Un compañero de trabajo me dijo que cada compilación en Jenkins tiene "acciones" asociadas y que los complementos de Jenkins hacen su magia a través de acciones. Pude encontrar todas las acciones de mis acciones con build.getActions(). Luego hice un bucle de las acciones hasta que obtuve LogParserAction, que es la acción proporcionada por el plugin Jenkins Log Parser.

Luego busqué en el código fuente de LogParserAction.class para encontrar el método getErrorLinksFile(). Con este método, pude obtener el texto del registro analizado. Un método similar llamado getWarningLinksFile() está disponible para las advertencias y otro está disponible para información.

Luego hice un bucle a través del texto en el carácter \n y apliqué algunas expresiones regulares para que se vea como yo quería. Las partes importantes del código están a continuación. Se ve mejor si lo ve como HTML en el Bloc de notas ++

%> 
    <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

Vea [esta esencia] (https://gist.github.com/1566181) para obtener ideas sobre el uso de más código canónico Groovy; no está probado pero bastante cerca. Simplemente parece una pena escribir Groovy así :( –

+1

Jaja, gracias ... Atrapado en el mundo de Java, supongo :) – ubiquibacon

Cuestiones relacionadas