Jenkins Déplacement instance

De EjnTricks

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.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png 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.


Folder-icon.png 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.


XML format icon.png 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&amp;apos;expression peut &amp;#234;tre simplifi&amp;#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.


Command-icon.png 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-icon.png 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>