Jenkins docker installation sous Linux Mint

By | 27 November 2018 |
Reading Time: 4 minutes

Ce post traître de l’installation de Jenkins avec l’interface BlueOcean en utilisant une image docker sous Linux Mint.
La même procédure devrait s’appliquer à Ubuntu, Debian, Elementary OS.

Prérequis

Pour pouvoir installer une image docker, vous devez, comme vous pouvez vous y attendre avoir au préalable installé docker sur votre ordinateur.
Vous pouvez le vérifier avec la commande suivante dans votre terminal:

$docker -v
check docker version with docker -v command

Le “ce” signifie “Community Edition”, il existe également une version “ee” Enterprise Edition. Vous pouvez vérifier la dernière version et lire les releases notes en suivant ce lien

Si docker n’est pas installé sur votre Linux préféré, je vous invite à lire ce post afin de corriger cela.
Il faut également que le service “docker” soit en fonctionnement, ce que vous pouvez vérifier avec la commande:

$sudo service docker status
check docker service status

Téléchargement de l’image docker

Sur le docker hub, il y a plusieurs images disponibles pour Jenkins, mais nous nous intéressons à l’image Jenkins/BlueOcean car cette image 

  • est l’image recommandée dans la documentation
  • contient déjà le plugin BlueOcean et facilite donc l’installation.
  • est une LTS (Long Term Support) of Jenkins qui est donc prête pour être utilisée sur un système de production.

Le téléchargement se fait avec la commande suivante:

$docker pull jenkinsci/blueocean
 docker pull image jenkinsci/blueocean

Arrêter le service Jenkins

Si vous aviez déjà installé Jenkins sur votre système de la façon traditionnelle, il est fort possible que le service Jenkins soit déjà en fonctionnement, je vous conseille donc de vérifier et d’arrêter le service le cas échéant avec les commandes suivantes:

$sudo service jenkins status
$sudo service jenkins stop

Démarrage de l’image docker

Pour démarrer votre image docker, selon la documentation, il vous faut lancer la commande suivante:

$docker run \
  -u root \
  --rm \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

Si comme moi, vous tourniez déjà Jenkins sur votre ordinateur, il y a des chances que vous ayez déjà créé quelques jobs que vous aimeriez retrouvez dans votre instance de Jenkins tournant grâce à l’image docker.
Si c’est le cas et que vous utilisiez le path par défaut (/var/lib/jenkins), vous pouvez modifier la commande comme ceci:

$docker run \
  -u root \
  --rm \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /var/lib/jenkins:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

Après cette commande, vous pouvez ouvrir votre browser avec l’adresse http://localhost:8080 

Comment obtenir ce mot de passe?

Le mot de passe est écrit dans le log, vous avez différentes options pour accéder le log mais pour celà, vous devez connaître l’ID de votre container ou le nom de celui-ci, ce que vous pouvez obtenir avec la commande:

$docker ps
docker ps

Sur l’image, on trouve que 

  • l’ID est ecf7542f5e9b
  • le nom est peaceful_ardinghelli

Vous pouvez lire le log de votre image docker avec la commande “docker logs <id>

$docker logs ecf7542f5e9b

et/ou docker logs <name>

$docker logs peaceful_ardinghelli
Jenkins mot de passe docker installation

Vous pouvez également lorsque vous lancer votre docker spécifier le nom avec le paramètre:

--name jenkinsci

la commande “run” devient donc

$docker run \
  -u root \
  --rm \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /var/lib/jenkins:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --name jenkinsci \
  jenkinsci/blueocean

Ce qui rend plus aisé l’accès à ce container et donc égualement la lecture des logs, comme on connait le nom (jenkinsci), la commande devient:

$docker logs jenkinsci

Jenkins installation

Il vous suffit ensuite de suivre les étapes du “wizard” de l’installation.
Ceci ne devrait s’appliquer que si c’est une installation fraîche de Jenkins.

Et vous pouvez finalement vous connecter

Problème Jenkins home

Ok jenkins est installé mais je n’ai pas récupéré mes jobs..
Ce à quoi j’aurais pû m’attendre quand le wizard m’a demandé le mot de passe et de réinstaller les plugins.
Il semblerait que les deux installation (traditionelles et docker) soit considérées comme indépendante bien que je lui ai passé le paramètre avec la localisation de $JENKINS_HOME.
Si je regarde de plus près, j’ai deux répertoires “/var/lib/jenkins“, celui utilisé par mon installation classique et celui utilisé par docker..

La commande suivante me permet de voir la différence entre ces deux répertoires:

$cd /var/lib
$printf "%s\n" * | cat -vte | grep jenkins

Docker semble donc ajouter quelques caractères au répertoire.
Après analyse, il semble que les caractères spéciaux se soient “incrustés” lorsque j’ai remplacé “jenkins-data”  par “/var/lib/jenkins”, si je copie le contenu dans vi, je vois le “string” <feff> qui s’est incrusté:

Jenkins installation – docker cmd in vi

Après suppression des caractères spéciaux et redémarrage du docker avec la commande nettoyée, je retrouve bien mes jobs dans jenkins.

Peaufinage de l’installation

Host file

Ajouter une entrée dans votre host file, vous permet d’accéder plus facilement à Jenkins

$sudo nano /etc/hosts
Mise à jour du fichier hosts

En ajoutant par exemple la ligne 

127.0.0.1    jenkins.loc

Ce qui permet d’accéder à jenkins avec l’adresse http://jenkins.loc:8080

Virtual Host

Vous pouvez également ajouter un virtual host(VHOST) à votre serveur web, le but étant de rediriger le traffic du port 80 (http) vers le port utilisé par Jenkins et notre docker (8080).
On accédera donc à jenkins via l’adresse http://jenkins.loc

$nano /etc/apache2/sites-availables/jenkins.conf
Mise à jour Virtual Host

Insérez le texte suivant

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName jenkins.loc
    ErrorLog ${APACHE_LOG_DIR}/jenkins_error.log
    CustomLog ${APACHE_LOG_DIR}/jenkins_access.log combined

    <Location />
        Order allow,deny
        Allow from All
        Require all granted
    </Location>

    <Proxy *>
        Allow from localhost
    </Proxy>
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

</VirtualHost>

Activer le vhost avec la commande:

$sudo a2ensite jenkins.conf

Activer le proxy

$sudo a2enmod proxy_http

Vérifier votre configuration avec la commande

$sudo apachectl configtest

Si tout va bien, vous pouvez rafraîchir la configuration d’apache

$service apache2 reload

Il ne reste plus qu’à vérifier que vous accédez à jenkins via l’addresse http://jenkins.loc

Welcome to Jenkins

Laisser un commentaire

This site uses Akismet to reduce spam. Learn how your comment data is processed.