Pas directement une réponse à votre question mais quelques bonnes pratiques: essayez d'écrire votre configuration de travail avec le Jenkins Pipeline DSL et de l'intégrer dans les référentiels de vos projets. Comme ça, les tâches sont facilement portables d'un serveur Jenkins à l'autre. Voir github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md
L'astuce était probablement la nécessité de recharger la configuration depuis la page de configuration Jenkins.
Mise à jour 2020.03.10
Le paysage JenkinsCI a beaucoup changé ... J'utilise Job DSL depuis un moment maintenant. Nous avons un travail SEED qui génère le reste des emplois.
Cela nous aide à recréer ou à déplacer le serveur Jenkins en cas de besoin :) Vous pouvez également versionner ces fichiers pour encore plus de maintenabilité!
Pour que cela fonctionne, java sur votre ancien serveur, votre nouveau serveur et votre machine locale doit être de la même version. Sinon, d'étranges problèmes de flux / version surviennent. Vos ports jnlp doivent également être ouverts.
MaratC
Le chemin complet vers le client CLI est JENKINS_HOME / war / WEB-INF / jenkins-cli.jar où JENKINS_HOME est l'emplacement de JENKINS_HOME
Rob Kielty
1
Cette méthode a des problèmes avec les esperluettes nues nues dans le XML, comme lorsque vous avez du code & dans Groovy.
Rob Kielty
les esperluettes non encodées dans le XML exporté peuvent se produire dans du code Groovy qui soutient les paramètres du plug-in Active Choice (non-choix); présentera une solution si je peux.
Rob Kielty
1
@information_interchange exactement comme proposé dans ma réponse ci-dessous.
Besoin de jetons d'authentification pour fonctionner, mais acier excellent travail!
Viroide
7
curl -s http: // <USER>: <API_TOEKN> @ OLD_JENKINS / job / JOBNAME / config.xml | curl -X POST 'http: // <USER>: <API_TOEKN> @ NEW_JENKINS / createItem? name = JOBNAME' --header "Content-Type: application / xml" -d @ - <br/> Récupère la clé API utilisateur de : JENKIS_URL / user / <USER> / configure > Jeton API> Afficher le jeton API
Suhas Gaikwad
1
Juste une contribution supplémentaire à ce sujet. Lors du POST sur le serveur cible, vous obtiendrez probablement un code d'erreur HTTP 403 Problème d'accès / createItem. Motif: aucune miette valide n'a été incluse dans la demande. Vous devrez générer un jeton de protection CSRF pour le serveur Jenkins cible. Suivez les conseils de @Kenorb à partir de ce fil: stackoverflow.com/questions/38137760/…
Mig82
2
Vous n'avez même pas besoin d'utiliser les commandes curl car vous pouvez simplement aller sur le http://OLD_JENKINS/job/JOBNAME/config.xmllien de votre navigateur pour récupérer le config.xmlfichier.
entpnerd
1
Vous en avez besoin --data-binaryau lieu de -ddans la curlcommande, car cela -dpourrait gâcher les espaces dans vos scripts.
Gabor Csardi
24
Il existe un plugin appelé Job Import Plugin qui peut être ce que vous recherchez. Je l'ai utilisé. Il a des problèmes avec l'importation de projets à partir d'un serveur qui n'autorise pas l'accès anonyme.
Je ne crois pas qu'il déplace actuellement autre chose que la configuration.
jwernerny
14
Accédez à la page d'accueil de votre serveur Jenkins, cliquez sur l'API REST en bas de la page:
Créer un travail
Pour créer un nouveau travail, publiez config.xmlsur cette URL avec le paramètre de requête name=JOBNAME. Vous devez envoyer un en- Content-Type: application/xmltête. Vous obtiendrez un 200code d'état si la création réussit ou un 4xx/5xxcode en cas d'échec. config.xmlest 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 en récupérant la configuration XML des travaux existants /job/JOBNAME/config.xml.
Propriété de l'utilisateur jenkins et du groupe jenkins avec 644 autorisations. La copie du fichier vers et depuis 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 devrait être à nouveau configuré.
dans WindowsC:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Sasha Bond
8
Le plugin Job Import est le moyen facile ici d'importer des travaux à partir d'une autre instance Jenkins. Il suffit de fournir l'URL de l'instance Jenkins source. L'URL Jenkins distante peut accepter l'un des types d'URL suivants:
http://$JENKINS - obtenir tous les travaux sur une instance distante
http://$JENKINS/job/$JOBNAME - obtenir un seul emploi
http://$JENKINS/view/$VIEWNAME - obtenir tous les emplois 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. Si quelqu'un le trouve 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
#! /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 avoir Bash disponible, voici mon port PowerShell de Katu et l' approche de Larry Cai . J'espère que cela 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-ItemTypeDirectory-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-ItemTypeDirectory-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-Level9-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"
Cela pourrait fonctionner pour certains, mais pas pour moi. Cela ne fonctionne que si la nouvelle instance Jenkins a un accès direct à l'ancienne instance Jenkins. Les miens étaient sur deux réseaux différents.
Justin Domnitz
1
Un 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);
}
Importer:
<?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);
}
Le moyen le plus simple, avec un accès direct à la machine, est de copier le dossier de travail des premiers jenkins vers un autre (vous pouvez exclure les espaces de travail - workspacedossier), car la configuration complète de la tâche est stockée dans le fichier xml sur le disque.
Ensuite, dans le nouveau jenkins juste reload configurationdans les paramètres globaux (un accès administrateur est requis) devrait être suffisant, sinon, vous devrez redémarrer l'outil Jenkins.
Une autre façon peut être d'utiliser les plugins mentionnés ci-dessus.
modifier: - au cas où vous pourriez probablement également exclure des modulesdossiers
Réponses:
Jenkins a un assez bon wiki, bien que difficile à lire lorsque vous êtes nouveau sur le logiciel CI ...
Ils offrent une solution simple pour déplacer des travaux entre les serveurs
L'astuce était probablement la nécessité de recharger la configuration depuis la page de configuration Jenkins.
Mise à jour 2020.03.10
Le paysage JenkinsCI a beaucoup changé ... J'utilise Job DSL depuis un moment maintenant. Nous avons un travail SEED qui génère le reste des emplois.
Cela nous aide à recréer ou à déplacer le serveur Jenkins en cas de besoin :) Vous pouvez également versionner ces fichiers pour encore plus de maintenabilité!
la source
Utiliser probablement la ligne de commande jenkins est une autre option, voir https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
Vous pouvez donc faire
Cela fonctionne bien pour moi et je suis habitué à stocker dans mon système de contrôle de version
la source
Un one-liner:
Avec authentification:
Avec Crumb, si CSRF est actif ( voir les détails ici ):
Obtenez la miette avec:
Appliquer la mie avec
-H CRUMB
:la source
http://OLD_JENKINS/job/JOBNAME/config.xml
lien de votre navigateur pour récupérer leconfig.xml
fichier.--data-binary
au lieu de-d
dans lacurl
commande, car cela-d
pourrait gâcher les espaces dans vos scripts.Il existe un plugin appelé Job Import Plugin qui peut être ce que vous recherchez. Je l'ai utilisé. Il a des problèmes avec l'importation de projets à partir d'un serveur qui n'autorise pas l'accès anonyme.
Pour être complet: Si vous avez accès en ligne de commande aux deux, vous pouvez effectuer la procédure déjà mentionnée par Khez pour le déplacement, la copie et le changement de nom des travaux Jenkins .
la source
Accédez à la page d'accueil de votre serveur Jenkins, cliquez sur l'API REST en bas de la page:
Pour créer un nouveau travail, publiez
config.xml
sur cette URL avec le paramètre de requêtename=JOBNAME
. Vous devez envoyer un en-Content-Type: application/xml
tête. Vous obtiendrez un200
code d'état si la création réussit ou un4xx/5xx
code 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 en récupérant la configuration XML des travaux existants/job/JOBNAME/config.xml
.la source
Dans mon instance Jenkins (version 1.548), le fichier de configuration est à:
/var/lib/jenkins/jobs/-the-project-name-/config.xml
Propriété de l'utilisateur jenkins et du groupe jenkins avec 644 autorisations. La copie du fichier vers et depuis 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 devrait être à nouveau configuré.
la source
C:\Users\{admin-user}\.jenkins\jobs\-the-project-name-\config.xml
Le plugin Job Import est le moyen facile ici d'importer des travaux à partir d'une autre instance Jenkins. Il suffit de fournir l'URL de l'instance Jenkins source. L'URL Jenkins distante peut accepter l'un des types d'URL suivants:
http://$JENKINS
- obtenir tous les travaux sur une instance distantehttp://$JENKINS/job/$JOBNAME
- obtenir un seul emploihttp://$JENKINS/view/$VIEWNAME
- obtenir tous les emplois dans une vue particulièrela source
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. Si quelqu'un le trouve utile, le voici:
la source
Dans un navigateur Web, visitez:
Enregistrez simplement le fichier sur votre disque.
la source
Exportation de tâches Jenkins vers un répertoire
Importer des travaux
la source
Pour ceux d'entre nous dans le monde Windows qui peuvent ou non avoir Bash disponible, voici mon port PowerShell de Katu et l' approche de Larry Cai . J'espère que cela aide quelqu'un.
la source
Il est très facile de télécharger simplement le nom du plugin
Plugin d'importation de travaux
Entrez l'URL de votre serveur Jenkins distant et il importera automatiquement les travaux
la source
Un script php simple a fonctionné pour moi.
Exportation:
Importer:
la source
Cela ne fonctionne pas pour les travaux existants, mais il existe un générateur de travaux Jenkins .
Cela permet de conserver les définitions de travail dans des fichiers yaml et dans un dépôt git qui est très portable.
la source
Le moyen le plus simple, avec un accès direct à la machine, est de copier le dossier de travail des premiers jenkins vers un autre (vous pouvez exclure les espaces de travail -
workspace
dossier), car la configuration complète de la tâche est stockée dans le fichier xml sur le disque.Ensuite, dans le nouveau jenkins juste
reload configuration
dans les paramètres globaux (un accès administrateur est requis) devrait être suffisant, sinon, vous devrez redémarrer l'outil Jenkins.Une autre façon peut être d'utiliser les plugins mentionnés ci-dessus.
modifier: - au cas où vous pourriez probablement également exclure des
modules
dossiersla source
Importation manuelle de travaux: autre méthode
Téléchargez les Jobs sur Git (Contrôle de version) Téléchargez essentiellement config.xml du Job.
Si les serveurs Linux:
Redémarrez le Jenkins
la source
En tant qu'utilisateur Web, vous pouvez exporter en accédant à l'historique de configuration des travaux, puis en exportant XML.
Je suis dans la situation de ne pas avoir accès à la machine sur laquelle Jenkins fonctionne et je voulais exporter en tant que sauvegarde.
Quant à l'importation du xml en tant qu'utilisateur Web, je voudrais quand même savoir.
la source