Comment configurer Jenkins avec SSL derrière Nginx sur Ubuntu 20.04

Jenkins est un outil d’automatisation d’outils open source pour configurer l’ensemble du pipeline de livraison de logiciels – livraison continue. Cela permet aux développeurs de gérer et de contrôler les processus de livraison de logiciels tout au long du cycle de vie, notamment pour créer, tester et déployer leurs logiciels de manière fiable.

Jenkins a une communauté active, extensible et dynamique. Il est écrit en Java. Généralement, Jenkins s’exécute comme une application de servlet Java intégrée autonome. Il est également possible de s’exécuter dans des conteneurs de servlets Java tels que Apache Tomcat ou GlassFish.

Dans ce tutoriel, nous apprenons à configurer Jenkins avec SSL derrière Nginx au Ubuntu 20.04.

Conditions préalables

  • Un serveur Ubuntu 20.04
  • Un utilisateur avec sudo prestations
  • Au moins 1 Go de RAM
  • Oracle JDK 11 ou supérieur installé.

Étape 1 : Installez Jenkins sur Ubuntu

Le package Jenkins disponible dans le référentiel Ubuntu par défaut est probablement derrière la dernière version. Il est recommandé d’installer Jenkin à partir du package de maintenance projeté disponible dans le référentiel officiel.

Nous allons d’abord ajouter la clé du référentiel au système.

$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

Lors de la rédaction de ce guide, la procédure installera la version 2.303.3 de Jenkins

Ensuite, ajoutons le référentiel de packages au sources.list déposer:

$ sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

Nous devrions mettre à jour le cache du référentiel

$ sudo apt update

Vous pouvez maintenant installer Jenkins :

$ sudo apt install jenkins

Puis démarrez le service

$ sudo systemctl start jenkins

Configurons le service pour qu’il démarre automatiquement avec le serveur

$ sudo systemctl enable jenkins

Vous pouvez vérifier l’état du service

$ sudo systemctl status jenkins

Vous pouvez vérifier la version en consultant le fichier /var/lib/jenkins/config.xml

$ cat /var/lib/jenkins/config.xml

<?xml version='1.1' encoding='UTF-8'?>
<hudson>
<disabledAdministrativeMonitors/>
<version>2.303.3</version>
...
...
</hudson>

Étape 2 : Configuration de Nginx avec un certificat SSL

Maintenant que nous utiliserons Nginx pour proxy la communication, nous devrons d’abord l’installer

$ sudo apt install nginx

Vous devez maintenant copier le certificat dans le dossier à utiliser. Nous considérerons que vous possédez déjà votre certificat SSL.

Nous allons copier le certificat

$ sudo cp jenkins.domain.com.crt /etc/nginx/certs/jenkins.domain.com.crt

Copiez ensuite les clés

$ sudo cp jenkins.domain.com.key /etc/nginx/certs/jenkins.domain.com.key

Pour éviter tout conflit avec la configuration par défaut de Nginx, nous supprimerons la configuration par défaut du sites-enabled annuaire

sudo rm /etc/nginx/sites-enabled/default

Créons maintenant le fichier de configuration de Jenkins. Jenkins utilise normalement le port 8080 pour s’exécuter mais comme nous utilisons Nginx, il écoutera sur les ports 80 et 443, puis avec les informations de nom de domaine, il proxy la communication en interne sur le port 8080 pour Jenkins.

La configuration que nous allons définir forcera automatiquement toutes les requêtes HTTP vers HTTPS

$ sudo vim /etc/nginx/sites-available/jenkins.conf

upstream jenkins.domain.com {
server SERVER_IP:8080;
}
server {
server_name jenkins.domain.com;
listen 80 ;
access_log /var/log/nginx/jenkins.log;
return 301 https://$host$request_uri;
}
server {
server_name jenkins.domain.com;
listen 443 ssl http2 ;
access_log /var/log/nginx/jenkins.log;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/jenkins.domain.com.crt;
ssl_certificate_key /etc/nginx/certs/jenkins.domain.com.key;
add_header Strict-Transport-Security "max-age=31536000";
location / {
proxy_pass https://jenkins.domain.com;
}
}

En plus de la configuration Jenkins Nginx, nous avons ajouté certains des dérivés nginx requis. Vous pouvez utiliser et optimiser en fonction des besoins de votre serveur Web.

Créez maintenant une symbolique du fichier de configuration pour l’activer

$ sudo ln -s /etc/nginx/sites-available/jenkins.conf /etc/nginx/sites-enabled/jenkins.conf

Maintenant, démarrez le service Nginx

$ sudo systemctl start nginx

Puis activez-le au démarrage

$ sudo systemctl enable nginx

Vous pouvez maintenant tester votre configuration Nginx

$ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Redémarrez maintenant le service Nginx pour prendre en compte la configuration

$ sudo systemctl restart nginx

Ouvrez maintenant les ports 80 et 443 sur le pare-feu :

$ sudo ufw allow 80,443/tcp

Assurez-vous également d’ouvrir le port ssh avant d’activer UFW, sinon vous pourriez perdre votre connexion ssh en cas de problème.

$ sudo ufw allow 'OpenSSH'

Activez maintenant UFW si ce n’est pas encore fait

$ sudo ufw enable

Étape 3 : Accéder et configurer Jenkins

Ouvrez maintenant votre navigateur avec l’URL https://jenkins.domain.com et vous verrez alors la page de Jenkins vous demandant un mot de passe

Pour avoir le mot de passe, vous devez afficher le contenu du fichier qui est indiqué

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

88ba484d8cff4150a90683a07c89ea7c

Collez ensuite le mot de passe et passez à la page suivante. Vous aurez maintenant la page vous demandant d’installer les plugins par défaut ou de sélectionner ceux à installer. Dans notre cas, nous laisserons ceux par défaut

sélectionner les plugins à installer

Ensuite, vous verrez le processus d’installation

processus d'installation

Maintenant, vous devez créer le admin utilisateur.

Créer Jenkins admin utilisateur

Validez maintenant l’URL de Jenkins.

Vous pouvez maintenant commencer à utiliser votre Jenkins

Page d'accueil de Jenkins

Conclusion

Dans ce tutoriel, nous avons appris à configurer Jenkins avec SSL derrière Nginx sur Ubuntu 20.04. Vous pouvez commencer à configurer les tâches et les pipelines de votre processus CI/CD.