¿Cómo hacer una copia de seguridad de los trabajos de Jenkins y las configuraciones maestras?

56

Me gustaría hacer una copia de seguridad de todos los trabajos y archivos de configuración de Jenkins. ¿Cuál es la forma más fácil de hacerlo?

kenorb
fuente
¿Qué intentaste?
030
1
Probé esto .
kenorb

Respuestas:

33

Hay muchas maneras de hacer esto, pero la forma más fácil que puedo pensar es hacer una copia de seguridad de la carpeta de inicio de Jenkins.

Puedes ver dónde está tu hogar en Jenkins con:

echo $JENKINS_HOME

Y, por ejemplo, si solo desea hacer una copia de seguridad de los trabajos, puede ir a:

cd $JENKINS_HOME/jobs

Y haga una copia de seguridad para esa carpeta.

Toda esa configuración será un montón de archivos XML .

Si está utilizando la imagen oficial de la ventana acoplable de Jenkins , la casa estará en:

/var/jenkins_home
Gepser
fuente
2
Necesitaba cambiar al usuario jenkins para tener acceso a la $JENKINS_HOMEvariable de entorno: sudo su -s /bin/bash jenkinsy luego echo $JENKINS_HOME, lo que para mí fue/var/lib/jenkins
Bryce Guinta el
2
El problema con la copia de seguridad de toda la carpeta 'trabajos' es que también se copiarán las ejecuciones de trabajo, lo que puede significar muchos GB.
Mike Argyriou
¿Debería reiniciarse el servicio de Jenkins?
Xin Meng
Jenkins en casa en MacOS (instalación predeterminada de Homebrew): ~ / .jenkins
chuckSaldana
30

Todos los trabajos ( jobs/) y los archivos de configuración maestros ( config.xml) se pueden encontrar en la carpeta de inicio de Jenkins ( JENKINS_HOME) en la siguiente estructura:

