Reinicie todos los nodos de Jenkins

Reinicie todos los nodos de Jenkins

Administro un servidor Jenkins (que ejecuta 2.89.4) con aproximadamente 40 nodos conectados, cada uno de los cuales ejecuta Centos7, OSX o Windows (7, 8, 10). Recientemente, sufrimos algunos cortes de energía y muchos esclavos perdieron la conexión con el maestro. Esto requirió mucha comunicación remota y ssh manual para volver a conectarlos a todos. Desde entonces, me he asegurado de que cada proceso esclavo esté ejecutando un servidor; sin embargo, me gustaría tener una red de seguridad adicional para poder reiniciar automáticamente cada máquina virtual y/o caja en la que se estén ejecutando estos esclavos. El problema es que, dado que existen varios tipos diferentes de sistemas operativos, no existe una forma sencilla de hacerlo (que yo sepa todavía).

Intenté usar un script Groovy, pero en su mayoría solo se puede usar para reiniciar el servicio esclavo, no la máquina en sí. Esta fue mi referencia: https://wiki.jenkins.io/display/JENKINS/Monitor+and+Restart+Offline+Slaves

También analicé un enfoque de Ansible, pero muchas máquinas son inaccesibles y Ansible requiere diferentes tipos de scripts para Windows y Unix.

El mejor enfoque que he visto hasta ahora está aquí: https://stackoverflow.com/questions/29165080/restart-jenkins-slave-from-master

Pero no explica cómo ejecutar esto en cada esclavo, simplemente parece que se ejecuta en un esclavo. ¿Alguien más ha hecho algo como esto antes? Me encantaría crear un solo trabajo o un único script que pueda ejecutarse y que reinicie cada nodo (usando un comando como shutdown -r -f) conectado a Jenkins independientemente de la plataforma.

Respuesta1

Resolví esto creando un trabajo de configuración múltiple y seleccionando todos los esclavos por nombre. Luego, agregué dos pasos condicionales basados ​​en el "Nodo de ejecución". Seleccioné sólo los esclavos de Windows para el primero, y sólo los esclavos de Mac/Centos para el segundo. Para cada paso condicional, agregué un solo paso: ejecutar el comando por lotes de Windows para la condición de Windows y ejecutar Shell para la sección de Unix. Aquí está el contenido de mis cajas Batch y Shell respectivamente:

Lote:

echo "Restarting Windows Machine...."
hostname
shutdown -r -f

Caparazón:

echo "Restarting Unix Machine...."
hostname
sudo shutdown -r now

Comenté los pasos de apagado por ahora en mi trabajo para no reiniciar todo accidentalmente antes de realizar la prueba. Asegúrese de descomentarlos antes de intentar ejecutar esto.

Unix_Conditional_Step Paso_condicional_de_Windows

información relacionada