¿Cómo reiniciar de forma segura Jenkins?


19

Necesito hacer algunos cambios de configuración en nuestra instancia de Jenkins que implicarán reiniciar Jenkins un par de veces. Sin embargo, nuestros desarrolladores se comprometen con tanta frecuencia que no he visto a Jenkins sin trabajos ejecutándose en tres días.

¿Existe una forma nativa (ya sea a través de la GUI o la línea de comando) para reiniciar de forma segura Jenkins? IE: espere a que finalicen los trabajos actuales antes de bajar, y realice un seguimiento de los trabajos en cola para comenzar una vez que Jenkins vuelva a subir.

Sé que hay un complemento, pero para instalarlo necesito reiniciar Jenkins ...


Adivino desde la parte superior de mi cabeza, pero ¿no es una opción deshabilitar a los esclavos? (Por lo que recuerdo, no detiene los trabajos en curso, pero evita que se
inicien

En teoría, con una instancia de Jenkins configurada correctamente que ejecute trabajos de Pipeline, puede reiniciar los nodos maestro o esclavo cuando lo desee. Sin embargo, mi experiencia dice lo contrario.
jayhendren

Respuestas:


14

Si navegas hacia $YOUR_JENKINS_URL/updateCenter/, deberías ver la siguiente página:

Aquí puede verificar Restart Jenkins when installation is complete and no jobs are runningcuál debería ser bastante seguro.


Tengo entendido que el reinicio solo ocurre si los complementos están en proceso de instalación ... no hay forma de forzar ese reinicio sin instalar complementos, ¿no es así?
Alex

1
@Alex Acabo de probarlo en mi instancia y para mí parece que siempre funciona, independientemente de la instalación del complemento. De acuerdo con stackoverflow.com/a/8077830 también debería haber un /safeRestarty /restartpuntos finales.
eyalzek

1
¿Pero no se trata de reiniciar mientras se ejecutan los trabajos?
Dan Cornilescu

@DanCornilescu la pregunta dice: IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up.esto es exactamente lo que sucede cuando marcas esa casilla.
eyalzek

Estaba preguntando porque la pregunta también dice Jenkins without jobs running in three days, lo que significa que habrá un impacto ya que algunos trabajos se retrasarán. Pero aún así, mejor que perder empleos.
Dan Cornilescu


8

Puede ejecutar el comando safeRestart utilizando la API Jenkins Rest ( [jenkins_url] / safeRestart ) o puede ejecutar el comando a través de la CLI de Jenkins .

sudo /etc/init.d/jenkins safeRestart

Ejecutando un comando CLI

La sintaxis general es la siguiente (el diseño es similar a herramientas como svn / git):

java -jar jenkins-cli.jar [-s JENKINS_URL] comando [opciones ...] [argumentos ...]

JENKINS_URL se puede especificar a través de la variable de entorno $ JENKINS_URL. Esta variable de entorno se establece automáticamente cuando Jenkins bifurca un proceso durante las compilaciones, lo que le permite usar Jenkins CLI desde dentro de la compilación sin configurar explícitamente la URL.

NOTA: Al ejecutar el comando safeRestart, cualquier trabajo configurado para ejecutarse durante el reinicio se pondrá en cola y se ejecutará cuando el servidor vuelva a estar en línea. ¡Asegúrese de que esto no cause ningún conflicto al reiniciar!


1

Creo que este es un problema real que muchos están tratando de resolver. Hay momentos en los que es preferible reiniciar Jenkins después de la instalación del complemento. Una de las sugerencias que puedo proporcionar en base a mi experiencia es:

  • Restrinja el acceso al módulo de administración para que no todos los desarrolladores puedan instalar complementos
  • Instruya a los desarrolladores sobre el tiempo de inactividad e infórmeles con anticipación
  • Instale todos los complementos necesarios a granel y reinicie Jenkins
  • Informe a los desarrolladores que Jenkins está listo para usar

Entiendo que esto requiere un esfuerzo manual y coordinación. Pero esto ha funcionado hasta ahora tan bien en nuestro proyecto, no pensamos en mencionarlo.


1

Para reiniciar Jenkins manualmente, puede usar cualquiera de los siguientes comandos (ingresando su URL en un navegador):

(jenkins_url)/safeRestart- Permite completar todos los trabajos en ejecución. Los nuevos trabajos permanecerán en la cola para ejecutarse después de que se complete el reinicio.

(jenkins_url)/restart - Fuerza un reinicio sin esperar a que se completen las compilaciones.


0

Visitar " https: // jenkins / safeRestart " no espera a que los "trabajos / compilaciones" se terminen por completo en caso de trabajos de canalización.

Parece esperar los pasos para finalizar y realizar el reinicio de jenkins y reanudar la línea de canalización después de que jenkins haya surgido nuevamente.


1
¿Supongo que esto significa un comentario a la respuesta de @Nakilon?
hagello

0

Jenkins está diseñado para no verse afectado por los reinicios. Desde mi experiencia, es posible que una compilación falle debido a un reinicio, pero son raros.

Donde trabajo solíamos tener que reiniciar Jenkins regularmente. Tenemos todo tipo de trabajo que puedas imaginar, algunos pequeños, otros enormes. Solo una vez vimos que fallaba una construcción donde no se rehidrataba un pepinillo.

Después de eso, siempre hacemos reinicios seguros ahora.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.