JENKINS_HOME
 +- config.xml     (jenkins root configuration)
 +- *.xml          (other site-wide configuration files)
 +- userContent    (files in this directory will be served under your http://server/userContent/)
 +- fingerprints   (stores fingerprint records)
 +- plugins        (stores plugins)
 +- workspace (working directory for the version control system)
     +- [JOBNAME] (sub directory for each job)
 +- jobs
     +- [JOBNAME]      (sub directory for each job)
         +- config.xml     (job configuration file)
         +- latest         (symbolic link to the last successful build)
         +- builds
             +- [BUILD_ID]     (for each build)
                 +- build.xml      (build result summary)
                 +- log            (log file)
                 +- changelog.xml  (change log)

La mayoría de las configuraciones están en formato XML, por lo que respaldar todos los .xmlarchivos debería ser suficiente.

Todos los ajustes, registros de compilación, archivos de artefactos se almacenan en el directorio JENKINS_HOME. Simplemente archive este directorio para hacer una copia de seguridad. Del mismo modo, la restauración de los datos solo reemplaza el contenido del directorio JENKINS_HOME desde una copia de seguridad.

Se pueden realizar copias de seguridad sin detener el servidor, pero cuando realice la restauración, detenga el servidor.


Para copias de seguridad consistentes, es una buena práctica mantener el JENKINS_HOMEdirectorio en el repositorio de Git.

Por ejemplo:

cd $JENKINS_HOME
git init
shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a

y empujando los archivos al repositorio externo. También puede agregar el siguiente .gitignorearchivo para ignorar algunos archivos.

Relacionado: ¿Hay alguna manera de mantener los archivos de configuración de Hudson / Jenkins en el control de origen?

kenorb
fuente
¿Con qué frecuencia crea una copia de seguridad? ¿Empujas el código automáticamente a un repositorio git? Si es verdadero, ¿crea una solicitud de extracción que debe fusionarse manualmente (intervención manual) para realizar una comprobación de integridad de la copia de seguridad?
030
2
@ 030 Por lo general, manualmente después de algunos cambios importantes, cuando sé que la configuración es estable y necesito hacer una copia de seguridad, ya que a Jenkins a menudo le gusta romper cosas, como cambiar esclavos de Unix a Windows por sí mismo, eliminar las contraseñas de los formularios, por lo que tenerlos en git / GitHub, puedo comparar y encontrar fácilmente los datos que faltan y agregarlos nuevamente o revertir algún archivo específico. Hay algunos complementos para mantener los cambios en el historial, pero no lo encontré útil.
kenorb
¿Guardas las contraseñas en git? ¿Los encriptas? ¿Utiliza tuberías también conocidas como canalización como código?
030
3
@ 030 Jenkins cifra las contraseñas / credenciales de manera predeterminada, pero puede descifrarlas fácilmente . Sin embargo, sin la clave maestra (que no debe ser parte de la copia de seguridad) o el acceso a Jenkins, nadie más puede hacerlo. No estoy usando Pipeline como código.
kenorb
¿Cómo se prueba la integridad de esta copia de seguridad en git? Por ejemplo, ¿activa una máquina virtual o un sistema acoplable, monta el repositorio git y comprueba si todo sigue funcionando?
030
11

Si sus trabajos Jenkins se definen en un archivo Jenkins, puede almacenarlo en un repositorio git y cargarlo utilizando Pipeline .

Desafortunadamente, dado que no todos los complementos de Jenkins admiten Jenkinsfile y Pipeline, deberá crear manualmente nuevos Jenkinsfiles si desea mover los trabajos existentes a este formato.

avi
fuente
9

El complemento de configuración de sincronización SCM hace exactamente lo que desea. Funciona con svn o git para hacer una copia de seguridad de su núcleo y configuración de trabajo de jenkins, por lo que le brinda un seguimiento fácil de quién realizó los cambios, así como una copia de seguridad.

Adam Berry
fuente
1
Literalmente alquilo la carpeta $ JENKINS_HOME, pero esto parece muchísimo mejor.
MrMesees
2
Ese complemento parece bastante inactivo / muerto: ¿es realmente funcional y está a la par a partir de 2017?
Tuukka Mustonen
5

Hay pocas formas de respaldar los datos de jenkins y las configuraciones maestras. La mejor forma de hacer una copia de seguridad es usar el complemento Thinbackup. Puede programar copias de seguridad oportunas utilizando expresiones cron. Puede configurar la copia de seguridad completa y la copia de seguridad incremental también.

Otra forma de hacer una copia de seguridad de los datos y la configuración es tomar la instantánea del disco de su servidor maestro jenkins. La forma ideal de hacerlo montando un disco y vinculando el directorio de configuración de jenkins al punto de montaje del disco

Ambos escenarios están bien explicados en esta publicación de blog . Obtendrá una mejor idea y pasos para las configuraciones.

Bibin Wilson
fuente
3

Estoy usando guiones de sue445/jenkins-backup-script.

Archiva configuraciones y complementos de Jenkins como:

  • $JENKINS_HOME/*.xml
  • $JENKINS_HOME/jobs/*/*.xml
  • $JENKINS_HOME/nodes/*
  • $JENKINS_HOME/plugins/*.jpi
  • $JENKINS_HOME/secrets/*
  • $JENKINS_HOME/users/*

Uso

./jenkins-backup.sh /path/to/jenkins_home archive.tar.gz

# add timestamp suffix
./jenkins-backup.sh /path/to/jenkins_home backup_`date +"%Y%m%d%H%M%S"`.tar.gz
nickcheng
fuente
3

Puede probar el plugin thinBackup (aunque no se mantenga activamente) [si lo que desea es realizar una copia de seguridad lógica ] (es decir, la mayoría de los archivos, trabajos, nodos de configuración xml). El tamaño de la copia de seguridad no será enorme.

Saikat Sengupta
fuente
1

Necesitaba migrar un Jenkins de una instancia de Windows Server a otra. Finalmente logré hacerlo así:

  • Detenga el servicio de Jenkins (si puede pagarlo)
  • Copie toda la carpeta de Jenkins (por defecto C:\Program Files x86\Jenkins)
  • Pegar en la nueva instancia
  • Entra en el directorio y ejecuta jenkins.exe install

Esto registrará el Jenkins recién pegado como un servicio en la nueva máquina y funcionará 100% igual.

Si esto funciona, entonces si necesita una copia de seguridad solo para seguridad futura, copie la carpeta Jenkins en alguna parte. Funcionará como una instantánea.

mandarín
fuente