Jenkins Déplacement instance

De EjnTricks
Révision de 10 septembre 2018 à 14:58 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

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>


Jenkins Runner.png 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.

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

Icon File Owner.png 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

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

Certificate Server icon.png 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