Emplacement Home Jenkins
Jenkins
utilise un répertoire de travail pour stocker l'ensemble des configurations et fichiers liés à l'instance. Par défaut, ce répertoire se situe dans le répertoire .jenkins
dans le répertoire d'exécution.
Cet article présente une façon de paramétrer l'emplacement pour une installation sous Ubuntu
et Tomcat
.
Votre avis
Nobody voted on this yet
|
|
Analyse
Lors de la montée de version 17.10 Ubuntu, l'instance de Jenkins
ne démarrait plus avec le message d'erreur suivant.
Unable to create the home directory ‘/var/lib/tomcat8/.jenkins’. This is most likely a permission problem. To change the home directory, use JENKINS_HOME environment variable or set the JENKINS_HOME system property. See Container-specific documentation for more details of how to do this.
Des modifications sur les variables d'environnement de Tomcat
ont été réalisées, changeant l'emplacement d'exécution de Tomcat
. Il a donc été nécessaire de modifier l'emplacement dans le script setenv.sh
de Tomcat
, comme décrit ici.
Déclaration emplacement
Afin de spécifier l'emplacement, il suffit de positionner la variable d'environnement JENKINS_HOME
en modifiant le script ainsi.
#!/bin/sh
export CATALINA_OPTS="-Xms256m -Xmx512m"
export MAVEN_OPTS="-Xmx512m"
export JAVA_OPTS="$JAVA_OPTS -DJENKINS_HOME=$CATALINA_HOME/.jenkins"
A noter l'utilisation de la variable CATALINA_HOME
qui correspond à /usr/share/tomcat8
.
Mise jour Ubuntu 17.10
Suite à la mise à jour de Ubuntu 17.10, les variables d'environnement CATALINA_BASE
et CATALINA_HOME
ont été mises à jour. Cela a eu pour impact une modification de l'emplacement home
de Jenkins
, passant de /usr/share/tomcat8/.jenkins
vers /var/lib/tomcat8/.jenkins
.
Un premier essai a consisté à modifier l'emplacement du home
en positionnant la variable d'environnement JENKINS_HOME
dans le script de démarrage de Tomcat, pour conserver le précédent emplacement, soit /usr/share/tomcat8/.jenkins
.
Mais certains plugins ne semblent pas utiliser correctement cette configuration, comme l'ateste la trace suivante.
[workspace] $ java -Dcobertura.report.format=xml -cp /usr/share/tomcat8/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven33-agent-1.12-alpha-1.jar: /var/opt/maven/boot/plexus-classworlds-2.5.2.jar:/var/opt/maven/conf/logging jenkins.maven3.agent.Maven33Main /var/opt/maven /var/lib/tomcat8/webapps/jenkins/WEB-INF/lib/remoting-3.13.jar /usr/share/tomcat8/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven33-interceptor-1.12-alpha-1.jar /usr/share/tomcat8/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.12-alpha-1.jar 45235 Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at jenkins.maven3.agent.Maven33Main.main(Maven33Main.java:135) at jenkins.maven3.agent.Maven33Main.main(Maven33Main.java:64) Caused by: java.io.IOException: Failed to initialize the default JAR Cache location at hudson.remoting.JarCache.getDefault(JarCache.java:41) at hudson.remoting.ChannelBuilder.withJarCacheOrDefault(ChannelBuilder.java:216) at hudson.remoting.Launcher.main(Launcher.java:735) at hudson.remoting.Launcher.main(Launcher.java:723) at hudson.remoting.Launcher.main(Launcher.java:714) at hudson.remoting.Launcher.main(Launcher.java:710) ... 6 more Caused by: java.lang.IllegalArgumentException: Root directory not writable: /var/lib/tomcat8/.jenkins/cache/jars at hudson.remoting.FileSystemJarCache.<init>(FileSystemJarCache.java:58) at hudson.remoting.JarCache.getDefault(JarCache.java:39) ... 11 more Caused by: java.nio.file.AccessDeniedException: /var/lib/tomcat8/.jenkins at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384) at java.nio.file.Files.createDirectory(Files.java:674) at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781) at java.nio.file.Files.createDirectories(Files.java:767) at hudson.remoting.Util.mkdirs(Util.java:231) at hudson.remoting.FileSystemJarCache.<init>(FileSystemJarCache.java:56) ... 12 more
Pour y palier, un lien a été mis en place sous /var/lib/tomcat8
.
#sudo ln -s /usr/share/tomcat8/.jenkins /var/lib/tomcat8/.jenkins #sudo chown -h tomcat8:tomcat8 /var/lib/tomcat8/.jenkins
Une seconde solution serait de déplacer le répertoire .jenkins
vers /var/lib/tomcat
afin de respecter les attentes.
Cependant, les emplacements sont parfois mis en dur dans les fichiers de configuration, comme indiqué lors de l'étude du déplacement d'instance.
Dans un premier temps, le répertoire est copié, permettant d'avoir une sauvegarde, vers la cible. A noter la suppression préalable, car un lien avait été mis en place sur l'ancien emplacement.
#sudo rm /var/lib/tomcat8/.jenkins #sudo cp -pR /usr/share/tomcat8/.jenkins /var/lib/tomcat8/.jenkins
Puis la variable d'environnement JENKINS_HOME
est modifiée dans le script setenv.sh
de Tomcat
.
#!/bin/sh
export CATALINA_OPTS="-Xms256m -Xmx512m"
export MAVEN_OPTS="-Xmx512m"
export JAVA_OPTS="$JAVA_OPTS -DJENKINS_HOME=$CATALINA_BASE/.jenkins"
Enfin, il faut mettre à jour les différents fichiers de paramétrage, de l'instance ou des jobs, pour spécifier le nouvel emplacement. Pour cela, les commandes find et sed seront combinées.
#sudo find /var/lib/tomcat8/.jenkins/ -name '*.xml' -exec sed -i 's/\/usr\/share\/tomcat8\/.jenkins/\/var\/lib\/tomcat8\/.jenkins/g' {} \;