tutorial significado logo jenkins

logo - jenkins significado



Empleos de exportación/importación en Jenkins (15)

En mi instancia de Jenkins (versión 1.548) el archivo de configuración está en:

/var/lib/jenkins/jobs/-the-project-name-/config.xml

Propiedad de jenkins user y jenkins group con 644 permisos. Copiar el archivo hacia y desde aquí debería funcionar. No he intentado cambiarlo directamente, pero he realizado una copia de seguridad de la configuración desde este punto en caso de que el proyecto deba ser configurado nuevamente.

¿Es posible intercambiar trabajos entre 2 Jenkins diferentes? Estoy buscando una manera de exportar / importar puestos de trabajo.


Es muy fácil simplemente descargar el nombre del plugin

Plugin de importación de trabajo

Ingrese la URL de su servidor Jenkins remoto e importará los trabajos automáticamente


Esto no funciona para los trabajos existentes, sin embargo, hay un generador de trabajos Jenkins .

Esto permite mantener las definiciones de trabajo en archivos yaml y en un repositorio de git que es muy portátil.


Gracias a la respuesta de Larry Cai, logré crear un script para hacer una copia de seguridad de todos mis trabajos de Jenkins. He creado un trabajo que ejecuta esto cada semana. En caso de que alguien lo encuentre útil, aquí está:

#!/bin/bash #IFS for jobs with spaces. SAVEIFS=$IFS IFS=$(echo -en "/n/b") for i in $(java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ list-jobs); do java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ get-job ${i} > ${i}.xml; done IFS=$SAVEIFS mkdir deploy tar cvfj "jenkins-jobs.tar.bz2" ./*.xml


Hay un complemento llamado Job Import Plugin que puede ser lo que está buscando. Lo he usado. Tiene problemas con la importación de proyectos desde un servidor que no permite el acceso anónimo.

Para estar completo: si tiene acceso a la línea de comandos a ambos, puede realizar el procedimiento ya mencionado por Khez para mover, copiar y cambiar el nombre de los trabajos de Jenkins .


Importar trabajos manualmente: forma alternativa

Cargue los trabajos en Git (Control de versiones) Básicamente cargue config.xml del trabajo.

Si los servidores Linux:

cd /var/lib/jenkins/jobs/<Job name> Download the config.xml from Git

Reinicie el Jenkins


Jenkins exporta trabajos a un directorio

#! /bin/bash SAVEIFS=$IFS IFS=$(echo -en "/n/b") declare -i j=0 for i in $(java -jar jenkins-cli.jar -s http://server:8080/jenkins list-jobs --username **** --password ***); do let "j++"; echo $j; if [ $j -gt 283 ] // If you have more jobs do it in chunks as it will terminate in the middle of the process. So Resume your job from where it ends. then java -jar jenkins-cli.jar -s http://lxvbmcbma:8080/jenkins get-job --username **** --password **** ${i} > ${i}.xml; echo "done"; fi done

Trabajos de importación

for f in *.xml; do echo "Processing ${f%.*} file.."; //truncate the .xml extention and load the xml file for job creation java -jar jenkins-cli.jar -s http://server:8080/jenkins create-job ${f%.*} < $f done


Jenkins tiene una wiki bastante buena, aunque es difícil de leer cuando eres nuevo en el software de CI ...

Ofrecen una solución simple para mover trabajos entre servidores.

El truco probablemente fue la necesidad de volver a cargar la configuración desde la página de configuración de Jenkins.


La forma más fácil, con acceso directo a la máquina, es copiar la carpeta del trabajo de los primeros jenkins a otro (puede excluir espacios de trabajo), porque toda la configuración del trabajo se almacena en el archivo xml en el disco.

Luego, en el nuevo jenkins simplemente vuelva a cargar la configuración en la configuración global (se requiere acceso de administrador).

Otra forma puede ser usar los complementos mencionados anteriormente en esta publicación.


Para aquellos de nosotros en el mundo de Windows que pueden o no tener Bash disponible, aquí está mi enfoque PowerShell del enfoque de Katu y Larry Cai . Espero que ayude a alguien.

