Jenkins Déplacement instance
Lors du déplacement d'une instance de Jenkins
, comme lors de la mise à jour de Tomcat, des erreurs peuvent surgir lors de l'affichage des projets ou sur les configurations. Cet article présente les actions nécessaires suite à un déplacement.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Etude
Sur les anciens projets, un message d'erreur est affiché lors de la navigation dans l'espace de travail.

Il est constaté que l'emplacement recherché correspondant à l'ancien. Le déplacement n'est pas pris en compte. Plusieurs raisons sont évoquées.
Il n'y a pas de workspace existant pour ce projet. Les raisons possibles sont : Le projet a été renommé récemment et aucun build n'a été fait avec ce nouveau nom. La machine esclave sur laquelle ce projet a été lancé pour la dernière fois a été retirée. Le répertoire de travail (/usr/share/tomcat6/.jenkins/jobs/Tika-1.5/workspace) a été déplacé hors de Jenkins. The workspace was wiped out and no build has been done since then. Lancer un build afin de faire créer un workspace par Jenkins.
La solution proposée est de relancer une analyse, qui devrait réinitialiser le paramétrage de l'espace de travail. Cependant, il est possible de modifier des fichiers pour prendre en compte le nouvel emplacement.
Configuration répertoire
L'espace de travail est configuré dans le fichier build.xml
des "builds" du projet. Pour cet exemple, le fichier se trouve sous /usr/share/tomcat7/.jenkins/jobs/Tika-1.5/builds/lastStableBuild/build.xml
.
<id>2014-10-16_12-56-21</id>
<timestamp>1413456981000</timestamp>
<startTime>1413456981542</startTime>
<result>SUCCESS</result>
<duration>71241</duration>
<charset>UTF-8</charset>
<keepLog>false</keepLog>
<builtOn></builtOn>
<workspace>/usr/share/tomcat6/.jenkins/jobs/Tika-1.5/workspace</workspace>
<hudsonVersion>1.583</hudsonVersion>
IL est donc nécessaire de modifier le contenu de la balise workspace
.
Fichiers XML
Cependant, cet emplacement est écrit dans un grand nombre de fichiers en fonction des actions et plugins installés.
Cela peut être le cas des résultats des tests JUnit
, dont les résultats se trouvent dans le fichier /usr/share/tomcat7/.jenkins/jobs/Tika-1.5/modules/fr.ejn.tutorial$tika/builds/10/junitResult.xml
dans le cadre de cet exemple.
<?xml version='1.0' encoding='UTF-8'?>
<result>
<suites>
<suite>
<file>/usr/share/tomcat6/.jenkins/jobs/Tika-1.5/workspace/target/surefire-reports/TEST-fr.ejn.tutorial.metadatas.impl.tika.TikaExtractorImplDynConfTest.xml</file>
<name>fr.ejn.tutorial.metadatas.impl.tika.TikaExtractorImplDynConfTest</name>
<duration>5.0649996</duration>
<cases>
<case>
<duration>3.462</duration>
<className>fr.ejn.tutorial.metadatas.impl.tika.TikaExtractorImplDynConfTest</className>
<testName>testExtractOnPowerpointX</testName>
<skipped>false</skipped>
<failedSince>0</failedSince>
</case>
</suite>
</suites>
<duration>8.791999</duration>
<keepLongStdio>false</keepLongStdio>
</result>
Cela peut également être le cas des analyses checkstyle
, par exemple /usr/share/tomcat7/.jenkins/jobs/Exemple Checkstyle Plugin/builds/2/checkstyle-warnings.xml
<?xml version='1.0' encoding='UTF-8'?>
<annotation-array>
<warning plugin="checkstyle@3.39">
<message>L&apos;expression peut &#234;tre simplifi&#233;e.</message>
<priority>HIGH</priority>
<key>3</key>
<lineRanges>
<range plugin="analysis-core@1.57">
<start>187</start>
<end>187</end>
</range>
</lineRanges>
<primaryLineNumber>187</primaryLineNumber>
<fileName>/usr/share/tomcat6/.jenkins/jobs/Exemple Checkstyle Plugin/workspace/src/main/java/fr/ejn/tutorial/tika/parser/pdf/ContentFilterPDFParser.java</fileName>
<moduleName>Tika Study</moduleName>
<packageName>fr.ejn.tutorial.tika.parser.pdf</packageName>
<category>Coding</category>
<type>SimplifyBooleanExpressionCheck</type>
<contextHashCode>498874276</contextHashCode>
<origin>checkstyle</origin>
<pathName>usr/share/tomcat6/.jenkins/jobs/Exemple Checkstyle Plugin/workspace/src/main/java/fr/ejn/tutorial/tika/parser/pdf</pathName>
<primaryColumnStart>65</primaryColumnStart>
<primaryColumnEnd>65</primaryColumnEnd>
</warning>
</annotation-array>
Les résultats de couverture de tests contiennent également cette information.
En conclusion, il est nécessaire de modifier l'ensemble des fichiers XML.
Mise à jour
Les modifications sont très nombreuses car il faut travailler l'ensemble des fichiers XML. Dans le cadre d'une installation sous Linux, comme Ubuntu, l'outil sed
couplé à une recherche avec find
, va permettre de modifier tous les fichiers en une seule ligne de commande.
Pour cet exemple, l'objectif est de remplacer les références tomcat6
en tomcat7
, pour tous les fichiers dans l'espace de travail de Jenkins, soit /usr/share/tomcat7/.jenkins/jobs/
.
#sudo find /usr/share/tomcat7/.jenkins/jobs -name '*.xml' -exec sed -i 's/tomcat6/tomcat7/g' {} \;
La recherche permet de retourner tous les fichiers dont l'extension est xml
. Sur chacun des fichiers, la commande sed -i 's/tomcat6/tomcat7/g'
est exécutée pour remplacer tomcat6
par tomcat7
.
Afin que cela soit pris en compte, il est nécessaire de redémarrer l'instance Jenkins ou le serveur hébergeant l'application.
La même action a été réalisée suite à l' installation Tomcat 8 où les emplacements ont été modifiés.
#sudo find /usr/share/tomcat8/.jenkins/jobs -name '*.xml' -exec sed -i 's/tomcat7/tomcat8/g' {} \;
Configuration CVS
Lors de l'installation initiale de Jenkins, les paramètres de CVS
ont été positionnés avec les valeurs par défaut.
- Private Key Location : /usr/share/tomcat6/.ssh/id_rsa
- Known Hosts Location : /usr/share/tomcat6/.ssh/known_hosts

