CI/CD (Continuous Integration/ Continuous Deployment) est un concept central du monde DevOps. Il nous aide à automatiser les processus de développement logiciel : construction, test et déploiement des codes sources.
Parmi de nombreux outils CI/CD, Jenkins est l’un des outils open source les plus connus qui aident à configurer les pipelines pour l’intégration continue et le déploiement continu.
Ce tutoriel va vous montrer comment installer Jenkins sur un cluster Kubernetes.
Préparer un cluster Kubernetes
Il existe de nombreuses façons de configurer un cluster Kubernetes. Vous pouvez utiliser les services de cloud public pour provisionner votre propre cluster sur AWS, GCP, Linode, etc. En outre, le moyen le plus simple consiste à installer minikube sur votre machine locale.
Ici, j’ai un cluster Kubernetes avec 5 nœuds provisionnés à l’aide de kubespray.
$ kubectl get node
Installation de Jenkins
Tout d’abord, nous allons créer un nouvel espace de noms pour fournir le mécanisme d’isolation pour contrôler l’environnement CI :
$ kubectl create namespace jenkins
namespace/jenkins created
Vérifiez que l’espace de noms jenkins a été créé avec succès en exécutant la commande suivante :
$ kubectl get namespaces

Ensuite, créons le déploiement Jenkins. Vous pouvez utiliser le fichier manifeste suivant pour créer un déploiement d’instance unique de Jenkins.
Création du fichier `jenkins-deployment.yaml` :
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-deployment
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts
ports:
- name: http-port
containerPort: 8080
- name: jnlp-port
containerPort: 50000
volumeMounts:
- name: jenkins-vol
mountPath: /var/jenkins_vol
volumes:
- name: jenkins-vol
emptyDir: {}
Le déploiement à l’aide de l’image Docker `jenkins/jenkins:lts` et des ports d’exposition `8080` et `50000`.
Appliquez le manifeste ci-dessus :
$ kubectl create -f jenkins-deployment.yaml --namespace jenkins
Il faut quelques minutes pour extraire l’image jenkins/jenkins:lts et faire fonctionner le pod. Vérifier que le déploiement Jenkins a été déployé avec succès :
$ kubectl get pod -n jenkins
NAME READY STATUS RESTARTS AGE
jenkins-deployment-794699f9bc-rln7x 1/1 Running 0 66s
Déploiement du service Jenkins
Après avoir créé le déploiement Jenkins et que le pod Jenkins est en cours d’exécution, vous devez exposer la connexion au pod en cours d’exécution à l’aide d’un service. Dans ce tutoriel, nous utiliserons les services NodePort et ClusterIP.
Créons le fichier `jenkins-svc.yaml` comme suit :
apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
selector:
app: jenkins
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-jnlp
spec:
type: ClusterIP
ports:
- port: 50000
targetPort: 50000
selector:
app: jenkins
Maintenant, appliquez le manifeste ci-dessus et créez le service dans l’espace de noms « jenkins » :
$ kubectl create -f jenkins-svc.yaml --namespace jenkins
Vérifiez que le service est en cours d’exécution :
$ kubectl get svc --namespace jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins NodePort 10.233.2.81 8080:30000/TCP 30s
jenkins-jnlp ClusterIP 10.233.53.44 50000/TCP 30s
Désormais, nous pouvons accéder au tableau de bord Jenkins en utilisant le service NodePort.
Accéder au tableau de bord Jenkins
Le service NodePort est accessible à partir du port “30000” sur n’importe quel nœud de travail du cluster Kubernetes :
`https://worker_node_ip_address:30000`
Vous pouvez obtenir l’adresse IP des nœuds de travail à l’aide de la commande suivante :
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready master 149m v1.19.2 192.168.0.111 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node2 Ready master 148m v1.19.2 192.168.0.112 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node3 Ready master 148m v1.19.2 192.168.0.113 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node4 Ready 147m v1.19.2 192.168.0.114 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node5 Ready 147m v1.19.2 192.168.0.115 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
Pour example, ouvrons le navigateur Web et allons sur : `https://192.168.0.111:30000`

Afin de récupérer le mot de passe administrateur, vous pouvez exécuter la commande suivante :
$ kubectl logs jenkins-deployment-794699f9bc-rln7x --namespace jenkins

Enter le mot de passe administrateur puis suivez les étapes de configuration suivantes et vous accéderez avec succès au tableau de bord Jenkins.

Conclusion
Jenkins est un outil CI/CD vraiment puissant pour tout ingénieur DevOps et développeur de logiciels. Ce didacticiel a parcouru toutes les étapes du déploiement de Jenkins sur un cluster Kubernetes. Grâce à Jenkins, nous serons plus productifs et cela nous aide à réduire le temps de création, de test et de déploiement des codes.
Merci d’avoir lu et s’il vous plaît laissez votre suggestion dans la section commentaire ci-dessous.