##### Config vars ##### $serverUri = ''http://localhost:8080/'' # URI of your Jenkins server $jenkinsCli = ''C:/Program Files (x86)/Jenkins/war/WEB-INF/jenkins-cli.jar'' # Path to jenkins-cli.jar on your machine $destFolder = ''C:/Jenkins Backup/' # Output folder (will be created if it doesn''t exist) $destFile = ''jenkins-jobs.zip'' # Output filename (will be overwritten if it exists) ######################## $work = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName()) New-Item -ItemType Directory -Force -Path $work | Out-Null # Suppress output noise echo "Created a temp working folder: $work" $jobs = (java -jar $jenkinsCli -s $serverUri list-jobs) echo "Found $($jobs.Length) existing jobs: [$jobs]" foreach ($j in $jobs) { $outfile = Join-Path $work "$j.xml" java -jar $jenkinsCli -s $serverUri get-job $j | Out-File $outfile } echo "Saved $($jobs.Length) jobs to temp XML files" New-Item -ItemType Directory -Force -Path $destFolder | Out-Null # Suppress output noise echo "Found (or created) $destFolder folder" $destPath = Join-Path $destFolder $destFile Get-ChildItem $work -Filter *.xml | Write-Zip -Level 9 -OutputPath $destPath -FlattenPaths | Out-Null # Suppress output noise echo "Copied $($jobs.Length) jobs to $destPath" Remove-Item $work -Recurse -Force echo "Removed temp working folder"


Probablemente usar la línea de comando jenkins es otra opción, consulte https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

  • create-job: crea un nuevo trabajo al leer stdin como un archivo XML de configuración.
  • get-job: vuelca el XML de definición de trabajo a la salida estándar

Para que puedas hacer

java -jar jenkins-cli.jar -s http://server get-job myjob > myjob.xml java -jar jenkins-cli.jar -s http://server create-job newmyjob < myjob.xml

Funciona bien para mí y estoy acostumbrado a almacenar dentro de mi sistema de control de versiones.


Simple script php funcionó para mí.

Exportar:

// add all job codes in the array $jobs = array("job1", "job2", "job3"); foreach ($jobs as $value) { fwrite(STDOUT, $value. " /n") or die("Unable to open file!"); $path = "http://server1:8080/jenkins/job/".$value."/config.xml"; $myfile = fopen($value.".xml", "w"); fwrite($myfile, file_get_contents($path)); fclose($myfile); }

Importar:

<?php // add all job codes in the array $jobs = array("job1", "job2", "job3"); foreach ($arr as $value) { fwrite(STDOUT, $value. " /n") or die("Unable to open file!"); $cmd = "java -jar jenkins-cli.jar -s http://server2:8080/jenkins/ create-job ".$value." < ".$value.".xml"; echo exec($cmd); }


Una sola línea:

$ curl -s http://OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST ''http://NEW_JENKINS/createItem?name=JOBNAME'' --header "Content-Type: application/xml" -d @-

Autenticación

$ curl -s http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST ''http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME'' --header "Content-Type: application/xml" -d @-

Con Crumb, si CSRF está activo ( ver detalles aquí )

conseguir la miga con:

$ CRUMB_OLD=$(curl -s ''http://<USER>:<API_TOKEN>@OLD_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'')

$ CRUMB_NEW=$(curl -s ''http://<USER>:<API_TOKEN>@NEW_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'')

aplicar la miga con -H CRUMB :

$ curl -s -H $CRUMB_OLD http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST -H $CRUMB_NEW ''http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME'' --header "Content-Type: application/xml" -d @-


Vaya a la página principal de su servidor Jenkins, haga clic en REST API en la parte inferior de la página:

Crear trabajo

Para crear un nuevo trabajo, publique config.xml en esta URL con el name=JOBNAME parámetro de consulta name=JOBNAME . Debe enviar un Content-Type: application/xml . Obtendrás 200 códigos de estado si la creación es exitosa, o código 4xx/5xx si falla. config.xml es el formato que Jenkins usa para almacenar el proyecto en el sistema de archivos, por lo que puede ver ejemplos de ellos en el directorio de inicio de Jenkins, o al recuperar la configuración XML de trabajos existentes desde /job/JOBNAME/config.xml .


El complemento de importación de trabajos es la manera fácil aquí de importar trabajos desde otra instancia de Jenkins. Solo necesita proporcionar la URL de la instancia de Jenkins de origen. La URL de Jenkins remota puede tomar cualquiera de los siguientes tipos de URL:

  • http://$JENKINS - obtener todos los trabajos en una instancia remota

  • http://$JENKINS/job/$JOBNAME - obtenga un solo trabajo

  • http://$JENKINS/view/$VIEWNAME : obtenga todos los trabajos en una vista particular