2. Copyright Ouhamza, All rights reserved
/moi
Développeur Java
@Ouhamza (partout)
2
Lhouceine OUHAMZA
3. Copyright Ouhamza, All rights reserved
Toute organisation ayant besoin de déployer des
applications rapidement et efficacement peut bénéficier
de ses fonctionnalités de base.
3
Introduction générale
6. Copyright Ouhamza, All rights reserved 6
Les differents environments
1-Your computer
2-Dummy database
3-preliminary testing
1-Similar to production
2-All testing happens here
3-Demo for client
1-Making a project live
2-Where users access
3-Is the most important.
4-You can't have any
mistakes here
Les trois principaux environnements sont: le développement, la recette et la production.
Development server Recette server Production server
10. Copyright Ouhamza, All rights reserved
❏ C’est une pratique n'est-elle pas un outil.
❏ Connexion au repositories distant.
❏ Faire un build (générer un package).
❏ Avoir un moyen de notification ( email )
Integration continue CI
10
12. Copyright Ouhamza, All rights reserved
❏ Réduire les risques
❏ Détection des bugs immediatement.
❏ Réduire la routine.
❏ Assurer le déploiement de code de source.
❏ Automatiser le processus de build.
❏ Plusieurs apps + versions + environnements + sans CI ==>
Trop de temps et d'efforts
Avantages : Integration continue CI
12
13. Copyright Ouhamza, All rights reserved 13
Quelques Outils
Pour l'intégration continue on a
choisi l’outil le plus populaire et
le plus répondus, Jenkins.
14. Copyright Ouhamza, All rights reserved
❏ Jenkins c’est outil d'intégration continue qui permet automatiser et
exécuter les tâches.
❏ Créer des pipelines d'intégration continue: build / run / test
❏ Basé sur Java / Open source / apparu en 2005
❏ Extensible ( plus de 1000 plugins )
❏ Quelle que soit la plateforme sur laquelle vous travaillez
❏ GUI : port 80 / CLI
❏ La documentation officielle: https://jenkins.io/doc
C’est quoi Jenkins ?
14
15. Copyright Ouhamza, All rights reserved 15
Qu'est-ce que Jenkins peut faire?
❏ Générer des rapports de test
❏ Intégration avec de nombreux systèmes de contrôle de version
différents (git, gitlab….)
❏ Poussez vers divers référentiels d'artefacts (Artifactory, archiva…)
❏ Déployer directement dans des environnements de production
ou de test
❏ Informer les parties prenantes de l'état de la build ( notification)
…et beaucoup plus
22. Copyright Ouhamza, All rights reserved
Vous aurez besoin de : Docker engine
$ sudo docker-compose up -d
$ sudo docker run -itd -p 1000:8080 jenkins/jenkins:lts
Installation jenkins dans docker
http://jenkins_server:1000/
Pour copier le mot de passe Administrateur:
$ sudo docker logs container_id
22
23. Copyright Ouhamza, All rights reserved
Installation jenkins hors docker
23
Pour Ubuntu, exécuter les commandes suivantes:
$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add
-
$ sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ >
/etc/apt/sources.list.d/jenkins.list'
$ sudo apt-get update
$ sudo apt-get install jenkins
NB: on peut aussi l’installer à travers un fichier war (java):
java -jar jenkins.war.
Vous aurez besoin de : Java 8 / 11
25. Copyright Ouhamza, All rights reserved
❏ Permet de gérer les rôles et users
❏ Affectation des tâches à un rôle
❏ Affectation d’un pattern de jobs à un rôle: java.*
Pligun : Role-based Authorization Strategy
25
26. Copyright Ouhamza, All rights reserved
Le premier Job
26
Pipeline est un type de job le plus utilisé,
c’est une chaîne d’actions à exécuter,
on peut basé sur le code groovy.
27. Copyright Ouhamza, All rights reserved
Déclencher un job
27
❏ À partir des commits de code source.
❏ Après la fin de compilation d’autres job.
❏ Planifié pour s'exécuter à l'heure spécifiée.
❏ Le build manuel.
28. Copyright Ouhamza, All rights reserved
Planification des jobs
● Toutes les minutes: * * * * *
● Toutes les 15 minutes: H/15 * * * *
● Tous les Lundi à 15h00: 00 15 * * 1
28
29. Copyright Ouhamza, All rights reserved
Pipeline
29
❏ Chaque commit
déclenche l'exécution du
pipeline.
❏ Des notifications sont
envoyés à l'équipe à
chaque étape.
❏ Minimiser le temps
d'exécution.
30. Copyright Ouhamza, All rights reserved
Deux types de pipeline ( scripté )
30
il est basé sur le script Groovy
comme langage spécifique au
domaine. Un ou plusieurs blocs
de nœuds effectuent le travail de
base tout au long du pipeline.
31. Copyright Ouhamza, All rights reserved
Deux types de pipeline ( déclaratif )
31
il fournit une syntaxe simple et
conviviale pour définir un pipeline sans
avoir besoin d'un script Groovy.
33. Copyright Ouhamza, All rights reserved
❏ On peut cloner un projet git:
https://github.com/ouhamzalhss/Jenkins-demo.git
Integration Git
33
34. Copyright Ouhamza, All rights reserved
Plugin: Git
Travail avec Plugin Git, un dépôt git privé nécessite de configurer
l’authentification au niveau jenkins.
34
35. Copyright Ouhamza, All rights reserved
❏ Sert à écouter en permanence l'état d’un dépôt git.
❏ Chaque nouveau commit : un job (build) qui va se lancer automatiquement.
Git et son trigger
35
36. Copyright Ouhamza, All rights reserved
❏ Sert à visualiser des jobs en cascade.
Plugin : Delivery pipeline
36
38. Copyright Ouhamza, All rights reserved
Parfois après chaque installation d’un plugin, Nous pouvons redémarrer
manuellement Jenkins en ajoutant restart, safeRestart comme paramètre
d'URL.
38
Redémarrer jenkins
$ sudo service jenkins restart
39. Copyright Ouhamza, All rights reserved
Pour créer une sauvegarde de vos jobs Jenkins et de votre configuration, installez
simplement le plugin ThinBackup. Ensuite, allez sur Gérer Jenkins -> lien
ThinBackup.
39
Plugin: ThinBackup
40. Copyright Ouhamza, All rights reserved
❏ Créer un projet maven
❏ Configurer Maven dans Jenkins.
❏ Cloner le projet à partir d’un dépôt distant
❏ Lancer le build
Builder un projet maven in jenkins
40
41. Copyright Ouhamza, All rights reserved
Jenkins nous permet de lancer un conteneur docker.
A condition: sudo usermod -aG docker jenkinsUser
On va créer un job pipeline basé ce script:
41
Docker: lancer un container
node {
docker.image('nginx:latest').withRun('-p 80:80') { c ->
sh 'docker ps'
sh 'curl localhost'
}
}
42. Copyright Ouhamza, All rights reserved
Après avoir vu comment lancer un conteneur docker, nous allons
découvrir comment créer une image docker à partir d'un build.
Pour cela nous allons créer un Dockerfile et un Jenkinsfile de
manière à fonctionner à partir d'un dépôt distant.
42
Dockerfile et jenkinsfile
43. Copyright Ouhamza, All rights reserved 43
Dockerfile et jenkinsfile
Dockerfile
Jenkinsfile
45. Copyright Ouhamza, All rights reserved 45
Master et slave
pipeline {
//agent any
agent none
stages {
stage('clone') {
agent { label 'machineSlave' } // cas d’agent none
steps { }
}
}
}
Exemple d’un pipeline :
46. Copyright Ouhamza, All rights reserved
Un exemple pratique
46
Nous allons compiler les différents cas d'usage de jenkins que nous avons vu
précédemment. C'est à dire :
❏ Clone via des dépôts git
❏ Build/test maven
❏ Construction d'une image docker
❏ Run d'une image docker
❏ Push d'une image avec un tag ( Registry )
❏ Déploiement via Ansible sur une machine distante.
48. CI nous aide à réaliser une réaction très tôt.
Les premières réactions nous permettent de trouver des bogues au
début de la phase de test, et de réduire l'écart de communication.
Conclusion
Copyright Ouhamza, All rights reserved 48
Livrer rapidement deployer rapidement. C’est à dire avoir un feedback rapide de la part de client
Devops c la suite d’agilité
L'intégration continue (CI) est une pratique qui gagne rapidement en popularité et fait partie intégrante du processus de développement logiciel. Il s'agit d'une pratique d'ingénierie logicielle où les modifications individuelles sont immédiatement testées et intégrées à un référentiel plus vaste. Il aide les développeurs à détecter les bogues de manière transparente à un stade précoce, car chaque enregistrement est vérifié par une génération automatisée. Il existe de nombreux serveurs CI disponibles dans l'industrie tels que Jenkins, Codeship, TravisCI, SemaphoreCI, CircleCI, Bamboo, Teamcity et plus, Jenkins étant l'un des plus populaires.
L'intégration continue est une pratique de développement qui oblige les développeurs à intégrer du code dans un référentiel partagé à intervalles réguliers. Ce concept était destiné à supprimer le problème de trouver une occurrence ultérieure de problèmes dans le cycle de vie de la génération. L'intégration continue nécessite que les développeurs aient des builds fréquents. La pratique courante est que chaque fois qu'une validation de code se produit, une génération doit être déclenchée.
Jenkins est une application puissante qui permet une intégration et une livraison continues des projets, quelle que soit la plateforme sur laquelle vous travaillez. C'est une source gratuite qui peut gérer tout type de build ou d'intégration continue. Vous pouvez intégrer Jenkins à un certain nombre de technologies de test et de déploiement. Dans ce didacticiel, nous expliquerons comment vous pouvez utiliser Jenkins pour créer et tester vos projets logiciels en continu.
The Build Monitor plugin provides a visualization of the status and progress of selected Jenkins jobs. It displays an updated view automatically every couple of seconds using AJAX.
The Build Monitor plugin provides a visualization of the status and progress of selected Jenkins jobs. It displays an updated view automatically every couple of seconds using AJAX.
The Build Monitor plugin provides a visualization of the status and progress of selected Jenkins jobs. It displays an updated view automatically every couple of seconds using AJAX.