Est-il possible d'échanger des emplois entre 2 Jenkins différents? Je cherche un moyen d'exporter/d'importer des emplois.
Jenkins a un wiki plutôt bon, bien que difficile à lire lorsque vous découvrez le logiciel CI ...
Ils offrent une solution simple pour le déplacement des travaux entre les serveurs
Le truc était probablement la nécessité de recharger la configuration depuis la page de configuration de Jenkins.
Utiliser probablement la ligne de commande jenkins est une autre option, voir https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
Donc tu peux faire
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
Cela fonctionne bien pour moi et je suis habitué à stocker dans mon système de contrôle de version
Il existe un plugin appelé Job Import Plugin qui peut être ce que vous recherchez. Je l'ai utilisé. Il est problématique d'importer des projets à partir d'un serveur qui n'autorise pas l'accès anonyme.
Pour être complet: Si vous avez un accès en ligne de commande aux deux, vous pouvez effectuer la procédure déjà mentionnée par Khez pour Déplacement, copie et modification du nom des travaux Jenkins .
Allez sur la page d'accueil de votre serveur Jenkins, cliquez sur l'API REST en bas de la page:
Créer un emploi
Pour créer un nouveau travail, envoyez config.xml
à cette URL avec le paramètre de requête name=JOBNAME
. Vous devez envoyer un en-tête Content-Type: application/xml
. Vous obtiendrez le code d'état 200
si la création a réussi ou le code 4xx/5xx
en cas d'échec. config.xml
est le format utilisé par Jenkins pour stocker le projet dans le système de fichiers. Vous pouvez donc en voir des exemples dans le répertoire de base de Jenkins ou récupérer la configuration XML des tâches existantes à partir de /job/JOBNAME/config.xml
.
Dans mon instance Jenkins (version 1.548), le fichier de configuration est:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
Détenu par l'utilisateur jenkins et le groupe jenkins avec 644 autorisations. Copier le fichier d’ici et d’ici devrait fonctionner. Je n'ai pas essayé de le changer directement, mais j'ai sauvegardé la configuration à partir de cet endroit au cas où le projet aurait besoin d'être ré-configuré.
Le plug-in d'importation de travaux est un moyen simple d'importer des travaux à partir d'une autre instance de Jenkins. Il suffit de fournir l'URL de l'instance source Jenkins. L’URL Jenkins distante peut prendre l’un des types d’URL suivants:
http://$JENKINS
- récupère tous les travaux sur une instance distante
http://$JENKINS/job/$JOBNAME
- obtenir un seul emploi
http://$JENKINS/view/$VIEWNAME
- obtenir tous les travaux dans une vue particulière
Grâce à la réponse de Larry Cai, j'ai réussi à créer un script pour sauvegarder tous mes travaux Jenkins. J'ai créé un travail qui s'exécute chaque semaine. Au cas où quelqu'un le trouverait utile, le voici:
#!/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
Jenkins exporte des travaux vers un répertoire
#! /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
Importer des travaux
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
Pour ceux d'entre nous dans le monde Windows qui peuvent ou non disposer de Bash, voici l'approche de mon portage PowerShell de Katu et Larry Cai . J'espère que ça aide quelqu'un.
##### 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"
Le moyen le plus simple, avec un accès direct à la machine, consiste à copier le dossier de travail du premier jenkins vers un autre (vous pouvez exclure les espaces de travail - dossier workspace
), car toute la configuration du travail est stockée dans le fichier xml du disque.
Alors, dans les nouveaux jenkins, juste reload configuration
dans les paramètres globaux (un accès administrateur est requis) devrait suffire, sinon, vous devrez redémarrer l'outil Jenkins.
Une autre façon peut être d'utiliser les plugins mentionnés ci-dessus dans cet article.
edit: - au cas où vous pourriez probablement aussi exclure des dossiers modules
Le script php simple a fonctionné pour moi.
Exportation:
// 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);
}
Importation:
<?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);
}
Cela ne fonctionne pas pour les emplois existants, mais il y a constructeur de travaux Jenkins .
Cela permet de conserver les définitions de travail dans les fichiers yaml et dans un dépôt git très portable.
Il est très facile de télécharger le nom du plugin
Plugin d'importation de travail
Entrez l'URL de votre serveur Jenkins distant et les travaux seront automatiquement importés.
Importation manuelle de travaux: autre manière
Téléchargez les travaux sur Git (Version Control) Téléchargez essentiellement le fichier config.xml du travail.
Si les serveurs Linux:
cd /var/lib/jenkins/jobs/<Job name>
Download the config.xml from Git
Redémarrer le Jenkins
Par défaut, il est défini sur ~/.jenkins, mais vous pouvez le modifier de l’une des manières suivantes:
* Set "JENKINS_HOME" environment variable to the new home directory before launching
the servlet container.
* Set "JENKINS_HOME" system property to the servlet container.
* Set JNDI environment entry "JENKINS_HOME" to the new directory.
Voir la collection de documentation spécifique au conteneur pour en savoir plus sur la procédure à suivre pour votre conteneur.
Vous pouvez également modifier cet emplacement après avoir utilisé Jenkins pendant un certain temps. Pour ce faire, arrêtez complètement Jenkins, déplacez le contenu de l'ancien JENKINS_HOME vers le nouveau domicile, définissez le nouveau JENKINS_HOME et redémarrez Jenkins.
JENKINS_HOME a une structure de répertoire assez évidente qui ressemble à ceci:
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)
Sauvegarder et restaurer:
Tous les paramètres, les journaux de construction, les archives d'artefacts sont stockés dans le répertoire JENKINS_HOME. Archivez simplement ce répertoire pour faire une sauvegarde. De même, la restauration des données ne fait que remplacer le contenu du répertoire JENKINS_HOME à partir d'une sauvegarde.
Des sauvegardes peuvent être effectuées sans arrêter le serveur, mais lors de la restauration, arrêtez le serveur.
Déplacement/copie/renommage de travaux
Vous pouvez:
Ces opérations peuvent être effectuées même lorsque Jenkins est en cours d'exécution. Pour que de telles modifications prennent effet, vous devez cliquer sur "reload config" pour forcer Jenkins à recharger la configuration à partir du disque.
Renommer par lots des travaux
Remplacement d'espaces dans les noms de travaux par des traits de soulignement
$ rename 's/\s/_/g' *
Archiver les travaux inutilisés
Parfois, vous souhaitez supprimer un travail de Jenkins, mais de manière à pouvoir le ressusciter ultérieurement, le cas échéant. Pour ce faire, accédez à $ JENKINS_HOME et créez une archive du répertoire de travail. La commande suivante montre comment archiver un travail 'xyz' et le supprimer.
$ cd $JENKINS_HOME/jobs
$ tar czf xyz.tgz xyz
// go to Jenkins GUI "Manage Jenkins" page and "Reload Configuration from Disk"
Tant que vous ne construisez pas le projet xyz pendant que vous créez une archive, vous pouvez effectuer cette opération sans mettre Jenkins hors ligne.
Voir aussi le plugin "Shelve Project" .
Console de script
Utile pour le dépannage, le diagnostic ou la mise à jour par lot de tâches Jenkins fournit une console de script qui vous donne accès à tous les éléments internes de Jenkins . Ces scripts sont écrits en Groovy et vous en trouverez quelques exemples dans cette page .
Options d'URL
http://[jenkins-server]/[command]
où [commande] peut être
En tant qu'utilisateur Web, vous pouvez exporter en accédant à l'historique de configuration des tâches, puis en exportant du XML.
Je ne peux pas accéder à la machine sur laquelle Jenkins est en cours d'exécution et je voulais exporter en tant que sauvegarde.
En ce qui concerne l'importation du code XML en tant qu'utilisateur Web, j'aimerais tout de même savoir.