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
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
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
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 \
-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 \
-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
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
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 \
--name jenkinsci \
-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
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é:
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
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
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