Cómo mover Jenkins de una PC a otra

154

Actualmente estoy usando Jenkins en mi PC de desarrollo. Lo instalé en mi PC de desarrollo, porque tenía un conocimiento limitado de esta herramienta; así que lo probé en mi PC de desarrollo. Ahora, me siento cómodo con Jenkins como mi "socio" a largo plazo en el proceso de compilación y me gustaría "trasladar" este Jenkins a un servidor dedicado.

Antes de esto, he hecho algunas compilaciones y tengo los artefactos archivados de cada compilación. En particular, el número de compilación es muy importante para mí para el control de versiones.

¿Cómo puedo exportar toda la información de Jenkins desde mi PC actual a mi nuevo servidor?

huahsin68
fuente
66
Acabo de hacer esto. Seguí los pasos de la respuesta de Cédric Julien, pero descubrí que en Windows tenía que ejecutar una instalación de reparación antes de que Jenkins pudiera ejecutarse con éxito después de la mudanza. Después de la reparación, todo está bien.
Smurph269

Respuestas:

175

Siguiendo la wiki de Jenkins , tendrás que:

  • Instale una nueva instancia de Jenkins en el nuevo servidor
  • Asegúrese de que las instancias antiguas y nuevas de Jenkins estén detenidas
  • Archive todo el contenido de JENKINS_HOME de la antigua instancia de Jenkins
  • Extraiga el archivo en el nuevo directorio JENKINS_HOME
  • Lanzar la nueva instancia de Jenkins
  • No olvide cambiar la documentación / enlaces a su nueva instancia de Jenkins :)
  • No olvides cambiar el propietario de los nuevos archivos Jenkins: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME está situado por defecto en ~/.jenkinsuna instalación de Linux, sin embargo a encontrar exactamente dónde se encuentra, ir en el http: // your_jenkins_url / Configurar página y comprobar el valor del primer parámetro: Home directory; Este es el JENKINS_HOME.

Cédric Julien
fuente
1
Cuando lancé mis nuevos jenkins, mis nodos se muestran hacia abajo, lo cual es correcto. Pero cuando hice clic en algún nodo, las URL apuntan a jenkins antiguo de la siguiente manera: Ejecutar desde la línea de comando esclavo: javaws old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp O si el esclavo no tiene cabeza: java -jar slave.jar -jnlpUrl old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Now ¿Cómo debo hacer estas URL para que cada nodo apunte a new-jenkins-server?
merlachandra
13
Obtuve la solución a mi problema mencionado en mi comentario anterior: Goto Manage Jenkins> configure system. Aquí, en la sección 'Ubicación de Jenkins', en el campo 'URL de Jenkins', cambie la URL para que apunte al nuevo servidor jenkins.
merlachandra
3
¡asegúrese de copiar las carpetas ocultas también!
mohi
77
jaja +1 para el "no olvide cambiar la documentación / enlaces a su nueva instancia de Jenkins"
Iain Smith
2
Tuve problemas con los permisos y la propiedad de los archivos correctos, para solucionarlo utilicé este script de Docker (la parte que establece las propiedades / permisos): hub.docker.com/r/appcontainers/jenkins/~/dockerfile
marcinj
53

En caso de que su directorio JENKINS_HOME sea demasiado grande para copiar , y todo lo que necesita es configurar los mismos trabajos, complementos de Jenkins y configuraciones de Jenkins (y no necesita artefactos e informes de trabajos antiguos), puede usar el complemento ThinBackup :

  1. Instale ThinBackup en los servidores Jenkins de origen y destino.
  2. Configure el directorio de respaldo en ambos (en Manage Jenkins -> ThinBackup -> Settings)

  3. En Sourse Jenkins, vaya a ThinBackup -> Backup Now

  4. Copie del directorio de Jenkins Source Backup al directorio de Jenkins Target Backup
  5. En Target Jenkins, vaya a ThinBackup -> Restore, y luego reinicie el servicio Jenkins.
  6. Si faltan algunos complementos o trabajos, copie el contenido de la copia de seguridad directamente en el JENKINS_HOME de destino.

  7. Si tenía autenticación de usuario en el Jenkins de origen y ahora está bloqueado en el Jenkins de destino, edite Jenkins config.xml, configúrelo <useSecurity>como falso y reinicie Jenkins.

Noam Manos
fuente
2
¿Por qué el directorio JENKINS_HOME sería demasiado grande para copiar? ¿De qué tipo de tamaños estamos hablando?
wotanii
9
mi jenkins_home es de 100 Gb más o menos, no quiero copiar eso en un nuevo servidor, ya que en su mayoría se descarta
user230910
3
Mi Jenkins_home es de ~ 4 TB, por lo que es útil una copia delgada que solo contenga la configuración y ninguno de los historiales de compilación o / usercontent.
VolleyJosh
Impresionante, complementos ... Realmente ahorró mucho tiempo ... hacer frente a cientos de GB no es un trabajo fácil
Swapnil Kotwal
11