Il est donc nécessaire de les mettre à jour avec /usr/share/tomcat7/
, dans le cadre de ce déplacement. Les valeurs sont alors les suivantes.
- Private Key Location : /usr/share/tomcat7/.ssh/id_rsa
- Known Hosts Location : /usr/share/tomcat7/.ssh/known_hosts

Cette modification est visible dans le fichier hudson.scm.CVSSCM.xml
, dans le répertoire HOME
de Jenkins, soit /usr/share/tomcat7/.jenkins
pour cette installation.
<?xml version='1.0' encoding='UTF-8'?>
<hudson.scm.CVSSCM_-DescriptorImpl plugin="cvs@2.12">
<generation>1</generation>
<compressionLevel>3</compressionLevel>
<privateKeyLocation>/usr/share/tomcat7/.ssh/id_rsa</privateKeyLocation>
<privateKeyPassword>SCa8AkpY2AgR/43nC4LXjg==</privateKeyPassword>
<knownHostsLocation>/usr/share/tomcat7/.ssh/known_hosts</knownHostsLocation>
<authTokens/>
<changelogEncoding>UTF-8</changelogEncoding>
</hudson.scm.CVSSCM_-DescriptorImpl>
Cependant, il faut s'assurer que ce réperotire existe et est accessible au compte de démarrage, tomcat7
dans le cadre de cette installation.
#sudo mkdir -p /usr/share/tomcat7/.ssh #sudo chown tomcat7:tomcat7 /usr/share/tomcat7/.ssh
La même action a été réalisée suite à l' installation Tomcat 8 où les emplacements ont été modifiés.
#sudo mkdir -p /usr/share/tomcat8/.ssh #sudo chown tomcat8:tomcat8 /usr/share/tomcat8/.ssh
Et le fichier hudson.scm.CVSSCM.xml
a été modifié pour référencer ce nouvel emplacment.
<?xml version='1.0' encoding='UTF-8'?>
<hudson.scm.CVSSCM_-DescriptorImpl plugin="cvs@2.12">
<generation>1</generation>
<compressionLevel>3</compressionLevel>
<privateKeyLocation>/usr/share/tomcat8/.ssh/id_rsa</privateKeyLocation>
<privateKeyPassword>SCa8AkpY2AgR/43nC4LXjg==</privateKeyPassword>
<knownHostsLocation>/usr/share/tomcat8/.ssh/known_hosts</knownHostsLocation>
<authTokens/>
<changelogEncoding>UTF-8</changelogEncoding>
</hudson.scm.CVSSCM_-DescriptorImpl>
Installation Jenkins Runner
Suite à la mise en place d'une instance autonome de Jenkins
, avec Jenkins Runner, il est nécessaire de déplacer le répertoire de travail de Jenkins
, dans le répertoire /var/opt/jenkins/common/home
. Il est également nécessaire de modifier le contenu d'un ensemble de fichier afin de référencer le nouvel emplacement. Cela met en évidence qu'il est important que cet espace de travail ne contienne aucune adhérence avec l'environnement d'exécution.
Déplacement
Dans le cadre de cette mise en place, le répertoire home
est déplacé depuis le répertoire /var/lib/tomcat8/.jenkins
vers /var/opt/jenkins/common/data
.
#sudo cp -Rp /var/lib/tomcat8/.jenkins/* /var/opt/jenkins/common/data/
Propriétaire fichiers
L'instance étant démarré avec le compte jenkins
, il est nécessaire de mettre à jour le propriétaire des fichiers.
#sudo chown -R jenkins:jenkins /var/opt/jenkins/common/data
Mise à jour
Les fichiers contiennent les emplacements des fichiers, en absolu. IL faut modifier les contenus pour prendre en compte ce nouveau répertoire. Sur une machine Linux
, ceci est facilement réalisable à l'aide des commandes find
et sed
. Pour cet exemple, toutes les valeurs /var/lib/tomcat8/.jenkins/
sont remplacées par /var/opt/jenkins/common/data
pour les fichiers XML
.
#sudo find /var/opt/jenkins/common/data -name '*.xml' -exec sed -i 's/\/var\/lib\/tomcat8\/.jenkins/\/var\/opt\/jenkins\/common\/data/g' {} \;
A noter, l'utilisation du caractère \
pour échapper le caractère /
dans l'expression régulière de sed
.
Certificats CVS
La configuration CVS
de Jenkins
permet de spécifier l'emplacement des certificats. La précédente installation étant sur un serveur Tomcat
, les répertoires se trouvaient sous /usr/share/tomcat8/.ssh
.
Dans un premier temps, des répertoires externalisés sont mis en place.
#sudo mkdir -p /var/opt/jenkins/common/home/.ssh/id_rsa #sudo mkdir -p /var/opt/jenkins/common/home/.ssh/known_hosts
Puis les potentiels fichiers sont recopiés.
#sudo cp -R /usr/share/tomcat8/.ssh/id_rsa/* /var/opt/jenkins/common/home/.ssh/id_rsa #sudo cp -R /usr/share/tomcat8/.ssh/known_hosts/* /usr/share/tomcat8/home/.ssh/known_hosts/
Les permissions sont mises à jour afin de n'authoriser que le compte d'exécution de Jenkins
, soit jenkins
pour cette implémentation.
#sudo chown -R jenkins:jenkins /var/opt/jenkins/common/home/.ssh #sudo chmod -R go-rwx /var/opt/jenkins/common/home/.ssh
Enfin, il faut modifier la configuration pour prendre en compte ce nouvel emplacement. Il est possible de le faire depuis l'interface d'administration ou en ligne de commande avec find
et sed
sur le contenu du fichier hudson.scm.CVSSCM.xml
.
#sudo sed -i 's/\/usr\/share\/tomcat8\/.ssh\//\/var\/opt\/jenkins\/common\/home\/.ssh\//g' /var/opt/jenkins/common/data/hudson.scm.CVSSCM.xml