# Intégration continue avec Jenkins et Docker : **Le but :** Construction d'un conteneur [Docker](https://eureka.univ-lehavre.fr/mod/assign/view.php?id=10912 "Docker") permettant de faire des tests en continu sur une application hébergée sur le Git local (l'université de Havre ). Tel que Jenkins doit être dans le conteneur et être relié à la Forge de l'université. ## C'est quoi Docker !? Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n'importe quel serveur ». Il ne s'agit pas de [virtualisation](https://fr.wikipedia.org/wiki/Virtualisation "Virtualisation"), mais de [conteneurisation](https://fr.wikipedia.org/wiki/Conteneurisation "Conteneurisation").une forme plus légère qui s'appuie sur certaines parties de la machine hôte pour son fonctionnement. ## C'est quoi Jenkins !? **Jenkins** est un outil d'[intégration continue](https://fr.wikipedia.org/wiki/Int%C3%A9gration_continue "Intégration continue") , il fonctionne dans un [conteneur de servlets](https://fr.wikipedia.org/wiki/Conteneur_de_servlets "Conteneur de servlets") tel qu’[Apache Tomcat](https://fr.wikipedia.org/wiki/Apache_Tomcat "Apache Tomcat"), ou en mode autonome avec son propre [serveur Web](https://fr.wikipedia.org/wiki/Serveur_Web "Serveur Web") embarqué. ## C'est quoi Docker-Compose !? Est un outil permettant de définir et d'exécuter des applications Docker à conteneurs multiples.Il utilise des fichiers YAML pour configurer les services de l'application et effectue le processus de création et de démarrage de tous les conteneurs avec une seule commande. **Étape 1: Installez jdk** Sur les distributions basées sur Debian, telles que Ubuntu, vous pouvez installer Jenkins via apt-get. Les versions récentes sont disponibles dans un référentiel apt. Des versions LTS anciennes, mais stables, se trouvent dans ce référentiel apt. Vous devez avoir un JDK et un JRE installés. Jenkins nécessite d'installer une liste de packages nécessaire a son fonctionnement on y trouve : Java on doit alors installez le package oracle-java8 pour définir automatiquement la variable JAVA env. En plus de jdk, On aura aussi besoin de wget , git et gnupg2 on utilisera alors la commandes suivantes pour tout installer : ``` RUN apt-get update RUN apt-get -y install wget gnupg2 default-jre openjdk-8-jdk apt-transport-https git ``` **Étape 2 : Installez Jenkins** La version de Jenkins incluse dans les packages Ubuntu par défaut est souvent en retard sur la dernière version disponible du projet lui-même. Afin de tirer parti des derniers correctifs et fonctionnalités, nous utiliserons les packages maintenus par le projet pour installer Jenkins. - Premièrement, .Récupérer la clé public **ssh** ``` wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add - ``` - Lorsque la clé est ajoutée, le système retournera OK. Ensuite, nous allons ajouter l’adresse du dépôt de paquets Debian a la fin du fichier sources.list du serveur: ``` echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list ``` - on fait une mise a jour de nos dépôts : ``` sudo apt-get update ``` - Enfin, nous installerons le package Jenkins : ``` sudo apt-get install jenkins ``` - on créer le package init.sh qui va permettre de lancer jenkins automatiquement a chaque démarrage du container ``` RUN echo '#!/bin/bash \nservice jenkins start \necho '-- Wait for key generation --' \nsleep 5 \ncat /var/lib/jenkins/secrets/initialAdminPassword \necho 'Unlock security and restart container whith -d' \ntail -f /dev/null' >> /init.sh RUN echo '#!/bin/bash \nservice jenkins start \ntail -f /dev/null' >> /init.sh ``` - il va exposer le port 8080 ``` EXPOSE 8080 ``` - La commande a exécuter a chaque appelle du container ``` ENTRYPOINT ["/bin/bash", "--", "/init.sh"] ``` - Autorisation d'accée au fichier **sh** ``` RUN chmod 777 /init.sh ``` ## Lancement de l'image Docker sur localhost ``` docker build -t test . ``` ``` docker run -p 8484:8080 test ``` - On se connectant sur localhost:8484 on pourra acceder a la page d'accueil de jenkins : ![mmm](/uploads/618baed19e542671dbaa0bdd80518c1a/mmm.png) ![img5](/uploads/4c4e8d9ae93c54ccbf8aa5369f272114/img5.png) ## Configuration de Jenkins aprés son lancement depuis l'image créé d'un Dockerfile : ### Création d'un projet sur GitLab : ![1er_img7](/uploads/299fd6bc3b56204a696c79bab3838591/1er_img7.png) ### Mettre en point un access token pour acceder au projet a travers Jenkins : ![img8](/uploads/cf652ca07d096fe9ebd44899fb67b7c3/img8.png) ### Configuration de Jenkins : - Création d'un compte : ![20](/uploads/9cee5260916372f49758c98de83f107e/20.png) - Installation du plugin GitLab : ![zzzzzzzzzzzzz](/uploads/ba23af27676fc0e87093375a11be85ce/zzzzzzzzzzzzz.png) - Configuration de GitLab sur jenkins en ajoutant le lien vers la forge et l'access token cree au paravant ![18](/uploads/a841fc90ecc54fb8280e4bd8778774af/18.png) - Création d'un nouveau projet sur jenkins ![16](/uploads/2e782cb79e24b835034c5e18a23b2eb1/16.png) - Specification du lien vers le projet a testé ![36](/uploads/8db3b0ac61fbe5171d68df8a3af5e8c4/36.png) - On aura notre projet a tester avec build now : ![23](/uploads/0269e040b8897b9a4a6f68ae387df9e6/23.png) - Voici quelque test effectue sur le projet ![img3](/uploads/8c5a5ecc2209131aaad6a63237b10b3c/img3.png) ![img2](/uploads/b449871bd857947beea6c95d93a82809/img2.png) ### Auteurs : - [x] Benchekroun Kbichou Aymen - [x] Bouhadad Lydia - [x] Debbouz Manal - [x] Raiah Narimane