wow titulos titulo logro leeroy leeeeeeeeeeeeeroy hacer faciles como jenkins continuous-integration hudson jenkins-plugins

titulos - Jenkins-recupera la salida de la consola completa durante el paso de compilación



titulos faciles wow (3)

Para agregar algo de información: cuando la compilación de Jenkins estaba en progreso, la respuesta para la URL de ... / consoleText tenía un máximo de 10000 líneas, exactamente. Estaba usando el paquete ''request ()'' en Python. He intentado la misma URL con curl y nuevamente recibí solo las primeras 10 mil líneas. Solo después de que la compilación haya finalizado, ambos métodos devolvieron el registro completo (> 22K líneas en mi caso).

Voy a investigar más y espero informar de nuevo.

[2015-08-18] Actualización: Parece que este es un problema conocido ( consulte aquí) y se corrigió en Jenkins 1.618 y posteriores. Todavía estoy ejecutando 1.615, así que no puedo verificar. Emir

He estado recorriendo internet durante días, tengo un problema similar a this .

Necesito recuperar la salida de la consola en texto sin formato (plano). Pero si puedo obtenerlo en HTML también está bien, siempre puedo analizarlo. Lo único es que necesito obtenerlo durante el paso de compilación , lo cual es un problema ya que la ubicación donde debería estar disponible se trunca ...

He intentado recuperar la salida de la consola de las siguientes URL (relativas al trabajo):

  • /consoleText
  • /logText/progressiveText
  • /logText/progressiveHTML

Los dos de texto son de texto plano y serían perfectos si no fuera por el truncamiento, lo mismo ocurre con el de HTML ... exactamente lo que necesito, solo que está truncado ...

Estoy seguro de que es posible recuperar esta información de alguna manera, ya que al ver /consoleFull hay una actualización de la consola en tiempo real, sin truncar ni almacenar en búfer.

Sin embargo, al examinar esa página web, en lugar de encontrar el contenido que deseaba, encontré este código donde debería haber estado (no incluí el código completo de las páginas, ya que sería en su mayor parte irrelevante, y creo que esas respuestas serían capaces para descubrir y saber lo que debería estar allí por su cuenta)

new Ajax.Request(href,{ method: "post", parameters: {"start":e.fetchedBytes}, requestHeaders: headers, onComplete: function(rsp,_) { var stickToBottom = scroller.isSticking(); var text = rsp.responseText; if(text!="") { var p = document.createElement("DIV"); e.appendChild(p); // Needs to be first for IE // Use "outerHTML" for IE; workaround for: // http://www.quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html if (p.outerHTML) { p.outerHTML = ''<pre>''+text+''</pre>''; p = e.lastChild; } else p.innerHTML = text; Behaviour.applySubtree(p); if(stickToBottom) scroller.scrollToBottom(); } e.fetchedBytes = rsp.getResponseHeader("X-Text-Size"); e.consoleAnnotator = rsp.getResponseHeader("X-ConsoleAnnotator"); if(rsp.getResponseHeader("X-More-Data")=="true") setTimeout(function(){fetchNext(e,href);},1000); else $("spinner").style.display = "none"; } });

Específicamente, espero que haya una forma de obtener el contenido del text sea ​​cual sea. No estoy familiarizado con este idioma y, por lo tanto, no estoy seguro de cómo puedo obtener el contenido que quiero. Los complementos no ayudarán, ya que quiero recuperar este contenido como parte de mi script durante el paso de compilación


Tuve un problema similar, la última parte de mi script de compilación Jenkinsfile necesita analizar el ConsoleLog para mensajes de error específicos para poner en un informe de compilación de correo electrónico.

Primer intento: solicitud http.
Se sintió como un truco, funcionó en su mayoría, pero se topó con problemas cuando bloqueamos el acceso al servidor Jenkins y mis nodos de compilación ya no podían realizar el http en la página.

Segundo intento: use las API para enumerar las líneas de registro.
Se sentía como lo correcto, pero falló horriblemente ya que mis nodos tardarían 30 minutos en completar los archivos de registro de 100 megas. Mi presunción es que el servidor Jenkins no estaba almacenando en caché el archivo, por lo que cada solicitud implicaba una re-lectura de todo el archivo hasta el punto de la última lectura.

Tercera y más exitosa solución: ejecute grep en el servidor.

node(''master'') { sh ''grep some_criteria $JENKINS_HOME/workspace/path/to/job/console.log'' }

fue rápido, confiable y no importó cuán grandes fueran los archivos de registro.

Sí, esto requería la confianza del administrador de Jenkins y el conocimiento de las rutas del directorio en el servidor de Jenkins, pero como yo era el administrador, confié en mí mismo para hacer lo correcto. Su experiencia puede ser diferente.


Ya hiciste bastante buena investigación. Solo puedo agregar lo siguiente: todos los complementos relacionados con la consola que conozco están diseñados como acciones posteriores a la compilación.

El complemento Log Trigger proporciona una acción posterior a la compilación que permite a las compilaciones de Hudson buscar en su registro de consola una expresión regular determinada y, si se encuentra, desencadenar trabajos adicionales posteriores.

Así que parece que no hay una solución directa para su problema. Puedo ver las siguientes opciones:

1. Use tee o algo similar (aplicable solo a los pasos de construcción de shell)

Esta solución está lejos de ser universal, pero puede proporcionar un acceso rápido a la última salida de consola, producida por un comando o conjunto de comandos.

tee - lee de la entrada estándar y escribe en la salida y los archivos estándar

Usando sinónimos en el nivel del sistema, otros pasos de compilación de Jenkins se pueden modificar para producir la salida de la consola. Se puede hacer referencia al archivo con salida de consola a través de Jenkins o utilizando cualquier otra forma.

2. Modificar el código de Jenkins.

Simplemente puede hacer una solución rápida para el uso interno o proporcionar un parche que introduzca la configuración específica del sistema.

3. Comportamiento mímico / consola

El código en su ejemplo se usa para solicitar actualizaciones del servidor Jenkins. Como puede esperar, el lado del servidor puede devolver parte de la información comenzando con algún desplazamiento. Dejame mostrar.

Periódicamente la página de la consola envía solicitudes al servidor:

Los parámetros son sencillos:

La respuesta es una parte de la información que debe agregarse:

Otra solicitud con valor de compensación (inicio) actualizado

Puede comprender fácilmente que no hay datos analizando el contenido por longitud.

Así que la respuesta es: use url / nombre-trabajo / número de compilación / logText / progressiveHtml , especifique el desplazamiento inicial, envíe la solicitud y reciba la actualización de la consola.