web-dev-qa-db-fra.com

Emplois export/import à Jenkins

Est-il possible d'échanger des emplois entre 2 Jenkins différents? Je cherche un moyen d'exporter/d'importer des emplois.

239
damluar

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.

141
Khez

Utiliser probablement la ligne de commande jenkins est une autre option, voir https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

  • create-job: crée un nouveau travail en lisant stdin en tant que fichier XML de configuration.
  • get-job: vide le fichier XML de définition de travail sur stdout

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

165
Larry Cai

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 .

24
jwernerny

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.

13
user1050755

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é.

8
jimmont

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

7
GaneSH Malkar

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
6
Katu

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
4
karthick

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"
1
Justin Morgan

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

1
xxxvodnikxxx

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);
}
1
Jitendra Chandani

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.

1
pcrews

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.

0
Guardian

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

0
Dixon Almeida

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:

  1. Déplacez un travail d’une installation de Jenkins à une autre en copiant simplement le répertoire de travail correspondant.
  2. Faites une copie d'un travail existant en créant un clone d'un répertoire de travail sous un nom différent.
  3. Renommez un travail existant en renommant un répertoire. Notez que si vous modifiez un nom de travail, vous devez modifier tout autre travail essayant d'appeler le travail renommé.

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

  1. sortir d'arrêt Jenkins
  2. redémarrer redémarrer jenkins
  3. recharger pour recharger la configuration
0
Gavriel Cohen

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.

0
SwimBikeRun