¿Cómo configurar `killSoftly` para un trabajo específico de Jenkins?

11

Mi compilación Jenkins se cuelga entre los pasos de compilación y postcompilación.

La salida de la consola muestra que hay una espera de 6 minutos (pero he visto esperas de hasta una hora):

10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0

Encontré esto y estas preguntas que tienen problemas similares, y dicen que la solución se está estableciendo -DSoftKillWaitSeconds=0enjenkins.xml .

Sin embargo, necesito una forma de establecer la opción solo para trabajos particulares, sin interferir con la configuración global de Jenkins (no me gustaría meterme con otros proyectos).

EDITAR:

Cuando aborto manualmente el trabajo, antes del paso [CucumberReport], aún se generan informes de Cucumber.

También marqué la casilla de verificación Abortar la compilación si está atascada en las opciones del Entorno de compilación, con la estrategia de Tiempo de espera establecida en No Activity(Tiempo de espera segundos = 2).

Cuando compilo el proyecto con esta configuración, la compilación fallará con "Abortado después de 0 segundos" que se muestra en el Historial de compilación, como antes, pero la salida de la consola será la misma. (Nada cambia, se generarán informes de pepino pero después de un cierto tiempo de espera).

Mate Mrše
fuente
¿Qué quieres lograr con el parámetro? Quizás haya una solución más fácil para esto.
Michael Kemmerzell
Quiero reducir el tiempo de espera después de la fase de construcción. Como puede ver en la salida de la consola, hay una espera de 6 minutos entre los pasos de compilación y postcompilación.
Mate Mrše
¿Puede proporcionar algunas partes de su tubería? Dudo que Jenkins simplemente esté atascado, algo tiene que suceder aquí.
Michael Kemmerzell
¿Puede ser más específico sobre qué partes de la tubería serían de interés para que pueda editar y compartir algunas porque no puedo compartir el código real?
Mate Mrše
¿No puedes simplemente establecer una timeoutopción en tu tubería? Definitivamente debe publicar una versión simplificada de su tubería. Es difícil "adivinar" lo que podría estar mal. Además, esta pregunta probablemente sea más adecuada para estar en devops.stackexchange.com
tftd

Respuestas:

4

No es posible seleccionar un valor específico de trabajo paraSoftKillWaitSeconds (el valor se deriva del núcleo de Jenkins en un punto donde no se conoce el nombre del trabajo).

Mi recomendación es arreglar el manejo de aborto en su trabajo , por lo que no dependerá de un "tiempo de espera de muerte suave". Si está ejecutando en un sistema Unix-ish, puede asegurar esto ejecutando su trabajo en un nuevo grupo de procesos ( set -men bash) y (por ejemplo) configurando una trampa de salida adecuada.

Alex O
fuente
Como soy nuevo en Jenkins, ¿podría expandirse en "ejecutar su trabajo en un nuevo grupo de procesos (set -m en bash) y (por ejemplo) configurar una trampa de salida adecuada"?
Mate Mrše
Esto no está relacionado con Jenkins per-se. Puede usar este enfoque si su trabajo implica un paso de compilación "Ejecutar shell" (o si puede cambiarlo para que así sea). Luego use "set -m" para crear un nuevo grupo de procesos, y use una trampa como se muestra aquí para asegurarse de que todos los procesos en el grupo serán eliminados.
Alex O
3

Estamos utilizando el complemento Build-timeout para eliminar trabajos atascados con la estrategia de tiempo de espera establecida en No Activityo Absolute. Para mí, este es un buen enfoque cuando usas proyectos de estilo libre. La razón por la que su compilación se "cancela después de 0 segundos" es que lo más probable es que haya procesos secundarios sin terminar. De la documentación :

Debido a que Java solo permite que los subprocesos se interrumpan en un conjunto de ubicaciones fijas, dependiendo de cómo se cuelgue una compilación, la operación de cancelación podría no tener efecto. Por ejemplo,

  • Si Jenkins está esperando que se completen los procesos secundarios, puede abortar de inmediato.
  • Si Jenkins está atrapado en un bucle infinito, nunca se puede abortar.
  • si Jenkins está haciendo una red o E / S de archivo dentro de la VM Java (como una copia de archivo larga o una actualización SVN), no se puede cancelar.

Puedes probar la estrategia de tiempo de espera absoluto. Puede definir una variable global, para que no repita el valor de tiempo de espera en los trabajos:

  1. Vaya a "Administrar Jenkins"> "Configurar sistema".
  2. Marque "Variables de entorno" en "Propiedades globales".
  3. Agregue un nombre de variable de entorno = "GLOBAL_TIMEOUT_MINUTES" value = "20".
  4. Ir a la página de configuración de un proyecto.
  5. Marque "Anular la compilación si está atascado" en "Entorno de compilación".
  6. Seleccione "Absoluto" para "Estrategia de tiempo de espera". Por supuesto, también aplicable a otras estrategias.
  7. Establezca "$ {GLOBAL_TIMEOUT_MINUTES}" para "Tiempo de espera".
  8. Establecer la acción de tiempo de espera "Abortar la compilación".

Si esto no funciona, puede intentar buscar en los registros https: // your-jenkins-server / log o en un volcado de subprocesos.
El bloqueo puede deberse a una versión nueva / antigua de un complemento. Trate de encontrar cuáles son los procesos secundarios inacabados. Intente deshabilitar las acciones posteriores a la compilación una por una para encontrar la que puede ser la causa del problema. Puedes ver /superuser/1401879/debugging-what-happens-when-a-jenkins-build-unexpectedly-pauses-or-hangs

KB
fuente
Sin embargo, votar por información útil no resuelve mi problema. Ya probé el complemento de tiempo de espera de compilación pero sin éxito.
Mate Mrše