Comment déplacer Jenkins d'un PC à un autre

154

J'utilise actuellement Jenkins sur mon PC de développement. Je l'ai installé sur mon PC de développement, car j'avais des connaissances limitées sur cet outil; donc je l'ai testé sur mon PC de développement. Maintenant, je me sens à l'aise avec Jenkins en tant que mon "partenaire" à long terme dans le processus de construction et je voudrais "déplacer" ce Jenkins vers un serveur dédié.

Avant cela, j'ai fait quelques builds et j'ai archivé les artefacts de chaque build. En particulier, le numéro de version est très important pour moi pour le contrôle de version.

Comment puis-je exporter toutes les informations Jenkins de mon PC actuel vers mon nouveau serveur?

huahsin68
la source
6
Je viens de faire ça. J'ai suivi les étapes de la réponse de Cédric Julien, mais j'ai trouvé que sous Windows, je devais exécuter une installation de réparation avant que Jenkins puisse se lancer avec succès après le déménagement. Après la réparation, tout va bien.
Smurph269

Réponses:

175

En suivant le wiki Jenkins , vous devrez:

  • Installez une nouvelle instance Jenkins sur le nouveau serveur
  • Assurez-vous que l'ancienne et la nouvelle instances Jenkins sont arrêtées
  • Archiver tout le contenu du JENKINS_HOME de l'ancienne instance Jenkins
  • Extrayez l'archive dans le nouveau répertoire JENKINS_HOME
  • Lancer la nouvelle instance Jenkins
  • N'oubliez pas de modifier la documentation / les liens vers votre nouvelle instance de Jenkins :)
  • N'oubliez pas de changer le propriétaire des nouveaux fichiers Jenkins: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME est situé par défaut dans ~/.jenkinsune installation de Linux, mais exactement trouver où il se trouve, allez sur le http: // your_jenkins_url / configure la page et vérifiez la valeur du premier paramètre: Home directory; c'est le JENKINS_HOME.

Cédric Julien
la source
1
Lorsque j'ai lancé mes nouveaux jenkins, mes nœuds s'affichent, ce qui est correct. Mais quand j'ai cliqué sur un nœud, les URL pointent vers les vieux jenkins comme ci-dessous: Exécuter à partir de la ligne de commande esclave: javaws old-jenkins-server: 8080 / ordinateur / slaveMachine1 / slave-agent.jnlp Ou si l'esclave est sans tête: java -jar slave.jar -jnlpUrl old-jenkins-server: 8080 / computer / slaveMachine1 / slave-agent.jnlp Maintenant Comment dois-je faire que ces URL pour chaque nœud pointent vers new-jenkins-server?
merlachandra
13
Vous avez la solution à mon problème mentionné dans mon commentaire précédent: Goto Manage Jenkins> configure system. Ici, dans la section 'Emplacement Jenkins', sous le champ 'URL Jenkins', modifiez l'URL pour la pointer vers le nouveau serveur jenkins.
merlachandra du
3
assurez-vous de copier également les dossiers cachés!
mohi
7
haha +1 pour le "n'oubliez pas de modifier la documentation / les liens vers votre nouvelle instance de Jenkins"
Iain Smith
2
J'ai eu des problèmes avec les autorisations et la propriété de fichier correctes, pour le résoudre, j'ai utilisé ce script docker (la partie qui définit les propriétés / autorisations): hub.docker.com/r/appcontainers/jenkins/~/dockerfile
marcinj
53

Dans le cas où votre répertoire JENKINS_HOME est trop volumineux pour être copié , et que tout ce dont vous avez besoin est de configurer les mêmes Jobs, les plugins Jenkins et les configurations Jenkins (et que vous n'avez pas besoin d'anciens artefacts et rapports de Job), vous pouvez utiliser ThinBackup Plugin :

  1. Installez ThinBackup sur les serveurs Jenkins source et cible
  2. Configurer le répertoire de sauvegarde sur les deux (dans Gérer Jenkins -> ThinBackup -> Paramètres)

  3. Sur Sourse Jenkins, accédez à ThinBackup -> Sauvegarder maintenant

  4. Copie du répertoire de sauvegarde de la source Jenkins vers le répertoire de sauvegarde de la cible Jenkins
  5. Sur Target Jenkins, accédez à ThinBackup -> Restore, puis redémarrez le service Jenkins.
  6. Si certains plugins ou jobs manquent, copiez le contenu de la sauvegarde directement dans le JENKINS_HOME cible.

  7. Si vous aviez une authentification utilisateur sur le Jenkins source, et maintenant verrouillé sur le Jenkins cible, modifiez Jenkins config.xml, définissez-le <useSecurity>sur false, et redémarrez Jenkins.

Noam Manos
la source
2
Pourquoi le répertoire JENKINS_HOME serait-il trop volumineux pour être copié? De quel genre de tailles parlons-nous?
wotanii
9
mon jenkins_home fait environ 100 Go, je ne veux pas le copier sur un nouveau serveur, car il s'agit principalement de choses à jeter
user230910
3
Mon Jenkins_home fait ~ 4 To, donc une copie fine qui ne porte que la configuration et aucun des historiques de construction ou / usercontent n'est utile.
VolleyJosh
Génial, Plugins ... Vraiment gagné beaucoup de temps .. gérer des centaines de Go n'est pas une tâche facile
Swapnil Kotwal
11

