jenkins - proyecto - tesis sobre las redes sociales
Jenkins mata a todos los procesos hijos (1)
Tengo un trabajo de jenkins que ejecuta un script bash.
En el script bash realizo efectivamente dos acciones, algo así como
java ApplicationA &
PID_A=$!
java ApplicationB
kill $PID_A
pero si el trabajo se cancela manualmente, la ApplicationA
permanece activa (como se puede ver con un ps -ef
en la máquina nodo). No puedo usar trapping y demás, porque eso no funcionará si jenkins envía una señal de 9
(el trapping no funciona para 9
).
Sería ideal si este trabajo pudiera configurarse para simplemente matar todos los procesos que genera, ¿cómo puedo hacer eso?
De hecho, de forma predeterminada, Jenkins tiene una función llamada ProcessTreeKiller, que es responsable de asegurarse de que no haya procesos dejados después de la ejecución del trabajo.
El enlace de arriba explica cómo desactivar esa función. ¿Estás seguro de que no tienes esa discapacidad por error de alguna manera?
Editar:
Siguiendo los comentarios del autor, en base a la información sobre la inhabilitación de ProcessTreeKiller , para lograr el inverso se debe establecer la variable de entorno BUILD_ID
en el id de compilación del trabajo de Jenkins. De esta forma, cuando ProcessTreeKiller examine los procesos en ejecución para matar, también encontrará esto
export BUILD_ID=$BUILD_ID
También puede utilizar el plugin Gatillo de resultados de compilación , configurar un segundo trabajo para limpiar sus aplicaciones y configurarlo para supervisar el primer trabajo para el estado ABORTED
como desencadenante.