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 remotahttp://$JENKINS/job/$JOBNAME
- obtenga un solo trabajohttp://$JENKINS/view/$VIEWNAME
: obtenga todos los trabajos en una vista particular