Cela a fonctionné pour moi pour passer d'Ubuntu 12.04 (Jenkins ver. 1.628) à Ubuntu 16.04 (Jenkins ver. 1.651.2). J'ai d'abord installé Jenkins à partir des référentiels .

  1. Arrêtez les deux serveurs Jenkins
  2. Copiez JENKINS_HOME(par exemple / var / lib / jenkins) de l'ancien serveur vers le nouveau. À partir d'une console du nouveau serveur:

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

  3. Démarrez votre nouveau serveur Jenkins

Tu n'as peut-être pas besoin de ça, mais je devais

  • Manage Jenkins et Reload Configuration from Disk .
  • Déconnectez et reconnectez tous les esclaves.
  • Vérifiez que dans le Configure System > Jenkins Location, le Jenkins URLest correctement affecté au nouveau serveur Jenkins.
Katu
la source
Le nouveau Jenkins avait-il la même version que l'ancien?
Jakub Czaplicki
@JakubCzaplicki - Les deux Jenkins étaient 1.6, mais pas exactement la même version. Réponse mise à jour. J'ai ensuite mis à jour Ubuntu 16.04 vers Jenkins 2.6 en remplaçant le fichier jenkins.war et cela a bien fonctionné. stackoverflow.com/questions/11062335/…
Katu
Après avoir fait ce qui précède et visité /configureSecurityje reçoisjava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme
@maxisme, en retard mais ce fil suggère que le problème que vous avez évoqué est lié à la version java. issues.jenkins-ci.org/browse/JENKINS-46182
Katu
1

Automatisation du serveur Jenkins:

Étape 1:

Configurez un référentiel pour stocker la maison Jenkins (tâches, configurations, plugins, etc.) dans un dépôt local GitLab ou sur un dépôt privé GitHub et tenez-le à jour régulièrement en poussant toute nouvelle modification dans les tâches Jenkins, les plugins, etc.

Étape 2:

Configurez un groupe d'hôtes / rôle Puppet pour Jenkins qui peut être utilisé pour lancer de nouveaux serveurs Jenkins. Effectuez toute la configuration de base dans une recette Puppet et assurez-vous qu'elle installe la dernière version de Jenkins et configure un répertoire / montage séparé pour JENKINS_HOME.

Étape 3:

Faites tourner une nouvelle machine en utilisant la configuration Jenkins-puppet ci-dessus. Lorsque tout est installé, récupérez / clonez la configuration Jenkins du référentiel Git vers le répertoire de base Jenkins et redémarrez Jenkins.

Étape 4:

Accédez à l'URL Jenkins, Gérer JenkinsGérer les plugins et mettez à jour tous les plugins qui nécessitent une mise à jour.

Terminé

Vous pouvez utiliser Docker Swarm ou Kubernetes pour mettre à l'échelle automatiquement les nœuds esclaves.

Ijaz Ahmad Khan
la source
1

Parfois, nous n'avons pas accès à une machine Jenkins pour copier un dossier directement dans une autre instance Jenkins. J'ai donc écrit un utilitaire piloté par menu qui utilise les appels d'API Jenkins REST pour installer des plugins et des travaux d'une instance Jenkins à une autre.

Pour la migration du plugin:

  1. OBTENIR la demande: {SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1 vous obtiendrez la liste des plugins installés avec leur version.
  2. Vous pouvez envoyer une requête POST avec les paramètres suivants pour installer ces plugins.

    final_url=`{DESTINATION_JENKINS_SERVER}/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="{PLUGIN_NAME}@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`{crumb_field:crumb_value,"Content-Type":"application/xml”}` (where crumb_field=Jenkins-Crumb and get crumb value using API call {DESTINATION_JENKINS_SERVER}/crumbIssuer/api/json
    

Pour la migration d'emploi:

  1. Vous pouvez obtenir la liste des tâches installées sur {SOURCE_JENKINS_URL} à l'aide d'un appel REST, {SOURCE_JENKINS_URL}/view/All/api/json
  2. Ensuite, vous pouvez obtenir chaque fichier config.xml de tâche à partir des tâches sur {SOURCE_JENKINS_URL} en utilisant l'URL de la tâche {SOURCE_JENKINS_URL}/job/{JOB_NAME}.
  3. Utilisez ce fichier config.xml pour POSTER le contenu du fichier XML sur {DESTINATION_JENKINS_URL} et cela créera un travail sur {DESTINATION_JENKINS_URL}.

J'ai créé un utilitaire piloté par menu en Python qui demande à l'utilisateur de démarrer la migration du plugin ou de Jenkins et utilise les appels de l'API REST Jenkins pour le faire.

Vous pouvez faire référence au JenkinsMigration.docx à partir de cette URL

psalvi21
la source
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses aux liens uniquement peuvent devenir invalides si la page liée change.
vich