Esto me funcionó para pasar de Ubuntu 12.04 (Jenkins ver. 1.628) a Ubuntu 16.04 (Jenkins ver. 1.651.2). Primero instalé Jenkins desde los repositorios .

  1. Detenga ambos servidores Jenkins
  2. Copie JENKINS_HOME(por ejemplo, / var / lib / jenkins) del servidor anterior al nuevo. Desde una consola en el nuevo servidor:

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

  3. Inicie su nuevo servidor Jenkins

Puede que no necesites esto, pero tenía que

  • Manage Jenkinsy Reload Configuration from Disk.
  • Desconecte y vuelva a conectar a todos los esclavos.
  • Compruebe que en el Configure System > Jenkins Location, el Jenkins URLestá correctamente asignado al nuevo servidor Jenkins.
Katu
fuente
¿El nuevo Jenkins tenía la misma versión que el anterior?
Jakub Czaplicki
@JakubCzaplicki: ambos Jenkins eran 1.6, pero no exactamente la misma versión. Respuesta actualizada Luego actualicé Ubuntu 16.04 a Jenkins 2.6 reemplazando el archivo jenkins.war y funcionó bien. stackoverflow.com/questions/11062335/…
Katu
Después de hacer lo anterior y visitar /configureSecurityconsigojava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme
@maxisme, tarde pero este hilo sugiere que el problema que mencionaste está relacionado con la versión de Java. issues.jenkins-ci.org/browse/JENKINS-46182
Katu
1

Automatización del servidor Jenkins:

Paso 1:

Configure un repositorio para almacenar el hogar de Jenkins (trabajos, configuraciones, complementos, etc.) en un repositorio local de GitLab o en un repositorio privado de GitHub y manténgalo actualizado regularmente al impulsar cualquier cambio nuevo a los trabajos, complementos, etc. de Jenkins.

Paso 2:

Configure un grupo / rol de host Puppet para Jenkins que se pueda usar para activar nuevos servidores Jenkins. Realice toda la configuración básica en una receta de Puppet y asegúrese de que instale la última versión de Jenkins y configure un directorio / montaje separado para JENKINS_HOME.

Paso 3:

Haga girar una nueva máquina usando la configuración Jenkins-puppet anterior. Cuando todo esté instalado, tome / clone la configuración de Jenkins desde el repositorio de Git al directorio de inicio de Jenkins y reinicie Jenkins.

Paso 4:

Vaya a la URL de Jenkins, Administre JenkinsAdministrar complementos y actualice todos los complementos que requieren una actualización.

Hecho

Puede usar Docker Swarm o Kubernetes para escalar automáticamente los nodos esclavos.

Ijaz Ahmad Khan
fuente
1

En ocasiones, es posible que no tengamos acceso a una máquina Jenkins para copiar una carpeta directamente en otra instancia de Jenkins. Así que escribí una utilidad controlada por menús que usa llamadas API REST de Jenkins para instalar complementos y trabajos de una instancia de Jenkins a otra.

Para la migración de complementos:

  1. Solicitud GET: {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1obtendrá la lista de complementos instalados con su versión.
  2. Puede enviar una solicitud POST con los siguientes parámetros para instalar estos complementos.

    final_url=`{DESTINATION_JENKINS_SERVER}/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="{PLUGIN_NAME}@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`{crumb_field:crumb_value,"Content-Type":"application/xml”}` (where crumb_field=Jenkins-Crumb and get crumb value using API call {DESTINATION_JENKINS_SERVER}/crumbIssuer/api/json
    

Para la migración laboral:

  1. Puede obtener la lista de trabajos instalados en {SOURCE_JENKINS_URL} mediante una llamada REST, {SOURCE_JENKINS_URL}/view/All/api/json
  2. Luego, puede obtener cada archivo config.xml del trabajo de los trabajos en {SOURCE_JENKINS_URL} utilizando la URL del trabajo {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. Use este archivo config.xml para PUBLICAR el contenido del archivo XML en {DESTINATION_JENKINS_URL} y eso creará un trabajo en {DESTINATION_JENKINS_URL}.

He creado una utilidad controlada por menús en Python que le pide al usuario que inicie el complemento o la migración de Jenkins y utiliza las llamadas a la API REST de Jenkins para hacerlo.

Puede consultar JenkinsMigration.docx desde esta URL

psalvi21
fuente
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia.
vich