SlideShare une entreprise Scribd logo
Int´egration continue
Groupe CNRS Calcul / Johan.Moreau - at - gmail.com|ircad.fr
Johan Moreau
IRCAD/IHU
29 mai 2017
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 1 / 127
Introduction
Plan
1 Introduction
Situation
M´ethodes
Comment am´eliorer cela ?
2 Docker
3 Outils Docker
4 Jenkins
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 2 / 127
Introduction Situation
Situation
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 3 / 127
Introduction Situation
La situation - chez tout le monde ?
Les difficult´es :
Augmentations des besoins num´eriques (donc des services)
Fr´equence de mises `a disposition ultra rapide
Inteconnexions plus fortes entre les services
Difficult´es de maintenir la documentation d’exploitation
Multiples environnements (dev, tests, production, ...)
Cas complexes des clusters, de la HA, des workflow de dev, ...
R´eponses partielles :
Agilit´e : meilleure production
DevOps : meilleure exploitation
Nouveaux outils li´es `a ces tendances
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 4 / 127
Introduction M´ethodes
M´ethodes
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 5 / 127
Introduction M´ethodes
Quelles r´eponses des communaut´es ?
Les principes de l’agilit´e :
Cycle en V trop long, cycle rapide 1
Livraisons tr`es r´eguli`eres pour retour clients
Proximit´e du client pour une meilleure communication
Mode ´equipe, le code est `a tout le monde, gestion des absences
Beaucoup d’autres principes :
gestion du code, construction simple, ...
M´ethodologies : Scrum 2, XP, ...
Outils : DVCS, int´egration continue, ...
Simple sur le papier, long `a mettre en place ...
1
http://eureka.sbs.ox.ac.uk/897/1/WP_2011_08_15.pdf
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 6 / 127
Introduction M´ethodes
DevOps
Les principes du DevOps :
Les exploitants ont des conditons diff´erentes des d´eveloppeurs, les
faire travailler ensemble
Mises en exploitation tr`es r´eguli`eres et rapides 3 4
Tr`es pr´esent chez les leaders :
Amazon - toutes les 11,6s 5
,
Etsy - 30fois/j 6
,
...
M´ethodologies : Kanban, ...
Outils : VM, conteneurs, gestion de configuration, ...
Etape complexe : bon alignement Devs et Ops, + agilit´e cˆot´e Devs !
3
https://puppetlabs.com/wp-content/uploads/2013/03/2013-state-of-devops-report.pdf
4
http://pages.zeroturnaround.com/RebelLabs-AllReportLanders_DevopsProductivityReport.html
5
http://assets.en.oreilly.com/1/event/60/Velocity%20Culture%20Presentation.pdf
6
https://codeascraft.com/2012/03/13/making-it-virtually-easy-to-deploy-on-day-one/
Image from https://3ovyg21t17l11k49tk1oma21-wpengine.netdna-ssl.com/wp-content/uploads/2014/03/
bart-simpson-generator-1.jpg
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 7 / 127
Introduction M´ethodes
Contextes compl´ementaires
Microservices 8 :
Minimisation d’une application afin de gagner en maintenabilit´e
D´efinition d’un service la plus claire possible
Principe ancien (Minix vs Linux 9 ) mais plus de sens avec REST
Impose un design/r´eflexion tr`es particulier
Infrastructure d´efinie par le logiciel (SDI ou Infra-as-Code) 10 :
Pour gagner en productivit´e, automatisation d’infrastructures
complexes (service, stockage, r´eseau, s´ecurit´e, ...)
Outils et API de plus en plus pr´esentes
TDI : Test-Driven-Infrastructure (suite du TDD)
Projet transversal imposant des connaissances larges
8
http://en.wikipedia.org/wiki/Microservices
9
http://en.wikipedia.org/wiki/Tanenbaum-Torvalds_debate
10
http://en.wikipedia.org/wiki/Software_Defined_Infrastructure
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 8 / 127
Introduction M´ethodes
Gestion de sources et artefacts
DVCS, un ´el´ement cl´e dans la r´eflexion :
Manipulation de fichiers ’texte’, donc gestion r´ealiste possible
Fichiers l´egers pouvant utiliser les fonctions des DVCS (branches,
staging, ..)
Bonnes pratiques compatibles (tout en texte, tout est suivi, ...)
Int´egration continue dans les 2 mondes (devops) et entre les outils
Des art´efacts int´eressants :
Versions journali`eres(”nightly build”)
D´eploiements automatiques/continus
G´en´eration automatique de l’historique (release notes), etc ...
Les leaders :
git, mercurial, subversion, ...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 9 / 127
Introduction M´ethodes
Les forges sont bien pratiques
Rien de bien nouveau :
En mode public :
Sourceforge, Savannah, ...
En mode h´eberg´e :
Trac, Redmine, ...
H´ebergement des d´epˆots, de quelques artefacts, forums, ...
Et pourtant, une nouvelle vague :
En mode public :
GitHub, GitLab, ...
En mode h´eberg´e :
GitLab, Rhodecode, ...
R´eseau social, discussion autours des probl`emes, PR/MR, ...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 10 / 127
Introduction M´ethodes
Int´egration continue 14
D´efinition :
Ensemble de pratiques v´erifiant de mani`ere automatique et r´eguli`ere
que chaque modification de code n’engendre pas de r´egression
Pour v´erifier, on utilise la phase de ”construction”:
Compiler le code (standard, rapide, ...),
Lancer les tests unitaires,
Analyser le code, G´en´erer des rapports, ...,
G´en´erer un ex´ecutable ou une archive
Les leaders :
Jenkins, Travis-ci, Gitlab-ci, ...
Plus un bug est d´ecouvert tˆot, moins d’impact aura sa correction 12
Maintenir un build op´erationnel n’est pas facile ! 13
Image from http://vichargrave.com/wp-content/uploads/2013/02/Hadoop-Development.png
12
http://martinfowler.com/articles/continuousIntegration.html
13
http://static.googleusercontent.com/media/research.google.com/de//pubs/archive/42184.pdf
14
http://fr.wikipedia.org/wiki/Int%C3%A9gration_continueJohan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 11 / 127
Introduction Comment am´eliorer cela ?
Comment am´eliorer cela ?
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 12 / 127
Introduction Comment am´eliorer cela ?
La reproductibilit´e est le nerf de la guerre
Quelles difficult´es avec l’int´egration continue :
Se battre pour faire passer le 1er job est motivant, apr`es ...
Dans un baremetal ou une VM, il y a des ´evolutions possibles, qui
doit faire le boulot ?
Comment tester l’´evolution de l’esclave jenkins ?
G´erer la combinatoire croissante de la matrice des jobs !
Principes de l’infrastruture d´efinie par le code et de l’infrastructure
reproductible - mˆeme approche que la recherche reproductible 15
Les conteneurs applicatifs (type Docker) peuvent aider pour cela
15
http://www.sciencemag.org/content/334/6060/1226
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 13 / 127
Docker
Plan
1 Introduction
2 Docker
Un conteneur : kezako ?
Docker, la petite histoire
Les commandes de bases
Les images
La persistance des donn´ees
Le r´eseau
La s´ecurit´e
Des exemples
3 Outils Docker
4 Jenkins
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 14 / 127
Docker Un conteneur : kezako ?
Un conteneur : kezako ?
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 15 / 127
Docker Un conteneur : kezako ?
Un conteneur (jolie m´etaphore), c’est quoi ?
Les mˆemes id´ees que la virtualisation, mais sans virtualisation :
Agnostique sur le contenu et le transporteur
Isolation et automatisation
Principe d’infrastructure consistante et r´ep´etable
Peu d’overhead par rapport `a une VM ! 16
En gros, un super chroot (ou un jails BSD plus
sympa) : Un des points forts de Solaris depuis plusieurs
ann´ees. Techno existante aussi chez Google depuis
longtemps. Rien de neuf, mais pourtant ...
Certains parlent de virtualisation ”niveau OS”ou
”l´eg`ere”, isolation applicative
16
http://fr.slideshare.net/BodenRussell/kvm-and-docker-lxc-benchmarking-with-openstack
Image from https://msopentech.com/wp-content/uploads/DockerUbuntu.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 16 / 127
Docker Un conteneur : kezako ?
Diff´erences entre VM et conteneur
Image from http://uploads.lightcode.fr/articles/33-conteneurs-linux/conteneurs-vs-vms.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 17 / 127
Docker Un conteneur : kezako ?
Liaison avec le noyau Linux 20
et autres OS
Une belle ´evolution de Linux :
Mount namespace (Linux 2.4.19)
PID namespace (Linux 2.6.24) - x PID/process
Net namespace (Linux 2.6.19-2.6.24)
User namespace (Linux 2.6.23-3.8)
IPC namespace (Linux 2.6.19-2.6.30)
UTS namespace (Linux 2.6.19) - host et domain
cgroups : g´erer la limitation de ressource
AUFS/BTRFS : FS/couche, mode union, copy on write
En gros, les ´el´ements noyaux sont en place depuis Linux 3.8
Mais natif depuis 2016 sur OSX et Windows
Image from https://cdn-images-1.medium.com/max/1600/1*TXashznqPJG_9iNPar9a7w.png
20
https://github.com/sdouche/presentation-docker/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 18 / 127
Docker Docker, la petite histoire
Docker, la petite histoire
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 19 / 127
Docker Docker, la petite histoire
De dotcloud `a docker
La petite histoire :
DotCloud 21 ´equivalent FR `a Heroku (PAAS)
Construit sur LXC et AUFS + dev. kernel linux
Pas mal de soucis sur la gestion des conteneurs
D´eveloppement interne d’un d´emon en python
Docker - vers la simplification :
Projet jeune en Golang 23 : 1er commit le 18/01/2013
Dans le top15 sur GitHub (approche les 800 contributeurs) en 2015
21 millions de t´el´echargement fin 2014
Linux 64bits avec LXC/libcontainer 24
21
http://fr.slideshare.net/jpetazzo/introduction-to-docker-december-2014-tour-de-france-bordeaux-special-ed
Image from https://www.docker.com/sites/default/files/Whale%20Logo332%402x_5.png
23
http://linuxfr.org/news/la-folie-docker
24
https://www.flockport.com/lxc-vs-docker/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 20 / 127
Docker Docker, la petite histoire
En fait docker, c’´etait pour rire, bienvenu `a Moby
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 21 / 127
Docker Docker, la petite histoire
Docker
Terminologie :
client/server : outil utilisant l’API du serveur/Daemon
index : r´epertoire public (https ://index.docker.io/)
image : conteneur en lecture seule (couches = snapshot)
conteneur : ´element manipulable
Analogie avec le d´eveloppement objet :
Images ´equivalentes aux classes
Les couches sont ´equivalentes `a l’h´eritage
Les conteneurs sont des instances
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 22 / 127
Docker Docker, la petite histoire
Docker
Les points forts :
Installation simple (Linux, OSX, Windows) 27
Ligne de commande tr`es sympathique
(docker help)
Langage de description des images (avec
notion de parent)
Communaut´e tr`es active (trop ?)
API pour pilotage, ´ecosyst`eme jeune mais
d´ej`a ´enorme :
Gui 28
, Orchestration, h´ebergement cloud,
int´egration continue, OS, ...
27
http://docs.docker.com/installation/
28
http://linuxfr.org/news/logiciels-pour-survivre-avec-docker
Image from http://pre12.deviantart.net/9476/th/pre/i/2015/253/c/7/octopus_docker_bloglaurel_by_
bloglaurel-d99468m.jpg
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 23 / 127
Docker Docker, la petite histoire
Evidement, il faut vivre : CE vs EE 31
Image from https://i1.wp.com/blog.docker.com/wp-content/uploads/ee.png
31
RBAC LDAP/AD, gestion des images avanc´ees, scan d’images, etc ...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 24 / 127
Docker Docker, la petite histoire
Version en MM.YY
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 25 / 127
Docker Les commandes de bases
Les commandes de bases
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 26 / 127
Docker Les commandes de bases
Docker 101 32
A l’ancienne :
$ docker run −i −t ubuntu /bin/bash
run : on veut lancer le conteneur
-i -t : on veut un terminal et ˆetre interactif avec lui
ubuntu : l’image `a utiliser pour ce conteneur
/bin/bash : on lance bash
$ sudo docker run −i −t ubuntu /bin/bash
root@0bc82356b52d9:/# cat /etc/issue
Ubuntu 14.04.2 LTS
root@0bc82356b52d9:/# exit
Depuis les derni`eres version de Docker :
docker container run hello −world
32
Les images de base sont tr`es l´eg`eres pas de ifconfig (net-tools)/ping(iputils-ping)
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 27 / 127
Docker Les commandes de bases
D´emarrage d’un conteneur
En quoi consiste le d´emarrage du container :
Recherche de l’image -> Si l’image n’existe pas en local, alors
t´el´echargement via le hub. Construction du syst`eme de fichiers au
sens Linux
D´emarrage du container
Configuration de l’adresse IP du container -> Ainsi que de la
communication entre l’ext´erieur et le container
Capture des messages entr´ees-sorties
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 28 / 127
Docker Les commandes de bases
1 seul processus
Phylosophiquement, n’ex´ecute qu’un seul processus `a la fois
un container=une application (ou processus)
pas d’ex´ecution de daemons, de services, ssh, etc.
mˆeme le processus init n’existe pas
sinon l’utilisation des outils particuliers tels que supervisord, forever, ...
docker top mycontainer
docker inspect −−format {{.State.Pid}} ‘docker ps −q‘
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 29 / 127
Docker Les commandes de bases
Docker in the shell 33 34 35
Les principales commandes :
Code Listing 1 – les commandes docker utiles
sudo /usr/bin/docker −d & # run the daemon
sudo docker search ubuntu # give ubuntu images from public index ( official /trusted)
sudo docker pull stackbrew/ubuntu # pull latest stackbrew/ubuntu images
sudo docker history stackbrew/ubuntu # view history for this images
sudo docker images # show local images
sudo docker run −i −t stackbrew/ubuntu /bin/bash # run this images / create container
sudo docker run −t −i −link redis :db −name webapp ubuntu bash # link 2 containers
sudo docker ps # show active containers (−a to show all containers )
sudo docker logs myUbuntu
sudo docker attach myUbuntu # retake the hand on the container
sudo docker run −d −p 8888:80 ubuntu # export 8888 on master
sudo docker stop # SIGTERM suivi d’un SIGKILL
sudo docker kill # SIGKILL directement
sudo docker system df # Show docker disk usage
sudo docker system prune # Remove unused data
33
http://ippon.developpez.com/tutoriels/virtualisation/docker-presentation-part-1/
34
http://ippon.developpez.com/tutoriels/virtualisation/docker-presentation-part-2/
35
http://sametmax.com/le-deploiement-par-conteneurs-avec-docker/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 30 / 127
Docker Les images
Les images
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 31 / 127
Docker Les images
Cr´eation d’images Docker 36
Diff´erente m´ethode en ligne de commande :
import : charge une archive de fichiers, comme couche de base
commit : cr´ee une nouvelle couche(+ image) depuis un conteneur
build : script de suite de commandes de cr´eation automatis´ee d’image
Description et construction :
Code Listing 2 – Dockerfile
FROM debian:wheezy
ADD README.md /tmp/
Code Listing 3 – Ex´ecution d’un build Docker
$ docker build −q −t readme .
Sending build context to Docker daemon 3.584 kB
Sending build context to Docker daemon
Step 0 : FROM debian:wheezy
−−−> e8d37d9e3476
Step 1 : ADD README.md /tmp/
−−−> 09eabce38f39
Removing intermediate container 3e44a3b6eabe
Successfully built 09eabce38f39
36
http://www.centurylinklabs.com/more-docker-image-cache-tips
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 32 / 127
Docker Les images
Couches d’une image Docker
Performance (*5)
R´eutilisabilit´e
Lecture seule donc :
diff et versioning
Image from https://raw.githubusercontent.com/radiomix/poc-docker-jenkins/master/img/
docker-filesystems-multilayer.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 33 / 127
Docker Les images
Instructions (DSL) du Dockerfile
Les instructions sont peu nombreuses : FROM, RUN, CMD, LABEL,
MAINTAINER, EXPOSE, ENV, ADD, COPY, ENTRYPOINT 38,
VOLUME, USER, WORKDIR, ARG, ONBUILD, STOPSIGNAL,
HEALTHCHECK, SHELL
Pour chaque instruction RUN, un conteneur temporaire (8xxxxxxxx)
est cr´e´e depuis l’image de base.
La commande RUN est ex´ecut´ee dans ce conteneur,
Le conteneur est commit´e en une image interm´ediare (7yyyyyyyy),
Le conteneur interm´ediare (8xxxxxxxx) est supprim´e, Le r´esultat,
l’image interm´ediaire, servira d’image de base pour l’´etape suivante,
etc..
38
commande de base != de CMD, commande par d´efaut
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 34 / 127
Docker Les images
Exercice : Cr´eez un conteneur ping avec argument
En partant de l’image alpine
Cr´eez un Dockefile appelant ping et prenant en paramˆetre du conteneur le
host
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 35 / 127
Docker Les images
Exercice
Code Listing 4 – Dockefile pour ping
FROM alpine
ENTRYPOINT [”ping”]
CMD [”localhost”]
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 36 / 127
Docker Les images
Multi-stage build 39 40
Etre capable d’avoir plusieurs FROM dans un Dockerfile
R´ecup´erer des artefacts issus des ”stages”pr´ec´edents les ni`emes FROM
L’int´erˆet r´eside dans la r´eduction du point d’une image
Cela est utile pour des artefacts ”construits”dans dans des stages de
l’image (ou pour r´eduire des installations trop lourdes)
Code Listing 5 – Dockerfile go multistage
FROM golang:1.7.3
COPY app.go .
RUN go build −o app app.go
FROM scratch
COPY −−from=0 /go/app .
CMD [”./app”]
39
https://stefanscherer.github.io/use-multi-stage-builds-for-smaller-windows-images
40
Pr´esent que sur les derni`eres versions, sinon voir Builder Pattern avec un shell script
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 37 / 127
Docker La persistance des donn´ees
La persistance des donn´ees
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 38 / 127
Docker La persistance des donn´ees
Volume
Outrepasser le syst`eme de COW (copy-on-write) pour profiter des
performances natives d’I/O disques,
Pour partager des fichiers/dossiers entre conteneurs ou hˆote vers
conteneurs
Utilisation du -v (–volume)
Utilisation du –volumes-from
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 39 / 127
Docker Le r´eseau
Le r´eseau
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 40 / 127
Docker Le r´eseau
Network - au d´emarrage
Au d´emarrage du daemon docker :
cr´eation du bridge ”docker0 ”
une adresse IP priv´e ainsi qu’une adresse MAC sont assign´ees au
bridge
configuration des tables de routage (route et iptables)
Toute cr´eation de container entraˆıne la cr´eation de deux paires
d’interfaces :
une dans le container : eth*
une autre dans la machine hˆote : veth*
toutes les deux reli´ees au bridge et fonctionne comme un pipe
g´en´eration d’une adresse IP ainsi qu’une adresse MAC pour le
container
configuration de la route par d´efaut dans le container
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 41 / 127
Docker Le r´eseau
Network
Publication des ports internes :
–publish-all
-p x :y
Liens entre conteneurs (deprecated) :
docker run −d −−name mydb mysql
docker run −d −−name myphp −−link mydb:mysql php
docker run −d −−link myphp:php −p 80:80 my−nginx−img
Isolation des r´eseaux conteneurs :
docker network create −−driver overlay −−subnet 10.0.9.0/24 −−opt encrypted myApp1
docker run −d −−network myApp1 −−name mydb mysql
Autre strat´egie les reverse-proxy : HAProxy, traefik, ...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 42 / 127
Docker Le r´eseau
Exercice : Acc´edez `a votre application en r´eseau
En utilisant l’image php :7.0-apache
Afficher l’index.php contenant :
< ?php echo ”Hello tout le monde”; ?>
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 43 / 127
Docker Le r´eseau
Exercice
Code Listing 6 – Lancer un conteneur Php avec un montage
#!/bin/bash
docker run −d −P −−name my−apache−php−app 
−v ”$PWD”:/var/www/html php:7.0−apache
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 44 / 127
Docker Le r´eseau
Exercice : Cr´eez un Dockerfile et acc´edez `a votre
application en r´eseau
Partez d’une image alpine
R´ecup´erez https://github.com/JohanMoreau/dev-koans/tree/
master/Python/FlaskBasic
Installez pip :
apk add –update py2-pip
R´ecup´erez le n´ecessaire
pip install –no-cache-dir -r /usr/src/app/requirements.txt
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 45 / 127
Docker Le r´eseau
Exercice
Code Listing 7 – Dockerfile pour Flask
# our base image
FROM alpine:latest
# Install python and pip
RUN apk add −−update py2−pip
# install Python modules needed by the Python app
COPY ./requirements.txt /usr/src/app/
RUN pip install −−no−cache−dir −r /usr/src/app/requirements.txt
# copy files required for the app to run
COPY ./app.py /usr/src/app/
COPY ./templates/index.html /usr/src/app/templates/
# tell the port number the container should expose
EXPOSE 5000
# run the application
CMD [”python”, ”/usr/src/app/app.py”]
Code Listing 8 – Lancer un conteneur Flask
#!/bin/sh
docker container run −p 8888:5000 −−name mywebapp webapppy
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 46 / 127
Docker La s´ecurit´e
La s´ecurit´e
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 47 / 127
Docker La s´ecurit´e
S´ecurit´e
Produit jeune, niveau th´eorique plus faible qu’un hyperviseur
Qualit´e des images, nouveaux outils :
Lynis :https://cisofy.com/lynis/
Docker-bench-security :https://dockerbench.com/
Possibilit´e de limiter l’acc`es aux ressources : Seccomp 41 (profil
apparmor, ...), capabilities 42 (example : cap-drop ALL , cap-add
CHOWN)
Registry priv´ee
41
http://training.play-with-docker.com/security-seccomp/
42
http://training.play-with-docker.com/security-capabilities/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 48 / 127
Docker La s´ecurit´e
Public vs private Registry
Private Registry :
Stock et distribue les images Docker
De nombreux Registry h´eberg´es disponibles :
Docker Hub, AWS ECR, ...
Peut ˆetre self-hosted avec plusieurs int´egrations pour le stockage :
Local, AWS S3, Ceph, OpenStack Swift, ...
Le hub public :
D´epˆot public (push/pull gratuit)
D´epˆot d’images officielles, et d’images tiers,
D´epˆot priv´e (d´epˆot d’images non publiques payant)
Collection de services suppl´ementaires :
Automated builds (lier des d´epˆots github/bitbucket pour lancer un
build suite `a un commit)
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 49 / 127
Docker La s´ecurit´e
Exercice : Private Registry
Lancez une registry en localhost sur le port 5000 avec un stockage local
R´ecup´erez l’image hello-world
Mettre un tag sur l’image ci-dessus pour votre registry
Poussez cette nouvelle image vers votre registry
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 50 / 127
Docker La s´ecurit´e
Exercice : Private Registry
Code Listing 9 – Unsecure private registry language
#!/bin/sh
echo ’DOCKER OPTS=”−−insecure−registry 127.0.0.1:5000”’ >> /etc/docker/docker
docker run −d −p 5000:5000 −−name registry v $(pwd)/registry−data:/var/lib/registry
registry :2
docker tag hello −world 127.0.0.1:5000/hello−world
docker push 127.0.0.1:5000/ hello −world
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 51 / 127
Docker La s´ecurit´e
Tag et espace de nom des images
Les images peuvent avoir des tags :
Les tags symbolisent des diff´erences de version d’une image
C’est le tag :latest qui est utilis´e par d´efaut
Les images disposent de trois espaces de nom :
Racine : ubuntu
Utilisateur et organisations : frapsoft/ts-node
Auto-h´eberg´ees (le serveur) : localhost :5000/myapache
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 52 / 127
Docker La s´ecurit´e
Haute-disponibilit´e vs Migration
Strat´egie :
Les conteneurs ne sont pas migrables `a chaud
Choix d’une architecture scalable permettant la haute-disponibilit´e,
tout en n´egligeant la perte d’un noeud
L’architecture logiciel doit tenir compte sur de ce design
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 53 / 127
Docker Des exemples
Des exemples
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 54 / 127
Docker Des exemples
Exemples DevOps
pour ”le Dev” :
Multiples environnements (tests, dev, branches, ...)
Compilation/Ex´ecution multi-[os|jvm|tools|...]
Utilisation de conteneurs pr´e-charg´es avec des data pour les tests
Outils sp´ecifiques disponibles : plugins IntelliJ, Eclipse 43, ...
pour ”l’Ops” :
Rapidit´e de d´eploiement
Force les bonnes pratiques (microservice, description donc
documentation, ...)
D´eploiement r´ecurrent de serveur
Gestion des vuln´erabilit´es : mise `a jour d’une des couches, test, ...
43
https://www.voxxed.com/blog/2015/06/docker-tools-in-eclipse/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 55 / 127
Docker Des exemples
Exemple pour tout le monde
Quoi :
Les ´evang´elistes Docker font quasiment tout tourner en conteneur
Permet de limiter la contagion virale depuis un logiciel
Moyen de tester des applications en gardant un syst`eme clean
Permet de garder propre l’OS sous jacent :
Latex, environnement lourd, nombreuses d´ependances
Exemple 44 : Latex, Irssi, Mutt, Spotify, Skype
44
https://blog.jessfraz.com/post/docker-containers-on-the-desktop/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 56 / 127
Docker Des exemples
Example : Sandbox pour navigateurs
# docker run −t −i −p 22 magglass1/docker−browser−over−ssh
IP address: 172.17.0.4
Password: N24DjBM86gPubuEE
Firefox : ssh −X webuser@172.17.0.4 firefox
Google Chrome: ssh −X webuser@172.17.0.4 google−chrome −−no−sandbox
Ou via module VNC dans Chrome :
https://hub.docker.com/r/siomiz/chrome/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 57 / 127
Outils Docker
Plan
1 Introduction
2 Docker
3 Outils Docker
Docker Machine
Docker Compose
Docker Swarm
Rancher
Int´egration
Ressources GPU
SaltStack
4 Jenkins
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 58 / 127
Outils Docker Docker Machine
Docker Machine
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 59 / 127
Outils Docker Docker Machine
Docker Machine 46
Provisionne et configure Docker sur un
serveur distant
Fonctionne avec la plupart des cloud
providers
AWS / GCE / Azure / DO / IBM
Fonctionne aussi avec des technologies
standards
OpenStack / vCenter
Image from https://www.docker.com/sites/default/files/products/docker_machine.png
46
Remplace boot2docker mˆeme si celui est toujours disponible
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 60 / 127
Outils Docker Docker Machine
Docker Machine 47
docker−machine create −d virtualbox manager1
docker−machine create −d virtualbox slave1
docker−machine ssh slave1
docker swarm join ...
docker−machine create −d virtualbox slave2
docker−machine ssh slave2
docker swarm join ...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 61 / 127
Outils Docker Docker Compose
Docker Compose
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 62 / 127
Outils Docker Docker Compose
Docker Compose 1/2
Installation et ligne de commande
Lancer une stack de conteneur via 1
fichier : docker-compose.yml
”Compose”g`ere des groupes et les liens
Simplicit´e du YAML
Installation et ligne de commande
Installation simple
docker-compose run | up | stop | rm | build
Image from http://sdtimes.com/wp-content/uploads/2015/02/0226.sdt-docker-2.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 63 / 127
Outils Docker Docker Compose
Docker Compose 2/2
docker run −d −−name db mysql
db:
image: mysql
environment:
MYSQL ROOT PASSWORD: password
docker run −d −−name phpfpm −−link db :mysql jprjr/php-fpm
phpfpm:
image: jprjr /php−fpm
volumes:
− .:/srv/http
− timezone.ini :/etc/php/conf.d/timezone.ini
links :
− db:mysql
docker run −d −−link phpfpm :phpfpm −p 80 :80 my-nginx
nginx:
build : .
links :
− phpfpm:phpfpm
ports :
− 80:80
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 64 / 127
Outils Docker Docker Compose
Exercice : Docker Compose
R´ecup´erez le docker-compose de sameersbn/gitlab
Lancez le compose (modifications probables)
Configurez votre mot de passe gitlab (Azerty123) en allant sur
http ://127.0.0.1 :10080
Ajoutez jenkins :latest avec un stockage permanent et port 10081
V´erifiez que gitlab voit jenkins et inversement
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 65 / 127
Outils Docker Docker Compose
Exercice : Docker Compose
wget https://raw.githubusercontent .com/sameersbn/docker−gitlab/master/docker−
compose.yml
Ajouter
jenkins :
image: jenkins
ports :
− ”10081:8080”
− ”50000:50000”
links :
− gitlab : gitlab
volumes:
− ./jenkins :/var/jenkins home
docker exec −it ci jenkins 1 /bin/bash
ping gitlab
docker exec −it ci gitlab 1 /bin/bash
ping jenkins
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 66 / 127
Outils Docker Docker Swarm
Docker Swarm
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 67 / 127
Outils Docker Docker Swarm
Docker Swarm
Docker en multihost (possiblement windows/linux)
2 versions : docker swarm et docker-swarm (ancien)
docker-swarm : outil externe n´ecessisant l’utilisation d’un outil de
d´ecouverte de services (consul, etcd, ...)
docker swarm : int´egr´e depuis 1.12 :
docker swarm init
docker swarm join
docker swarm ps
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 68 / 127
Outils Docker Rancher
Rancher
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 69 / 127
Outils Docker Rancher
Rancher - Basic
Developp´e par RancherLabs, 100% OpenSource
Outil de pilotage d’infrastructure Docker
Modulaire : IHM (WebApp), Cattle, API REST, ...
Mode : Serveur<->Agent(s)
Support de docker-compose/rancher-compose
Support de Mesos/Kubernetes/Swarm
Support des principaux IaaS/PaaS via
docker-machine
RBAC (AD, LDAP, SHIBBOLETH, comptes
locaux, Github
Rancher Catalog (public ou priv´e) (d´epˆot git)
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 70 / 127
Outils Docker Rancher
Rancher - Archi
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 71 / 127
Outils Docker Int´egration
Int´egration
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 72 / 127
Outils Docker Int´egration
Int´egration 54
Divers outils :
IAAS Public : Amazon AWS, Google
Cloud Platform, Microsoft Azure
IAAS Priv´e : OpenStack, CloudStack
PAAS : Scalingo 49 ,wercker 50
,stage1.io 51 Drone.io, Codeship,
CircleCI, ...
Ansible, Puppet, Chef, Salt ...
Et bientˆot des nouvelles concurrences : CoreOS Rkt 52, Ubuntu LXD, systemd
49
https://scalingo.com/
50
http://wercker.com/
51
http://stage1.io/
52
https ://coreos.com/rkt/docs
53
http ://0pointer.de/public/systemd-man/systemd-nspawn.html
54
http://cloudtimes.org/wp-content/uploads/2011/11/Clouds.cloudtimes-1024x787.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 73 / 127
Outils Docker Ressources GPU
Ressources GPU
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 74 / 127
Outils Docker Ressources GPU
Contexte graphique
A titre d’information car jamais test´e :
https ://github.com/NVIDIA/nvidia-docker
https ://github.com/thewtex/docker-opengl-nvidia
http ://gernotklingler.com/blog/howto-get-hardware-accelerated-
opengl-support-docker/
Pour le partage du Display 55 :
ssh dans le conteneur avec un X11 forwading vers le hˆote
VNC
partage du socket X11
55
http ://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 75 / 127
Outils Docker SaltStack
SaltStack
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 76 / 127
Outils Docker SaltStack
L’id´ee de SaltStack
Les objectifs :
Un framework d’ex´ecution `a distance
Un outil de gestion de configurations/orchestration
Un gestionnaire de configurations centralis´ees
Quelques exemples d’utilisation :
Installation d’une application utilisateur
Configuration des imprimantes, des partages r´eseaux, ...
Lancer des commandes sur un ensemble de machines
G´erer des VM ou conteneurs (construire, lancer, arrˆeter, ...)
Image from http://thomason.io/wp-content/uploads/2014/04/saltstack-logo.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 77 / 127
Outils Docker SaltStack
Pourquoi Salt ?
Nombreuses solutions/techniques :
Images disques (PXE, Ghost, ...)
Scripts maisons (Python, Bash, PowerShell, ...)
Logiciels de gestion de conf (CFEngine, Puppet, Chef, Ansible, ...)
Le choix de Salt pour nous :
Nouvelle g´en´eration d’outil (comparable `a Ansible 57 58 59 60 )
Multiplateforme (Linux, OSX, Windows), installation simple 61
Choix technologique : YAML, jinja2, 0MQ, AES256, Python, ...
Communaut´e importante 62 et bonne documentation 63
57
http://ryandlane.com/blog/2014/08/04/moving-away-from-puppet-saltstack-or-ansible/
58
https://missingm.co/2013/06/ansible-and-salt-a-detailed-comparison/
59
http://blog.xebia.fr/2014/07/18/test-driven-infrastructure-avec-chef-episode-2/
60
http://jensrantil.github.io/salt-vs-ansible.html
61
http://docs.saltstack.com/en/latest/topics/installation/ubuntu.html
62
http://saltstarters.org
63
http://docs.saltstack.com/en/latest/topics/tutorials/quickstart.html
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 78 / 127
Outils Docker SaltStack
Architecture
Mode de fonctionnement :
En solitaire (`a titre perso, ¸ca peut aider)
En client-serveur (en pull ou push) : maˆıtre/larbin (master/minion)
Le lexique :
Grain : propri´et´es d’un larbin (OS, RAM, ...)
Formule/Etat (state) : ´etats `a appliquer dans un .sls en YAML
Pilier (pillar) : param`etres `a transmettre aux larbins
Les commandes :
Salt est con¸cu pour ex´ecuter des commandes `a distance (modules au
sens python) : test.ping (module test), cmd.run (module cmd)
Module important : state (gestion de configuration)
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 79 / 127
Outils Docker SaltStack
Formules simples : installation d’un paquet 64
Code Listing 10 – top.sls la racine des ´etats
base: # Master base configuration
’∗’: # all minion
− apache # call apache state
Code Listing 11 – apache.sls fichier d´ecrivant l’´etat apache
apache2: # Id, using like main parameter for this state
pkg. installed # state to call : this pack must be installed
64
http://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 80 / 127
Outils Docker SaltStack
Formules simples : installation du paquet avec config. 65 66
Code Listing 12 – apache.sls fichier d´ecrivant l’´etat apache avec fichier
apache2: # Id, using like main parameter for this state
pkg:
− installed # state to call : this pack must be installed
service :
− running # check if running
− watch: # reload if change
− file : /etc/apache2/httpd.conf
/etc/apache2/httpd.conf:
file .managed:
− source: salt ://apache/httpd.conf # find the file on salt master
− user: root
− group: root
− mode: 644
− require:
− pkg: apache2 # update this file only if apach2 is installed
65
Le serveur Salt sert de serveur de fichier avec l’url ”salt ://”
66
http://docs.saltstack.com/en/latest/topics/tutorials/states_pt2.html
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 81 / 127
Outils Docker SaltStack
Gestion des grains 67 68
Code Listing 13 – Exemple d’´executions distantes
# from master to specific minion
sudo salt serveur .example.com cmd.run reboot
sudo salt −G ’os:debian’ cmd.run apt−get update
# from master to multiples minion
sudo salt ’ serveur (01|02).example.com’ state. sls apache
sudo salt −−grain−pcre ’os:(debian|ubuntu)’ state . highstate
# from minion
sudo salt −call −l debug state. highstate
67
Possibilit´e de tester avant ´ex´ecution en ajoutant test=True
68
aide en ligne avec sys.doc, exemple : sudo salt-call sys.doc user
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 82 / 127
Outils Docker SaltStack
Pilier/Pillar
Utilit´e du pilier :
D´ecouplage ´etat et param`etres : variations en fonction d’un OS, d’une
distribution, etc ...
S´ecurit´e : les larbins ont acc`es `a tous les ´etats, ´eviter d’y mettre des
informations confidentielles
Cr´eation du pilier :
Mˆeme syntaxe que les recettes et pillar.get() dans les formules
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 83 / 127
Outils Docker SaltStack
Pillier simple : communaut´e snmp
Code Listing 14 – snmp.sls l’´etat snmp
snmpd.conf:
file :
− name: /etc/snmp/snmpd.conf
− source: salt ://nux/snmp/files/snmpd.conf
− template: jinja
− context: snmpcom: {{ pillar .get(’snmpcom’, ’public’) }}
Code Listing 15 – le fichier de conf snmp
rocommunity {{ snmpcom }}
Code Listing 16 – le fichier pillar
snmpcom: myCom
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 84 / 127
Outils Docker SaltStack
Gestion de vuln´erabilit´es : exemple avec ShellShock
Code Listing 17 – S´equence d’´ex´ecution salt pour ShellShock
sudo salt −l debug −v −G ’kernel:Linux’ cmd.run ”env x=’() { :;}; echo bad’ bash −c ’
echo good’ 2>&1 |grep ”
srv1 .domain : bad
srv2 .domain : bad
srv3 .domain : good
srv4 .domain : bad
srv5 .domain : good
...
> sudo salt −l debug −v −G ’kernel:Linux’ pkg. install bash refresh =True
> sudo salt −l debug −v −G ’kernel:Linux’ cmd.run ”env x=’() { :;}; echo bad’ bash −
c ’echo good’ 2>&1 |grep ”
srv1 .domain : good
srv2 .domain : good
srv3 .domain : good
srv4 .domain : good
srv5 .domain : good
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 85 / 127
Outils Docker SaltStack
SaltStack, c’est encore plus
Une boˆıte `a outils en ´evolution :
salt-syndic : mandataire pour les infrastructures lourdes
returners : la suite `a vos ex´ecutions
salt-cloud : pilotage des clouds priv´es et publics
salt-ssh/ Salt Rosters
...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 86 / 127
Outils Docker SaltStack
Saltstack vs Docker
Alors on fait quoi ?
En gros, on automatise avec les 2 ...
Mais l’un r´epond au besoin g´en´eral et l’autre aux besoins sp´ecifiques
Saltstack pour tout, mais on peut gagner du temps en d´eploiement
avec Docker
Id´ealement il faut pouvoir les int´egrer pour la vue d’ensemble
Cela sera d’autant plus vrai avec les ´evolutions telles qu’OpenStack
Docker particuli`erement utile pour la R&D et pour l’infra (la pr´eprod,
les fermes 69 70 71 72 73 , serveur sans donn´ees, ...)
69
https://github.com/saltstack/salt-jenkins
70
http://www.afewmorelines.com/an-example-jenkins-job-using-saltstack-as-a-configuration-manager/
71
http://www.afewmorelines.com/a-full-deployment-pipeline-using-vagrant-saltstack-and-jenkins/
72
https://registry.hub.docker.com/u/maestrodev/build-agent/
73
http://www.logilab.org/blogentry/204921
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 87 / 127
Outils Docker SaltStack
Docker et Salt, exemple avec nodejs 1/3
Docker dans salt :
Module 74 et State 75
Tr`es r´ecent, en gros avant juin 2014, difficile `a utiliser 76 77 78
Code Listing 18 – docker dans le top.sls
base:
’ roles :docker ’:
− match: grain
− roles .docker
− roles .docker−nodejs
74
http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.dockerio.html
75
http://docs.saltstack.com/en/latest/ref/states/all/salt.states.dockerio.html
76
http://serverfault.com/questions/606099/salt-cloud-docker-state-handle-volumes
77
http://thomason.io/automating-application-deployments-across-clouds-with-salt-and-docker/
78
https://www.bountysource.com/issues/1378476-dockerio-module-can-t-get-volumes-to-work
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 88 / 127
Outils Docker SaltStack
Docker et Salt, exemple avec nodejs 2/3
Code Listing 19 – Etat salt de docker
docker repo:
pkgrepo.managed:
− repo: ’deb http://get.docker. io/ubuntu docker main’
− file : /etc/apt/sources. list .d/docker. list
− keyid: 36A1D7869245C8950F966E92D8576A8BA88D21E9
− keyserver: keyserver .ubuntu.com
− require in :
− pkg: mydocker
mydocker:
pkg:
− installed
− name: lxc−docker
service :
− running
− name: docker
− require:
− pkg : mydocker
− pip : docker−python−dockerpy
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 89 / 127
Outils Docker SaltStack
Docker et Salt, exemple avec nodejs 3/3
Code Listing 20 – Etat salt du conteneur nodejs docker
docker nodejs image:
docker. pulled :
− name: dockerfile/nodejs
− tag: latest
− force: True
− require:
− service : mydocker
docker nodejs container :
docker. installed :
− name: mynodejs
− hostname: mynodejs
− image: dockerfile /nodejs
− command: /data/test.sh
− detach: False
− require:
− docker: docker nodejs image
docker nodejs running :
...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 90 / 127
Outils Docker SaltStack
Salt dans docker
Le salt-minion :
D´eployer des images docker directement avec le client salt
int´egr´e 79 80 81 82
Montage d’une maquette salt en quelques minutes :
Il est possible d’installer le serveur et de nombreux clients, le tout
dans des conteneurs pour tester rapidement les recettes. 83 84
79
https://github.com/toscanini/docker-salt-minion
80
https://github.com/ipmb/docker-salt-minion
81
https://github.com/kstaken/dockerfile-examples/tree/master/salt-minion
82
http://blog.xebia.com/2014/06/14/combining-salt-with-docker/
83
http://serverfault.com/questions/587205/lxc-and-saltstack-minion-id-configuration-on-ubuntu
84
http://karlgrz.com/testing-salt-states-rapidly-with-docker/
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 91 / 127
Jenkins
Plan
1 Introduction
2 Docker
3 Outils Docker
4 Jenkins
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 92 / 127
Jenkins
L’int´egration continue
Origines du cˆot´e de Grady Booch :
L’int´egration continue est un ensemble de pratiques utilis´ees en g´enie
logiciel consistant `a v´erifier `a chaque modification de code source que le
r´esultat des modifications ne produit pas de r´egression dans l’application
d´evelopp´ee.
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 93 / 127
Jenkins
L’int´egration continue
Ok il y a des outils, mais ce qui comptent ici :
C’est de savoir ce qu’on a, ce qu’on veut, vers o`u on veut aller. Chacun a
des projets qui sont diff´erents avec une ´equipe diff´erente, on est proche de
la m´ethodologie de l’´equipe, il n’existe pas une seule mani`ere de faire avec
les outils.
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 94 / 127
Jenkins
La naissance
Les origines :
Serveur d’int´egration continue,
Ecrit en Java (Kohsuke Kawaguchi) et pour Java `a
l’origine,
OpenSource (licence MIT),
Fork en 2011 de Hudson (Sun en 2005), plus ou moins
suite au rachat par Oracle
Nombreux autres outils :
Cruisecontrol, Buildbot, GitLab CI, Bamboo, TFS,
continuum ...
Travis-ci, Heroku, Codeship, CircleCI, Drone.io, ...
Image from http://mirrors.clinkerhq.com/jenkins/art/jenkins-logo/1024x1024/logo.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 95 / 127
Jenkins
Jenkins
Outil tr`es populaire :
Opensource, +300 contributeurs en 2014, java
(multi-plateforme),
GUI web, tableau de bord, vue d´etail d’un ”job”,
Gestion des permissions (liaison ldap possible),
Simple d’installation (.war, distribution linux, conteneurs,
recettes, ...) avec IHM,
Groovy accessible depuis quasiment partout dans Jenkins,
Base de plugins la plus importante dans ce domaine :
> 1500 plugins
Base d’installations tr`es large, sur des sites tr`es
importants :
PayPal 86
: 40 000 jobs, 12 000 builds/jours
86
https://www.cloudbees.com/sites/default/files/how_to_train_your_jenkins-manivannan.pdf
Image from https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/
200px-Groovy-logo.svg.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 96 / 127
Jenkins
Exemple de gui Jenkins 88
88
https://ci.inria.fr/pharo
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 97 / 127
Jenkins
Plugins Jenkins
Plugins en tout genre :
Outils de constructions,
Outils d’analyse de code,
Outils de gestion de sources,
Outils de gestion de configurations, de VM, de conteneurs, ...
Jenkins Swarm 89 :
Plugin d’auto-d´ecouverte du master pour les esclaves,
Pr´evu pour la gestion des clusters, ...
Jenkins est capable d’installer ses plugins tout seul.
Jenkins est capable de lire sa configuration de job depuis un fichier.
89
https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 98 / 127
Jenkins
Les plugins
Leur installation :
T´el´echarg´e depuis https://updates.jenkins-ci.org
Peuvent-ˆetre install´es depuis l’IHM ou en CLI
Leur cr´eation :
Nombreux tuto
M´ecanismes de d´ependances pour aller vite au fonctionnel
Architecture de tests et distribution propos´e par la communaut´e
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 99 / 127
Jenkins
Jenkins en 2016/2017
Aujourd’hui :
A d´epasser le stade du simple outil d’int´egration continue ;
Certains l’utilisent aussi pour la gestion des artefacts et le
d´eploiement continue ;
Devient un outil d’orchestration `a part enti`ere (discutable)
Les droits des jobs ne sont pas n´ecessairement ceux du d´epˆot de
sources
2 limites d´ebut 2016 :
Pour ceux qui veulent un job de CI li´e au code sources ...
Jenkins pipeline
IHM discutable ...
Blue Ocean
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 100 / 127
Jenkins
Liaison possible avec GitLab 90
mkdir jenkins redis postgresql gitlab registry helloWorldC
Ajouter la registry dans le docker-compose.yml pr´ec´edent (attention au
cˆot´e insecure `a ajouter au d´emon si ce n’est pas fait)
Bien utilis´e Azerty123 comme password, root comme user (mail
root@root.com)
Au lancement de Jenkins, ne garder que les plugins ”Pipeline”et git
Ajouter `a Jenkins, les plugins ”Self-Organizing Swarm Plug-in Modules”,
”Config File Provider Plugin”et ”Gitlab Plugin”
Naviguer dans les menus Gitlab et Jenkins
90
https://github.com/jenkinsci/gitlab-plugin
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 101 / 127
Jenkins
La console
Outil pratique pour comprendre l’´etat du
serveur ou automatiser quelques tˆaches
(administration, qualit´e, ...). Aller dans
”Administrer Jenkins”, puis ”Console de
script”.
Code Listing 21 – Ping en groovy avec retour std du shell
println ”ping −c1 gitlab”.execute() . text
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 102 / 127
Jenkins
Les esclaves
Les esclaves :
On peut travailler sur le serveur, mais ce n’est pas
une bonne pratique.
Il existe plusieurs types d’esclaves :
ssh, jnlp, swarm
Exemple pour un swarm c/c++ en docker :
heliostech/jenkins-slave-gcc :centos-7 -master
Exercice ...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 103 / 127
Jenkins
Exercice : jenkins swarm c/c++ en docker
Code Listing 22 – Conteneur Jenkins Swarm avec env C
#!/bin/sh
docker run −v ”$PWD”/jenkins/.ssh:/home/jenkins−slave/.ssh:ro −−name slaveC −−rm
−−network ci default −d heliostech/jenkins−slave−gcc:centos−7 −master http://
jenkins:8080/ −username root −password ”Azerty123” −executors 2 −labels ”linux
centos−7−gcc”
Attention au network, cela doit ˆetre le mˆeme que celui de votre
docker-compose
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 104 / 127
Jenkins
Notre 1er code jenkins
Il nous faut un bout de code !
Code Listing 23 – HelloWorld en C++
#include <iostream>
int main()
{
std :: cout << ”Hello, world!” << std::endl;
}
Code Listing 24 – Makefile HelloWorld.cpp
all :
g++ main.cpp −o hello
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 105 / 127
Jenkins
Droits minimaux 91
Il va nous falloir :
un token gitlab (cr´eation) pour que jenkins (enregistrement) puisse
acc´eder `a l’interface Gitlab
une cl´e SSH depuis Jenkins (cr´eation) vers GitLab (enregistrement)
pour la r´ecup´eration du code
Copies d’´ecrans dans les slides suivantes.
91
https://medium.com/@teeks99/continuous-integration-with-jenkins-and-gitlab-fa770c62e88a
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 106 / 127
Jenkins
Cˆot´e Gitlab
Allez dans votre paramˆetres (en haut `a droite).
”Access Token”: pour la cr´eation de votre token
”SSH Keys”: pour l’enregistrement de votre cl´e SSH
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 107 / 127
Jenkins
Cˆot´e Jenkins
Allez dans ”Administrer Jenkins”
”Configure Credentials/Identifiants/System/Identifiants
globaux/Ajouter
Ajouter le token Gitlab et la cl´e SSH
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 108 / 127
Jenkins
Cˆot´e Jenkins
En synth`ese cela devrait au ”Credentials”ci-dessous
Le token peut ˆetre test´e dans ”Administrer Jenkins/Configurer le
syst`eme”
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 109 / 127
Jenkins
Droits Jenkins/Gitlab - Exercice
Aller sur votre profil Gitlab et r´ecup´erez la commande openssl pour cr´eer
votre cl´e
Faite un docker exec sur le conteneur jenkins et ex´ecutez la commande
(copier le contenu de .ssh/id rsa.pub)
Faire un test avec ssh git@gitlab
Aller sur votre profile Gitlab et cr´eer un token pour jenkins
Aller dans la configuration de Jenkins, cr´eez et testez une connection
Gitlab
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 110 / 127
Jenkins
API - Jenkins
Code Listing 25 – Create a job with Jenkins API
#!/bin/sh
if [ $# −ne 4 ]
then
echo ”No arguments supplied”
echo ”1st argument : is your Jenkins user”
echo ”2nd argument : is your Jenkins password”
echo ”3th argument : is your job”
echo ”4th argument : is the jenkins type of your job [ freestyle | pipeline ] ”
exit 1
fi
USER=$1
APITOKEN=$2
JOB=$3
GROOVYSCRIPT=list−jobs.groovy
SERVER=127.0.0.1:10081
CRUMB=‘curl ”http://$USER:$APITOKEN@$SERVER/crumbIssuer/api/xml/?xpath=concat
(//crumbRequestField,%22:%22,//crumb)”‘
curl −v −X POST −−data−binary ”@Jenkins/””$4””.xml” −H ”Content−Type:application/
xml” −H ”$CRUMB” ”http://$USER:Azerty123@$SERVER/createItem?name=$JOB”
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 111 / 127
Jenkins
API - Gitlab
Code Listing 26 – Create a project with GitLab API
#!/bin/sh
if [ $# −ne 2 ]
then
echo ”No arguments supplied”
echo ”First argument is your GitLab token”
echo ”Second argument is your new project”
exit 1
fi
curl −−header ”PRIVATE−TOKEN:$1” −X POST ”http://127.0.0.1:10080/api/v3/projects?
name=$2”
IDS=‘curl −−header ”PRIVATE−TOKEN:$1” GET ”http://127.0.0.1:10080/api/v4/projects?
search=$2&simple=true”‘
ID=‘echo ”$IDS”|tr ”, ” ’n’| sed −e ”s/”//g”|grep ”id : ”|sed −e ’s/[{id ://’‘
curl −−header ”PRIVATE−TOKEN:$1” −X POST ”http://127.0.0.1:10080/api/v4/projects/
$ID/hooks?url=http://jenkins:8080/project/$2&push events=true&token=
d738cdacfb22fcce95ae5cfa7c065972”
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 112 / 127
Jenkins
API - Les 2 en mˆemes temps
Code Listing 27 – Appel les 2 pr´ecedents scripts
#!/bin/bash
if [ $# −ne 5 ]
then
echo ”No arguments supplied”
echo ”1st argument : is your Jenkins user”
echo ”2nd argument : is your Jenkins password”
echo ”3th argument : is your Gitlab token”
echo ”4th argument : is your job/project ”
echo ”5th argument : is the jenkins type of your job [ freestyle | pipeline ] ”
exit 1
fi
./ Gitlab/ gitlabcreateProject .sh $3 $4
./Jenkins/ jenkinscreateJob .sh $1 $2 $4 $5
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 113 / 127
Jenkins
Job Jenkins
De quoi s’agit-il ?
Projet de travail pouvant (mais pas n´ecessairement) ˆetre li´e `a un
d´epˆot de sources
Les jobs peuvent travailler ensemble
Les droits des jobs ne sont pas n´ecessairement ceux du d´epˆot de
sources
Il existe plusieurs type de job :
Principalement : ”freestyle”et ”pipeline”
Multibranch Pipeline, Folder, ...
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 114 / 127
Jenkins
Job freestyle - cr´eation
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 115 / 127
Jenkins
Job freestyle - param
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 116 / 127
Jenkins
Exercice
Cr´eer un projet test1 sur gitlab, cr´eer un job freestyle test1 sur jenkins
Lier Jenkins/Gitlab
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 117 / 127
Jenkins
Pipeline
2 versions :
Imperative (aka scripted) Pipeline (2016)
Declarative Pipeline (2017)
Jenkins Jobs as Code :
Jenkinsfile
Proche d’un travis.yml ou d’un .gitlab-ci.yml
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 118 / 127
Jenkins
Pipeline C++
Code Listing 28 – Pipeline CPP
node(”centos−7−gcc”) {
stage (’checkout’) {
checkout([ $class : ’GitSCM’,
userRemoteConfigs: [[
credentialsId : ’sshkey ’,
url : ”ssh:// git@gitlab /root/test . git ”]]
])}
stage (’make’) {
gitlabCommitStatus(”build ”) {
sh ”make”
}
}
}
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 119 / 127
Jenkins
Pipeline avec exception et documentation
Code Listing 29 – Pipeline avec exception et doc html
node (”Ubuntu && amd64”) {
checkout scm
stage (’ build ’) {
try {
sh ’make’
} catch( err) {
currentBuild . result = ’UNSTABLE’ publishArtifacts(’err.log ’) throw err
}
}
stage (’ test ’) {
sh ’make test’
}
step ([ $class : ’JavadocArchiver’,
javadocDir: ”target/ site ”, keepAll : true ])
}
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 120 / 127
Jenkins
Declarative pipeline Junit
Code Listing 30 – Declarative Pipeline Junit
pipeline {
agent {
docker ’maven:3.3.3’
}
stages {
stage (’ Build ’) {
steps {
git url : ’http://github.com/JohanMoreau/JunitTest.git’
sh ”mvn −B clean install −Dmaven.test.failure . ignore=true”
}}
stage (’Archive’) {
steps {
junit ’∗∗/target/ surefire −reports/TEST−∗.xml’
sh ’ ls −al target /’
archive ’ target /∗. jar ’
}}}
post {
always {
deleteDir ()
}}
}Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 121 / 127
Jenkins
Pipeline Docker
Code Listing 31 – Pipeline Docker
node(’docker’){
stage (’Checkout’) {
git url : ’http://github.com/JohanMoreau/dev−koans.git’
}
stage (’ Build docker’) {
sh(”cp Docker/webapppy/Dockerfile Python/FlaskBasic/”)
sh(”cd Python/FlaskBasic && ls −al && docker build −t webapppy . ”)
}
}
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 122 / 127
Jenkins
BlueOcean
Image from http://www.silicon.fr/wp-content/uploads/2016/09/Blue-Ocean-Jenkins.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 123 / 127
Jenkins
BlueOcean
Image from https://www.cloudbees.com/sites/default/files/jenkins-world-2016-blue-ocean.png
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 124 / 127
Jenkins
Alors Jenkins pour vous ?
Pas simple ?
Il peut sembler plus complexe que GitLab-ci (si on a un GitLab), donc
pour un petit projet avec du build+test+doc sans historique, Jenkins
est peut-ˆetre plus lourd
Mais pas si complexe et adaptable `a tous les processus de
d´eveloppement :
Outil ancien qui a r´eussi `a s’adapter r´eguli`erement
Tr`es bien connect´e aux communaut´es (Sonar, Nexus, Docker,
OpenStack, ...)
Liaison entre les jobs et vision d’ensemble
Possibilit´e de franchir l’´etape et d’aller vers du d´eploiement
continue 94 95 (si possible avec un outil interm´ediaire :
SaltStack/Ansible, Rancher/Kubernetes, ...)
94
Continuous Delivery = Continuous Integration + tests fonctionnels automatiques
95
Continuous Deployment = Continuous Delivery + d´eloiement automatique en production
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 125 / 127
Jenkins
Deploiement continue
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 126 / 127
Jenkins
Le document :
Cette pr´esentation a ´et´e faite avec des outils opensource et libre dans
le but de pr´esenter des outils de construction d’applications eux-aussi
opensource.
N’h´esitez pas `a m’envoyer vos remarques ou corrections sur
johan.moreau sur gmail.com
Ce document est distribu´e sous licence Creative Commons
Attribution-ShareAlike 2.0
Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 127 / 127

Contenu connexe

Tendances

20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
Frédéric Sagez
 
JCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueJCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratique
Rossi Oddet
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
Johan Moreau
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
Arnaud Héritier
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
SOAT
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous Delivery
Damien Goldenberg
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
Adrien Blind
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
Aurelien Navarre
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
Stéphane Traumat
 
JCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsJCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec Jenkins
Rossi Oddet
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
Agile Tour 2009 Québec
 
Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)
Fabian Piau
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration Continue
Xavier Warzee
 
Au secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsAu secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOps
antony_guilloteau
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
Stephane Manciot
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
Stéphane Liétard
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
Emmanuel Hugonnet
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
Arnaud Héritier
 

Tendances (20)

20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
 
Sonar-Hodson-Maven
Sonar-Hodson-MavenSonar-Hodson-Maven
Sonar-Hodson-Maven
 
JCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratiqueJCertif 2012 : Maven par la pratique
JCertif 2012 : Maven par la pratique
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 
Présentation Maven
Présentation MavenPrésentation Maven
Présentation Maven
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous Delivery
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
 
JCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec JenkinsJCertif 2012 : Integration continue avec Jenkins
JCertif 2012 : Integration continue avec Jenkins
 
Processus d’intégration continue et outils
Processus d’intégration continue et outilsProcessus d’intégration continue et outils
Processus d’intégration continue et outils
 
Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)
 
Principes de L'intégration Continue
Principes de L'intégration ContinuePrincipes de L'intégration Continue
Principes de L'intégration Continue
 
Au secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsAu secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOps
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
At2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville PublicAt2008 Grenoble Hugonnet Sanlaville Public
At2008 Grenoble Hugonnet Sanlaville Public
 
20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven20081023 - Paris Vi Master STL TA - Initiation Maven
20081023 - Paris Vi Master STL TA - Initiation Maven
 

Similaire à Intégration continue

Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
Johan Moreau
 
Pyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shiftPyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shift
Arthur Lutz
 
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Arthur Lutz
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & Kubernetes
Perfect Memory
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
Laurent Broudoux
 
Py osv newsletter-032018
Py osv newsletter-032018Py osv newsletter-032018
Py osv newsletter-032018
FabMob
 
Py osv newsletter-032018
Py osv newsletter-032018Py osv newsletter-032018
Py osv newsletter-032018
FabMob
 
Php sous Windows - webcamps Paris
Php sous Windows - webcamps ParisPhp sous Windows - webcamps Paris
Php sous Windows - webcamps Paris
LeTesteur
 
1er rapport d'étonnement veille expédition ReFaire
1er rapport d'étonnement veille expédition ReFaire1er rapport d'étonnement veille expédition ReFaire
1er rapport d'étonnement veille expédition ReFaire
Fing
 
Croisière sur le data lake
Croisière sur le data lakeCroisière sur le data lake
Croisière sur le data lake
David Morel
 
DevOps with OpenShift
DevOps with OpenShiftDevOps with OpenShift
DevOps with OpenShift
Marouan MOHAMED
 
Hadoop en 1461 leçons
Hadoop en 1461 leçonsHadoop en 1461 leçons
Hadoop en 1461 leçons
David Morel
 
De l’open source à l’open cloud
De l’open source à l’open cloudDe l’open source à l’open cloud
De l’open source à l’open cloud
Robert Viseur
 
Statistique de TYPO3 dans le monde
Statistique de TYPO3 dans le mondeStatistique de TYPO3 dans le monde
Statistique de TYPO3 dans le monde
Yannick Pavard
 
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULg
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULgDévelopper des codes de simulation numérique avec une équipe "non geek" à l'ULg
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULg
Romain Boman
 
Une plateforme moderne pour le groupe SIPA/Ouest-France 
Une plateforme moderne pour le groupe SIPA/Ouest-France Une plateforme moderne pour le groupe SIPA/Ouest-France 
Une plateforme moderne pour le groupe SIPA/Ouest-France 
François-Guillaume Ribreau
 
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Publicis Sapient Engineering
 
L'évolution vers le (Dev)NoOps
L'évolution vers le (Dev)NoOpsL'évolution vers le (Dev)NoOps
L'évolution vers le (Dev)NoOps
Georgeot Cédric
 
Agile lille 2015 devops etapres
Agile lille 2015 devops etapresAgile lille 2015 devops etapres
Agile lille 2015 devops etapres
Laurent Tardif
 
Cloud rasberryfinal
Cloud rasberryfinal Cloud rasberryfinal
Cloud rasberryfinal
yacine sebihi
 

Similaire à Intégration continue (20)

Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
 
Pyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shiftPyconfr2018 deploy des application python dans un cluster open shift
Pyconfr2018 deploy des application python dans un cluster open shift
 
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
Capitole du Libre 2018 - Déployer des applications python dans un cluster Ope...
 
Openshift 3 & Kubernetes
Openshift 3 & KubernetesOpenshift 3 & Kubernetes
Openshift 3 & Kubernetes
 
Rex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - EnsimRex Software Factories 20140117 - Ensim
Rex Software Factories 20140117 - Ensim
 
Py osv newsletter-032018
Py osv newsletter-032018Py osv newsletter-032018
Py osv newsletter-032018
 
Py osv newsletter-032018
Py osv newsletter-032018Py osv newsletter-032018
Py osv newsletter-032018
 
Php sous Windows - webcamps Paris
Php sous Windows - webcamps ParisPhp sous Windows - webcamps Paris
Php sous Windows - webcamps Paris
 
1er rapport d'étonnement veille expédition ReFaire
1er rapport d'étonnement veille expédition ReFaire1er rapport d'étonnement veille expédition ReFaire
1er rapport d'étonnement veille expédition ReFaire
 
Croisière sur le data lake
Croisière sur le data lakeCroisière sur le data lake
Croisière sur le data lake
 
DevOps with OpenShift
DevOps with OpenShiftDevOps with OpenShift
DevOps with OpenShift
 
Hadoop en 1461 leçons
Hadoop en 1461 leçonsHadoop en 1461 leçons
Hadoop en 1461 leçons
 
De l’open source à l’open cloud
De l’open source à l’open cloudDe l’open source à l’open cloud
De l’open source à l’open cloud
 
Statistique de TYPO3 dans le monde
Statistique de TYPO3 dans le mondeStatistique de TYPO3 dans le monde
Statistique de TYPO3 dans le monde
 
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULg
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULgDévelopper des codes de simulation numérique avec une équipe "non geek" à l'ULg
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULg
 
Une plateforme moderne pour le groupe SIPA/Ouest-France 
Une plateforme moderne pour le groupe SIPA/Ouest-France Une plateforme moderne pour le groupe SIPA/Ouest-France 
Une plateforme moderne pour le groupe SIPA/Ouest-France 
 
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
Paris Container Day 2016 : Les nouveaux défis du déploiement (Xebia Labs)
 
L'évolution vers le (Dev)NoOps
L'évolution vers le (Dev)NoOpsL'évolution vers le (Dev)NoOps
L'évolution vers le (Dev)NoOps
 
Agile lille 2015 devops etapres
Agile lille 2015 devops etapresAgile lille 2015 devops etapres
Agile lille 2015 devops etapres
 
Cloud rasberryfinal
Cloud rasberryfinal Cloud rasberryfinal
Cloud rasberryfinal
 

Plus de Johan Moreau

Les premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaqueLes premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaque
Johan Moreau
 
Actions prioritaires pour la SSI
Actions prioritaires pour la SSI Actions prioritaires pour la SSI
Actions prioritaires pour la SSI
Johan Moreau
 
Implications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entrepriseImplications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entreprise
Johan Moreau
 
Gestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de ShellshockGestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de Shellshock
Johan Moreau
 
Firewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructureFirewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructure
Johan Moreau
 
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
Johan Moreau
 
Processus de développement
Processus de développementProcessus de développement
Processus de développement
Johan Moreau
 
IPv6 au Clusir-Est
IPv6 au Clusir-EstIPv6 au Clusir-Est
IPv6 au Clusir-Est
Johan Moreau
 
2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix
Johan Moreau
 

Plus de Johan Moreau (9)

Les premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaqueLes premières minutes d’une cyberattaque
Les premières minutes d’une cyberattaque
 
Actions prioritaires pour la SSI
Actions prioritaires pour la SSI Actions prioritaires pour la SSI
Actions prioritaires pour la SSI
 
Implications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entrepriseImplications des objets connectés sur la sécurité de l'entreprise
Implications des objets connectés sur la sécurité de l'entreprise
 
Gestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de ShellshockGestion des vulnérabilités dans le cas de Shellshock
Gestion des vulnérabilités dans le cas de Shellshock
 
Firewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructureFirewall opensource et gestion de configuration pour l'infrastructure
Firewall opensource et gestion de configuration pour l'infrastructure
 
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
BYOD & Cloud : Les nouveaux paradigmes de l'informatique ?
 
Processus de développement
Processus de développementProcessus de développement
Processus de développement
 
IPv6 au Clusir-Est
IPv6 au Clusir-EstIPv6 au Clusir-Est
IPv6 au Clusir-Est
 
2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix2009 2010 Fip3 A Unix
2009 2010 Fip3 A Unix
 

Intégration continue

  • 1. Int´egration continue Groupe CNRS Calcul / Johan.Moreau - at - gmail.com|ircad.fr Johan Moreau IRCAD/IHU 29 mai 2017 Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 1 / 127
  • 2. Introduction Plan 1 Introduction Situation M´ethodes Comment am´eliorer cela ? 2 Docker 3 Outils Docker 4 Jenkins Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 2 / 127
  • 3. Introduction Situation Situation Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 3 / 127
  • 4. Introduction Situation La situation - chez tout le monde ? Les difficult´es : Augmentations des besoins num´eriques (donc des services) Fr´equence de mises `a disposition ultra rapide Inteconnexions plus fortes entre les services Difficult´es de maintenir la documentation d’exploitation Multiples environnements (dev, tests, production, ...) Cas complexes des clusters, de la HA, des workflow de dev, ... R´eponses partielles : Agilit´e : meilleure production DevOps : meilleure exploitation Nouveaux outils li´es `a ces tendances Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 4 / 127
  • 5. Introduction M´ethodes M´ethodes Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 5 / 127
  • 6. Introduction M´ethodes Quelles r´eponses des communaut´es ? Les principes de l’agilit´e : Cycle en V trop long, cycle rapide 1 Livraisons tr`es r´eguli`eres pour retour clients Proximit´e du client pour une meilleure communication Mode ´equipe, le code est `a tout le monde, gestion des absences Beaucoup d’autres principes : gestion du code, construction simple, ... M´ethodologies : Scrum 2, XP, ... Outils : DVCS, int´egration continue, ... Simple sur le papier, long `a mettre en place ... 1 http://eureka.sbs.ox.ac.uk/897/1/WP_2011_08_15.pdf Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 6 / 127
  • 7. Introduction M´ethodes DevOps Les principes du DevOps : Les exploitants ont des conditons diff´erentes des d´eveloppeurs, les faire travailler ensemble Mises en exploitation tr`es r´eguli`eres et rapides 3 4 Tr`es pr´esent chez les leaders : Amazon - toutes les 11,6s 5 , Etsy - 30fois/j 6 , ... M´ethodologies : Kanban, ... Outils : VM, conteneurs, gestion de configuration, ... Etape complexe : bon alignement Devs et Ops, + agilit´e cˆot´e Devs ! 3 https://puppetlabs.com/wp-content/uploads/2013/03/2013-state-of-devops-report.pdf 4 http://pages.zeroturnaround.com/RebelLabs-AllReportLanders_DevopsProductivityReport.html 5 http://assets.en.oreilly.com/1/event/60/Velocity%20Culture%20Presentation.pdf 6 https://codeascraft.com/2012/03/13/making-it-virtually-easy-to-deploy-on-day-one/ Image from https://3ovyg21t17l11k49tk1oma21-wpengine.netdna-ssl.com/wp-content/uploads/2014/03/ bart-simpson-generator-1.jpg Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 7 / 127
  • 8. Introduction M´ethodes Contextes compl´ementaires Microservices 8 : Minimisation d’une application afin de gagner en maintenabilit´e D´efinition d’un service la plus claire possible Principe ancien (Minix vs Linux 9 ) mais plus de sens avec REST Impose un design/r´eflexion tr`es particulier Infrastructure d´efinie par le logiciel (SDI ou Infra-as-Code) 10 : Pour gagner en productivit´e, automatisation d’infrastructures complexes (service, stockage, r´eseau, s´ecurit´e, ...) Outils et API de plus en plus pr´esentes TDI : Test-Driven-Infrastructure (suite du TDD) Projet transversal imposant des connaissances larges 8 http://en.wikipedia.org/wiki/Microservices 9 http://en.wikipedia.org/wiki/Tanenbaum-Torvalds_debate 10 http://en.wikipedia.org/wiki/Software_Defined_Infrastructure Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 8 / 127
  • 9. Introduction M´ethodes Gestion de sources et artefacts DVCS, un ´el´ement cl´e dans la r´eflexion : Manipulation de fichiers ’texte’, donc gestion r´ealiste possible Fichiers l´egers pouvant utiliser les fonctions des DVCS (branches, staging, ..) Bonnes pratiques compatibles (tout en texte, tout est suivi, ...) Int´egration continue dans les 2 mondes (devops) et entre les outils Des art´efacts int´eressants : Versions journali`eres(”nightly build”) D´eploiements automatiques/continus G´en´eration automatique de l’historique (release notes), etc ... Les leaders : git, mercurial, subversion, ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 9 / 127
  • 10. Introduction M´ethodes Les forges sont bien pratiques Rien de bien nouveau : En mode public : Sourceforge, Savannah, ... En mode h´eberg´e : Trac, Redmine, ... H´ebergement des d´epˆots, de quelques artefacts, forums, ... Et pourtant, une nouvelle vague : En mode public : GitHub, GitLab, ... En mode h´eberg´e : GitLab, Rhodecode, ... R´eseau social, discussion autours des probl`emes, PR/MR, ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 10 / 127
  • 11. Introduction M´ethodes Int´egration continue 14 D´efinition : Ensemble de pratiques v´erifiant de mani`ere automatique et r´eguli`ere que chaque modification de code n’engendre pas de r´egression Pour v´erifier, on utilise la phase de ”construction”: Compiler le code (standard, rapide, ...), Lancer les tests unitaires, Analyser le code, G´en´erer des rapports, ..., G´en´erer un ex´ecutable ou une archive Les leaders : Jenkins, Travis-ci, Gitlab-ci, ... Plus un bug est d´ecouvert tˆot, moins d’impact aura sa correction 12 Maintenir un build op´erationnel n’est pas facile ! 13 Image from http://vichargrave.com/wp-content/uploads/2013/02/Hadoop-Development.png 12 http://martinfowler.com/articles/continuousIntegration.html 13 http://static.googleusercontent.com/media/research.google.com/de//pubs/archive/42184.pdf 14 http://fr.wikipedia.org/wiki/Int%C3%A9gration_continueJohan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 11 / 127
  • 12. Introduction Comment am´eliorer cela ? Comment am´eliorer cela ? Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 12 / 127
  • 13. Introduction Comment am´eliorer cela ? La reproductibilit´e est le nerf de la guerre Quelles difficult´es avec l’int´egration continue : Se battre pour faire passer le 1er job est motivant, apr`es ... Dans un baremetal ou une VM, il y a des ´evolutions possibles, qui doit faire le boulot ? Comment tester l’´evolution de l’esclave jenkins ? G´erer la combinatoire croissante de la matrice des jobs ! Principes de l’infrastruture d´efinie par le code et de l’infrastructure reproductible - mˆeme approche que la recherche reproductible 15 Les conteneurs applicatifs (type Docker) peuvent aider pour cela 15 http://www.sciencemag.org/content/334/6060/1226 Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 13 / 127
  • 14. Docker Plan 1 Introduction 2 Docker Un conteneur : kezako ? Docker, la petite histoire Les commandes de bases Les images La persistance des donn´ees Le r´eseau La s´ecurit´e Des exemples 3 Outils Docker 4 Jenkins Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 14 / 127
  • 15. Docker Un conteneur : kezako ? Un conteneur : kezako ? Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 15 / 127
  • 16. Docker Un conteneur : kezako ? Un conteneur (jolie m´etaphore), c’est quoi ? Les mˆemes id´ees que la virtualisation, mais sans virtualisation : Agnostique sur le contenu et le transporteur Isolation et automatisation Principe d’infrastructure consistante et r´ep´etable Peu d’overhead par rapport `a une VM ! 16 En gros, un super chroot (ou un jails BSD plus sympa) : Un des points forts de Solaris depuis plusieurs ann´ees. Techno existante aussi chez Google depuis longtemps. Rien de neuf, mais pourtant ... Certains parlent de virtualisation ”niveau OS”ou ”l´eg`ere”, isolation applicative 16 http://fr.slideshare.net/BodenRussell/kvm-and-docker-lxc-benchmarking-with-openstack Image from https://msopentech.com/wp-content/uploads/DockerUbuntu.png Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 16 / 127
  • 17. Docker Un conteneur : kezako ? Diff´erences entre VM et conteneur Image from http://uploads.lightcode.fr/articles/33-conteneurs-linux/conteneurs-vs-vms.png Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 17 / 127
  • 18. Docker Un conteneur : kezako ? Liaison avec le noyau Linux 20 et autres OS Une belle ´evolution de Linux : Mount namespace (Linux 2.4.19) PID namespace (Linux 2.6.24) - x PID/process Net namespace (Linux 2.6.19-2.6.24) User namespace (Linux 2.6.23-3.8) IPC namespace (Linux 2.6.19-2.6.30) UTS namespace (Linux 2.6.19) - host et domain cgroups : g´erer la limitation de ressource AUFS/BTRFS : FS/couche, mode union, copy on write En gros, les ´el´ements noyaux sont en place depuis Linux 3.8 Mais natif depuis 2016 sur OSX et Windows Image from https://cdn-images-1.medium.com/max/1600/1*TXashznqPJG_9iNPar9a7w.png 20 https://github.com/sdouche/presentation-docker/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 18 / 127
  • 19. Docker Docker, la petite histoire Docker, la petite histoire Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 19 / 127
  • 20. Docker Docker, la petite histoire De dotcloud `a docker La petite histoire : DotCloud 21 ´equivalent FR `a Heroku (PAAS) Construit sur LXC et AUFS + dev. kernel linux Pas mal de soucis sur la gestion des conteneurs D´eveloppement interne d’un d´emon en python Docker - vers la simplification : Projet jeune en Golang 23 : 1er commit le 18/01/2013 Dans le top15 sur GitHub (approche les 800 contributeurs) en 2015 21 millions de t´el´echargement fin 2014 Linux 64bits avec LXC/libcontainer 24 21 http://fr.slideshare.net/jpetazzo/introduction-to-docker-december-2014-tour-de-france-bordeaux-special-ed Image from https://www.docker.com/sites/default/files/Whale%20Logo332%402x_5.png 23 http://linuxfr.org/news/la-folie-docker 24 https://www.flockport.com/lxc-vs-docker/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 20 / 127
  • 21. Docker Docker, la petite histoire En fait docker, c’´etait pour rire, bienvenu `a Moby Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 21 / 127
  • 22. Docker Docker, la petite histoire Docker Terminologie : client/server : outil utilisant l’API du serveur/Daemon index : r´epertoire public (https ://index.docker.io/) image : conteneur en lecture seule (couches = snapshot) conteneur : ´element manipulable Analogie avec le d´eveloppement objet : Images ´equivalentes aux classes Les couches sont ´equivalentes `a l’h´eritage Les conteneurs sont des instances Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 22 / 127
  • 23. Docker Docker, la petite histoire Docker Les points forts : Installation simple (Linux, OSX, Windows) 27 Ligne de commande tr`es sympathique (docker help) Langage de description des images (avec notion de parent) Communaut´e tr`es active (trop ?) API pour pilotage, ´ecosyst`eme jeune mais d´ej`a ´enorme : Gui 28 , Orchestration, h´ebergement cloud, int´egration continue, OS, ... 27 http://docs.docker.com/installation/ 28 http://linuxfr.org/news/logiciels-pour-survivre-avec-docker Image from http://pre12.deviantart.net/9476/th/pre/i/2015/253/c/7/octopus_docker_bloglaurel_by_ bloglaurel-d99468m.jpg Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 23 / 127
  • 24. Docker Docker, la petite histoire Evidement, il faut vivre : CE vs EE 31 Image from https://i1.wp.com/blog.docker.com/wp-content/uploads/ee.png 31 RBAC LDAP/AD, gestion des images avanc´ees, scan d’images, etc ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 24 / 127
  • 25. Docker Docker, la petite histoire Version en MM.YY Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 25 / 127
  • 26. Docker Les commandes de bases Les commandes de bases Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 26 / 127
  • 27. Docker Les commandes de bases Docker 101 32 A l’ancienne : $ docker run −i −t ubuntu /bin/bash run : on veut lancer le conteneur -i -t : on veut un terminal et ˆetre interactif avec lui ubuntu : l’image `a utiliser pour ce conteneur /bin/bash : on lance bash $ sudo docker run −i −t ubuntu /bin/bash root@0bc82356b52d9:/# cat /etc/issue Ubuntu 14.04.2 LTS root@0bc82356b52d9:/# exit Depuis les derni`eres version de Docker : docker container run hello −world 32 Les images de base sont tr`es l´eg`eres pas de ifconfig (net-tools)/ping(iputils-ping) Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 27 / 127
  • 28. Docker Les commandes de bases D´emarrage d’un conteneur En quoi consiste le d´emarrage du container : Recherche de l’image -> Si l’image n’existe pas en local, alors t´el´echargement via le hub. Construction du syst`eme de fichiers au sens Linux D´emarrage du container Configuration de l’adresse IP du container -> Ainsi que de la communication entre l’ext´erieur et le container Capture des messages entr´ees-sorties Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 28 / 127
  • 29. Docker Les commandes de bases 1 seul processus Phylosophiquement, n’ex´ecute qu’un seul processus `a la fois un container=une application (ou processus) pas d’ex´ecution de daemons, de services, ssh, etc. mˆeme le processus init n’existe pas sinon l’utilisation des outils particuliers tels que supervisord, forever, ... docker top mycontainer docker inspect −−format {{.State.Pid}} ‘docker ps −q‘ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 29 / 127
  • 30. Docker Les commandes de bases Docker in the shell 33 34 35 Les principales commandes : Code Listing 1 – les commandes docker utiles sudo /usr/bin/docker −d & # run the daemon sudo docker search ubuntu # give ubuntu images from public index ( official /trusted) sudo docker pull stackbrew/ubuntu # pull latest stackbrew/ubuntu images sudo docker history stackbrew/ubuntu # view history for this images sudo docker images # show local images sudo docker run −i −t stackbrew/ubuntu /bin/bash # run this images / create container sudo docker run −t −i −link redis :db −name webapp ubuntu bash # link 2 containers sudo docker ps # show active containers (−a to show all containers ) sudo docker logs myUbuntu sudo docker attach myUbuntu # retake the hand on the container sudo docker run −d −p 8888:80 ubuntu # export 8888 on master sudo docker stop # SIGTERM suivi d’un SIGKILL sudo docker kill # SIGKILL directement sudo docker system df # Show docker disk usage sudo docker system prune # Remove unused data 33 http://ippon.developpez.com/tutoriels/virtualisation/docker-presentation-part-1/ 34 http://ippon.developpez.com/tutoriels/virtualisation/docker-presentation-part-2/ 35 http://sametmax.com/le-deploiement-par-conteneurs-avec-docker/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 30 / 127
  • 31. Docker Les images Les images Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 31 / 127
  • 32. Docker Les images Cr´eation d’images Docker 36 Diff´erente m´ethode en ligne de commande : import : charge une archive de fichiers, comme couche de base commit : cr´ee une nouvelle couche(+ image) depuis un conteneur build : script de suite de commandes de cr´eation automatis´ee d’image Description et construction : Code Listing 2 – Dockerfile FROM debian:wheezy ADD README.md /tmp/ Code Listing 3 – Ex´ecution d’un build Docker $ docker build −q −t readme . Sending build context to Docker daemon 3.584 kB Sending build context to Docker daemon Step 0 : FROM debian:wheezy −−−> e8d37d9e3476 Step 1 : ADD README.md /tmp/ −−−> 09eabce38f39 Removing intermediate container 3e44a3b6eabe Successfully built 09eabce38f39 36 http://www.centurylinklabs.com/more-docker-image-cache-tips Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 32 / 127
  • 33. Docker Les images Couches d’une image Docker Performance (*5) R´eutilisabilit´e Lecture seule donc : diff et versioning Image from https://raw.githubusercontent.com/radiomix/poc-docker-jenkins/master/img/ docker-filesystems-multilayer.png Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 33 / 127
  • 34. Docker Les images Instructions (DSL) du Dockerfile Les instructions sont peu nombreuses : FROM, RUN, CMD, LABEL, MAINTAINER, EXPOSE, ENV, ADD, COPY, ENTRYPOINT 38, VOLUME, USER, WORKDIR, ARG, ONBUILD, STOPSIGNAL, HEALTHCHECK, SHELL Pour chaque instruction RUN, un conteneur temporaire (8xxxxxxxx) est cr´e´e depuis l’image de base. La commande RUN est ex´ecut´ee dans ce conteneur, Le conteneur est commit´e en une image interm´ediare (7yyyyyyyy), Le conteneur interm´ediare (8xxxxxxxx) est supprim´e, Le r´esultat, l’image interm´ediaire, servira d’image de base pour l’´etape suivante, etc.. 38 commande de base != de CMD, commande par d´efaut Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 34 / 127
  • 35. Docker Les images Exercice : Cr´eez un conteneur ping avec argument En partant de l’image alpine Cr´eez un Dockefile appelant ping et prenant en paramˆetre du conteneur le host Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 35 / 127
  • 36. Docker Les images Exercice Code Listing 4 – Dockefile pour ping FROM alpine ENTRYPOINT [”ping”] CMD [”localhost”] Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 36 / 127
  • 37. Docker Les images Multi-stage build 39 40 Etre capable d’avoir plusieurs FROM dans un Dockerfile R´ecup´erer des artefacts issus des ”stages”pr´ec´edents les ni`emes FROM L’int´erˆet r´eside dans la r´eduction du point d’une image Cela est utile pour des artefacts ”construits”dans dans des stages de l’image (ou pour r´eduire des installations trop lourdes) Code Listing 5 – Dockerfile go multistage FROM golang:1.7.3 COPY app.go . RUN go build −o app app.go FROM scratch COPY −−from=0 /go/app . CMD [”./app”] 39 https://stefanscherer.github.io/use-multi-stage-builds-for-smaller-windows-images 40 Pr´esent que sur les derni`eres versions, sinon voir Builder Pattern avec un shell script Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 37 / 127
  • 38. Docker La persistance des donn´ees La persistance des donn´ees Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 38 / 127
  • 39. Docker La persistance des donn´ees Volume Outrepasser le syst`eme de COW (copy-on-write) pour profiter des performances natives d’I/O disques, Pour partager des fichiers/dossiers entre conteneurs ou hˆote vers conteneurs Utilisation du -v (–volume) Utilisation du –volumes-from Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 39 / 127
  • 40. Docker Le r´eseau Le r´eseau Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 40 / 127
  • 41. Docker Le r´eseau Network - au d´emarrage Au d´emarrage du daemon docker : cr´eation du bridge ”docker0 ” une adresse IP priv´e ainsi qu’une adresse MAC sont assign´ees au bridge configuration des tables de routage (route et iptables) Toute cr´eation de container entraˆıne la cr´eation de deux paires d’interfaces : une dans le container : eth* une autre dans la machine hˆote : veth* toutes les deux reli´ees au bridge et fonctionne comme un pipe g´en´eration d’une adresse IP ainsi qu’une adresse MAC pour le container configuration de la route par d´efaut dans le container Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 41 / 127
  • 42. Docker Le r´eseau Network Publication des ports internes : –publish-all -p x :y Liens entre conteneurs (deprecated) : docker run −d −−name mydb mysql docker run −d −−name myphp −−link mydb:mysql php docker run −d −−link myphp:php −p 80:80 my−nginx−img Isolation des r´eseaux conteneurs : docker network create −−driver overlay −−subnet 10.0.9.0/24 −−opt encrypted myApp1 docker run −d −−network myApp1 −−name mydb mysql Autre strat´egie les reverse-proxy : HAProxy, traefik, ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 42 / 127
  • 43. Docker Le r´eseau Exercice : Acc´edez `a votre application en r´eseau En utilisant l’image php :7.0-apache Afficher l’index.php contenant : < ?php echo ”Hello tout le monde”; ?> Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 43 / 127
  • 44. Docker Le r´eseau Exercice Code Listing 6 – Lancer un conteneur Php avec un montage #!/bin/bash docker run −d −P −−name my−apache−php−app −v ”$PWD”:/var/www/html php:7.0−apache Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 44 / 127
  • 45. Docker Le r´eseau Exercice : Cr´eez un Dockerfile et acc´edez `a votre application en r´eseau Partez d’une image alpine R´ecup´erez https://github.com/JohanMoreau/dev-koans/tree/ master/Python/FlaskBasic Installez pip : apk add –update py2-pip R´ecup´erez le n´ecessaire pip install –no-cache-dir -r /usr/src/app/requirements.txt Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 45 / 127
  • 46. Docker Le r´eseau Exercice Code Listing 7 – Dockerfile pour Flask # our base image FROM alpine:latest # Install python and pip RUN apk add −−update py2−pip # install Python modules needed by the Python app COPY ./requirements.txt /usr/src/app/ RUN pip install −−no−cache−dir −r /usr/src/app/requirements.txt # copy files required for the app to run COPY ./app.py /usr/src/app/ COPY ./templates/index.html /usr/src/app/templates/ # tell the port number the container should expose EXPOSE 5000 # run the application CMD [”python”, ”/usr/src/app/app.py”] Code Listing 8 – Lancer un conteneur Flask #!/bin/sh docker container run −p 8888:5000 −−name mywebapp webapppy Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 46 / 127
  • 47. Docker La s´ecurit´e La s´ecurit´e Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 47 / 127
  • 48. Docker La s´ecurit´e S´ecurit´e Produit jeune, niveau th´eorique plus faible qu’un hyperviseur Qualit´e des images, nouveaux outils : Lynis :https://cisofy.com/lynis/ Docker-bench-security :https://dockerbench.com/ Possibilit´e de limiter l’acc`es aux ressources : Seccomp 41 (profil apparmor, ...), capabilities 42 (example : cap-drop ALL , cap-add CHOWN) Registry priv´ee 41 http://training.play-with-docker.com/security-seccomp/ 42 http://training.play-with-docker.com/security-capabilities/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 48 / 127
  • 49. Docker La s´ecurit´e Public vs private Registry Private Registry : Stock et distribue les images Docker De nombreux Registry h´eberg´es disponibles : Docker Hub, AWS ECR, ... Peut ˆetre self-hosted avec plusieurs int´egrations pour le stockage : Local, AWS S3, Ceph, OpenStack Swift, ... Le hub public : D´epˆot public (push/pull gratuit) D´epˆot d’images officielles, et d’images tiers, D´epˆot priv´e (d´epˆot d’images non publiques payant) Collection de services suppl´ementaires : Automated builds (lier des d´epˆots github/bitbucket pour lancer un build suite `a un commit) Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 49 / 127
  • 50. Docker La s´ecurit´e Exercice : Private Registry Lancez une registry en localhost sur le port 5000 avec un stockage local R´ecup´erez l’image hello-world Mettre un tag sur l’image ci-dessus pour votre registry Poussez cette nouvelle image vers votre registry Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 50 / 127
  • 51. Docker La s´ecurit´e Exercice : Private Registry Code Listing 9 – Unsecure private registry language #!/bin/sh echo ’DOCKER OPTS=”−−insecure−registry 127.0.0.1:5000”’ >> /etc/docker/docker docker run −d −p 5000:5000 −−name registry v $(pwd)/registry−data:/var/lib/registry registry :2 docker tag hello −world 127.0.0.1:5000/hello−world docker push 127.0.0.1:5000/ hello −world Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 51 / 127
  • 52. Docker La s´ecurit´e Tag et espace de nom des images Les images peuvent avoir des tags : Les tags symbolisent des diff´erences de version d’une image C’est le tag :latest qui est utilis´e par d´efaut Les images disposent de trois espaces de nom : Racine : ubuntu Utilisateur et organisations : frapsoft/ts-node Auto-h´eberg´ees (le serveur) : localhost :5000/myapache Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 52 / 127
  • 53. Docker La s´ecurit´e Haute-disponibilit´e vs Migration Strat´egie : Les conteneurs ne sont pas migrables `a chaud Choix d’une architecture scalable permettant la haute-disponibilit´e, tout en n´egligeant la perte d’un noeud L’architecture logiciel doit tenir compte sur de ce design Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 53 / 127
  • 54. Docker Des exemples Des exemples Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 54 / 127
  • 55. Docker Des exemples Exemples DevOps pour ”le Dev” : Multiples environnements (tests, dev, branches, ...) Compilation/Ex´ecution multi-[os|jvm|tools|...] Utilisation de conteneurs pr´e-charg´es avec des data pour les tests Outils sp´ecifiques disponibles : plugins IntelliJ, Eclipse 43, ... pour ”l’Ops” : Rapidit´e de d´eploiement Force les bonnes pratiques (microservice, description donc documentation, ...) D´eploiement r´ecurrent de serveur Gestion des vuln´erabilit´es : mise `a jour d’une des couches, test, ... 43 https://www.voxxed.com/blog/2015/06/docker-tools-in-eclipse/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 55 / 127
  • 56. Docker Des exemples Exemple pour tout le monde Quoi : Les ´evang´elistes Docker font quasiment tout tourner en conteneur Permet de limiter la contagion virale depuis un logiciel Moyen de tester des applications en gardant un syst`eme clean Permet de garder propre l’OS sous jacent : Latex, environnement lourd, nombreuses d´ependances Exemple 44 : Latex, Irssi, Mutt, Spotify, Skype 44 https://blog.jessfraz.com/post/docker-containers-on-the-desktop/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 56 / 127
  • 57. Docker Des exemples Example : Sandbox pour navigateurs # docker run −t −i −p 22 magglass1/docker−browser−over−ssh IP address: 172.17.0.4 Password: N24DjBM86gPubuEE Firefox : ssh −X webuser@172.17.0.4 firefox Google Chrome: ssh −X webuser@172.17.0.4 google−chrome −−no−sandbox Ou via module VNC dans Chrome : https://hub.docker.com/r/siomiz/chrome/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 57 / 127
  • 58. Outils Docker Plan 1 Introduction 2 Docker 3 Outils Docker Docker Machine Docker Compose Docker Swarm Rancher Int´egration Ressources GPU SaltStack 4 Jenkins Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 58 / 127
  • 59. Outils Docker Docker Machine Docker Machine Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 59 / 127
  • 60. Outils Docker Docker Machine Docker Machine 46 Provisionne et configure Docker sur un serveur distant Fonctionne avec la plupart des cloud providers AWS / GCE / Azure / DO / IBM Fonctionne aussi avec des technologies standards OpenStack / vCenter Image from https://www.docker.com/sites/default/files/products/docker_machine.png 46 Remplace boot2docker mˆeme si celui est toujours disponible Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 60 / 127
  • 61. Outils Docker Docker Machine Docker Machine 47 docker−machine create −d virtualbox manager1 docker−machine create −d virtualbox slave1 docker−machine ssh slave1 docker swarm join ... docker−machine create −d virtualbox slave2 docker−machine ssh slave2 docker swarm join ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 61 / 127
  • 62. Outils Docker Docker Compose Docker Compose Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 62 / 127
  • 63. Outils Docker Docker Compose Docker Compose 1/2 Installation et ligne de commande Lancer une stack de conteneur via 1 fichier : docker-compose.yml ”Compose”g`ere des groupes et les liens Simplicit´e du YAML Installation et ligne de commande Installation simple docker-compose run | up | stop | rm | build Image from http://sdtimes.com/wp-content/uploads/2015/02/0226.sdt-docker-2.png Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 63 / 127
  • 64. Outils Docker Docker Compose Docker Compose 2/2 docker run −d −−name db mysql db: image: mysql environment: MYSQL ROOT PASSWORD: password docker run −d −−name phpfpm −−link db :mysql jprjr/php-fpm phpfpm: image: jprjr /php−fpm volumes: − .:/srv/http − timezone.ini :/etc/php/conf.d/timezone.ini links : − db:mysql docker run −d −−link phpfpm :phpfpm −p 80 :80 my-nginx nginx: build : . links : − phpfpm:phpfpm ports : − 80:80 Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 64 / 127
  • 65. Outils Docker Docker Compose Exercice : Docker Compose R´ecup´erez le docker-compose de sameersbn/gitlab Lancez le compose (modifications probables) Configurez votre mot de passe gitlab (Azerty123) en allant sur http ://127.0.0.1 :10080 Ajoutez jenkins :latest avec un stockage permanent et port 10081 V´erifiez que gitlab voit jenkins et inversement Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 65 / 127
  • 66. Outils Docker Docker Compose Exercice : Docker Compose wget https://raw.githubusercontent .com/sameersbn/docker−gitlab/master/docker− compose.yml Ajouter jenkins : image: jenkins ports : − ”10081:8080” − ”50000:50000” links : − gitlab : gitlab volumes: − ./jenkins :/var/jenkins home docker exec −it ci jenkins 1 /bin/bash ping gitlab docker exec −it ci gitlab 1 /bin/bash ping jenkins Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 66 / 127
  • 67. Outils Docker Docker Swarm Docker Swarm Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 67 / 127
  • 68. Outils Docker Docker Swarm Docker Swarm Docker en multihost (possiblement windows/linux) 2 versions : docker swarm et docker-swarm (ancien) docker-swarm : outil externe n´ecessisant l’utilisation d’un outil de d´ecouverte de services (consul, etcd, ...) docker swarm : int´egr´e depuis 1.12 : docker swarm init docker swarm join docker swarm ps Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 68 / 127
  • 69. Outils Docker Rancher Rancher Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 69 / 127
  • 70. Outils Docker Rancher Rancher - Basic Developp´e par RancherLabs, 100% OpenSource Outil de pilotage d’infrastructure Docker Modulaire : IHM (WebApp), Cattle, API REST, ... Mode : Serveur<->Agent(s) Support de docker-compose/rancher-compose Support de Mesos/Kubernetes/Swarm Support des principaux IaaS/PaaS via docker-machine RBAC (AD, LDAP, SHIBBOLETH, comptes locaux, Github Rancher Catalog (public ou priv´e) (d´epˆot git) Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 70 / 127
  • 71. Outils Docker Rancher Rancher - Archi Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 71 / 127
  • 72. Outils Docker Int´egration Int´egration Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 72 / 127
  • 73. Outils Docker Int´egration Int´egration 54 Divers outils : IAAS Public : Amazon AWS, Google Cloud Platform, Microsoft Azure IAAS Priv´e : OpenStack, CloudStack PAAS : Scalingo 49 ,wercker 50 ,stage1.io 51 Drone.io, Codeship, CircleCI, ... Ansible, Puppet, Chef, Salt ... Et bientˆot des nouvelles concurrences : CoreOS Rkt 52, Ubuntu LXD, systemd 49 https://scalingo.com/ 50 http://wercker.com/ 51 http://stage1.io/ 52 https ://coreos.com/rkt/docs 53 http ://0pointer.de/public/systemd-man/systemd-nspawn.html 54 http://cloudtimes.org/wp-content/uploads/2011/11/Clouds.cloudtimes-1024x787.png Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 73 / 127
  • 74. Outils Docker Ressources GPU Ressources GPU Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 74 / 127
  • 75. Outils Docker Ressources GPU Contexte graphique A titre d’information car jamais test´e : https ://github.com/NVIDIA/nvidia-docker https ://github.com/thewtex/docker-opengl-nvidia http ://gernotklingler.com/blog/howto-get-hardware-accelerated- opengl-support-docker/ Pour le partage du Display 55 : ssh dans le conteneur avec un X11 forwading vers le hˆote VNC partage du socket X11 55 http ://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 75 / 127
  • 76. Outils Docker SaltStack SaltStack Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 76 / 127
  • 77. Outils Docker SaltStack L’id´ee de SaltStack Les objectifs : Un framework d’ex´ecution `a distance Un outil de gestion de configurations/orchestration Un gestionnaire de configurations centralis´ees Quelques exemples d’utilisation : Installation d’une application utilisateur Configuration des imprimantes, des partages r´eseaux, ... Lancer des commandes sur un ensemble de machines G´erer des VM ou conteneurs (construire, lancer, arrˆeter, ...) Image from http://thomason.io/wp-content/uploads/2014/04/saltstack-logo.png Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 77 / 127
  • 78. Outils Docker SaltStack Pourquoi Salt ? Nombreuses solutions/techniques : Images disques (PXE, Ghost, ...) Scripts maisons (Python, Bash, PowerShell, ...) Logiciels de gestion de conf (CFEngine, Puppet, Chef, Ansible, ...) Le choix de Salt pour nous : Nouvelle g´en´eration d’outil (comparable `a Ansible 57 58 59 60 ) Multiplateforme (Linux, OSX, Windows), installation simple 61 Choix technologique : YAML, jinja2, 0MQ, AES256, Python, ... Communaut´e importante 62 et bonne documentation 63 57 http://ryandlane.com/blog/2014/08/04/moving-away-from-puppet-saltstack-or-ansible/ 58 https://missingm.co/2013/06/ansible-and-salt-a-detailed-comparison/ 59 http://blog.xebia.fr/2014/07/18/test-driven-infrastructure-avec-chef-episode-2/ 60 http://jensrantil.github.io/salt-vs-ansible.html 61 http://docs.saltstack.com/en/latest/topics/installation/ubuntu.html 62 http://saltstarters.org 63 http://docs.saltstack.com/en/latest/topics/tutorials/quickstart.html Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 78 / 127
  • 79. Outils Docker SaltStack Architecture Mode de fonctionnement : En solitaire (`a titre perso, ¸ca peut aider) En client-serveur (en pull ou push) : maˆıtre/larbin (master/minion) Le lexique : Grain : propri´et´es d’un larbin (OS, RAM, ...) Formule/Etat (state) : ´etats `a appliquer dans un .sls en YAML Pilier (pillar) : param`etres `a transmettre aux larbins Les commandes : Salt est con¸cu pour ex´ecuter des commandes `a distance (modules au sens python) : test.ping (module test), cmd.run (module cmd) Module important : state (gestion de configuration) Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 79 / 127
  • 80. Outils Docker SaltStack Formules simples : installation d’un paquet 64 Code Listing 10 – top.sls la racine des ´etats base: # Master base configuration ’∗’: # all minion − apache # call apache state Code Listing 11 – apache.sls fichier d´ecrivant l’´etat apache apache2: # Id, using like main parameter for this state pkg. installed # state to call : this pack must be installed 64 http://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 80 / 127
  • 81. Outils Docker SaltStack Formules simples : installation du paquet avec config. 65 66 Code Listing 12 – apache.sls fichier d´ecrivant l’´etat apache avec fichier apache2: # Id, using like main parameter for this state pkg: − installed # state to call : this pack must be installed service : − running # check if running − watch: # reload if change − file : /etc/apache2/httpd.conf /etc/apache2/httpd.conf: file .managed: − source: salt ://apache/httpd.conf # find the file on salt master − user: root − group: root − mode: 644 − require: − pkg: apache2 # update this file only if apach2 is installed 65 Le serveur Salt sert de serveur de fichier avec l’url ”salt ://” 66 http://docs.saltstack.com/en/latest/topics/tutorials/states_pt2.html Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 81 / 127
  • 82. Outils Docker SaltStack Gestion des grains 67 68 Code Listing 13 – Exemple d’´executions distantes # from master to specific minion sudo salt serveur .example.com cmd.run reboot sudo salt −G ’os:debian’ cmd.run apt−get update # from master to multiples minion sudo salt ’ serveur (01|02).example.com’ state. sls apache sudo salt −−grain−pcre ’os:(debian|ubuntu)’ state . highstate # from minion sudo salt −call −l debug state. highstate 67 Possibilit´e de tester avant ´ex´ecution en ajoutant test=True 68 aide en ligne avec sys.doc, exemple : sudo salt-call sys.doc user Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 82 / 127
  • 83. Outils Docker SaltStack Pilier/Pillar Utilit´e du pilier : D´ecouplage ´etat et param`etres : variations en fonction d’un OS, d’une distribution, etc ... S´ecurit´e : les larbins ont acc`es `a tous les ´etats, ´eviter d’y mettre des informations confidentielles Cr´eation du pilier : Mˆeme syntaxe que les recettes et pillar.get() dans les formules Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 83 / 127
  • 84. Outils Docker SaltStack Pillier simple : communaut´e snmp Code Listing 14 – snmp.sls l’´etat snmp snmpd.conf: file : − name: /etc/snmp/snmpd.conf − source: salt ://nux/snmp/files/snmpd.conf − template: jinja − context: snmpcom: {{ pillar .get(’snmpcom’, ’public’) }} Code Listing 15 – le fichier de conf snmp rocommunity {{ snmpcom }} Code Listing 16 – le fichier pillar snmpcom: myCom Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 84 / 127
  • 85. Outils Docker SaltStack Gestion de vuln´erabilit´es : exemple avec ShellShock Code Listing 17 – S´equence d’´ex´ecution salt pour ShellShock sudo salt −l debug −v −G ’kernel:Linux’ cmd.run ”env x=’() { :;}; echo bad’ bash −c ’ echo good’ 2>&1 |grep ” srv1 .domain : bad srv2 .domain : bad srv3 .domain : good srv4 .domain : bad srv5 .domain : good ... > sudo salt −l debug −v −G ’kernel:Linux’ pkg. install bash refresh =True > sudo salt −l debug −v −G ’kernel:Linux’ cmd.run ”env x=’() { :;}; echo bad’ bash − c ’echo good’ 2>&1 |grep ” srv1 .domain : good srv2 .domain : good srv3 .domain : good srv4 .domain : good srv5 .domain : good Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 85 / 127
  • 86. Outils Docker SaltStack SaltStack, c’est encore plus Une boˆıte `a outils en ´evolution : salt-syndic : mandataire pour les infrastructures lourdes returners : la suite `a vos ex´ecutions salt-cloud : pilotage des clouds priv´es et publics salt-ssh/ Salt Rosters ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 86 / 127
  • 87. Outils Docker SaltStack Saltstack vs Docker Alors on fait quoi ? En gros, on automatise avec les 2 ... Mais l’un r´epond au besoin g´en´eral et l’autre aux besoins sp´ecifiques Saltstack pour tout, mais on peut gagner du temps en d´eploiement avec Docker Id´ealement il faut pouvoir les int´egrer pour la vue d’ensemble Cela sera d’autant plus vrai avec les ´evolutions telles qu’OpenStack Docker particuli`erement utile pour la R&D et pour l’infra (la pr´eprod, les fermes 69 70 71 72 73 , serveur sans donn´ees, ...) 69 https://github.com/saltstack/salt-jenkins 70 http://www.afewmorelines.com/an-example-jenkins-job-using-saltstack-as-a-configuration-manager/ 71 http://www.afewmorelines.com/a-full-deployment-pipeline-using-vagrant-saltstack-and-jenkins/ 72 https://registry.hub.docker.com/u/maestrodev/build-agent/ 73 http://www.logilab.org/blogentry/204921 Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 87 / 127
  • 88. Outils Docker SaltStack Docker et Salt, exemple avec nodejs 1/3 Docker dans salt : Module 74 et State 75 Tr`es r´ecent, en gros avant juin 2014, difficile `a utiliser 76 77 78 Code Listing 18 – docker dans le top.sls base: ’ roles :docker ’: − match: grain − roles .docker − roles .docker−nodejs 74 http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.dockerio.html 75 http://docs.saltstack.com/en/latest/ref/states/all/salt.states.dockerio.html 76 http://serverfault.com/questions/606099/salt-cloud-docker-state-handle-volumes 77 http://thomason.io/automating-application-deployments-across-clouds-with-salt-and-docker/ 78 https://www.bountysource.com/issues/1378476-dockerio-module-can-t-get-volumes-to-work Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 88 / 127
  • 89. Outils Docker SaltStack Docker et Salt, exemple avec nodejs 2/3 Code Listing 19 – Etat salt de docker docker repo: pkgrepo.managed: − repo: ’deb http://get.docker. io/ubuntu docker main’ − file : /etc/apt/sources. list .d/docker. list − keyid: 36A1D7869245C8950F966E92D8576A8BA88D21E9 − keyserver: keyserver .ubuntu.com − require in : − pkg: mydocker mydocker: pkg: − installed − name: lxc−docker service : − running − name: docker − require: − pkg : mydocker − pip : docker−python−dockerpy Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 89 / 127
  • 90. Outils Docker SaltStack Docker et Salt, exemple avec nodejs 3/3 Code Listing 20 – Etat salt du conteneur nodejs docker docker nodejs image: docker. pulled : − name: dockerfile/nodejs − tag: latest − force: True − require: − service : mydocker docker nodejs container : docker. installed : − name: mynodejs − hostname: mynodejs − image: dockerfile /nodejs − command: /data/test.sh − detach: False − require: − docker: docker nodejs image docker nodejs running : ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 90 / 127
  • 91. Outils Docker SaltStack Salt dans docker Le salt-minion : D´eployer des images docker directement avec le client salt int´egr´e 79 80 81 82 Montage d’une maquette salt en quelques minutes : Il est possible d’installer le serveur et de nombreux clients, le tout dans des conteneurs pour tester rapidement les recettes. 83 84 79 https://github.com/toscanini/docker-salt-minion 80 https://github.com/ipmb/docker-salt-minion 81 https://github.com/kstaken/dockerfile-examples/tree/master/salt-minion 82 http://blog.xebia.com/2014/06/14/combining-salt-with-docker/ 83 http://serverfault.com/questions/587205/lxc-and-saltstack-minion-id-configuration-on-ubuntu 84 http://karlgrz.com/testing-salt-states-rapidly-with-docker/ Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 91 / 127
  • 92. Jenkins Plan 1 Introduction 2 Docker 3 Outils Docker 4 Jenkins Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 92 / 127
  • 93. Jenkins L’int´egration continue Origines du cˆot´e de Grady Booch : L’int´egration continue est un ensemble de pratiques utilis´ees en g´enie logiciel consistant `a v´erifier `a chaque modification de code source que le r´esultat des modifications ne produit pas de r´egression dans l’application d´evelopp´ee. Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 93 / 127
  • 94. Jenkins L’int´egration continue Ok il y a des outils, mais ce qui comptent ici : C’est de savoir ce qu’on a, ce qu’on veut, vers o`u on veut aller. Chacun a des projets qui sont diff´erents avec une ´equipe diff´erente, on est proche de la m´ethodologie de l’´equipe, il n’existe pas une seule mani`ere de faire avec les outils. Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 94 / 127
  • 95. Jenkins La naissance Les origines : Serveur d’int´egration continue, Ecrit en Java (Kohsuke Kawaguchi) et pour Java `a l’origine, OpenSource (licence MIT), Fork en 2011 de Hudson (Sun en 2005), plus ou moins suite au rachat par Oracle Nombreux autres outils : Cruisecontrol, Buildbot, GitLab CI, Bamboo, TFS, continuum ... Travis-ci, Heroku, Codeship, CircleCI, Drone.io, ... Image from http://mirrors.clinkerhq.com/jenkins/art/jenkins-logo/1024x1024/logo.png Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 95 / 127
  • 96. Jenkins Jenkins Outil tr`es populaire : Opensource, +300 contributeurs en 2014, java (multi-plateforme), GUI web, tableau de bord, vue d´etail d’un ”job”, Gestion des permissions (liaison ldap possible), Simple d’installation (.war, distribution linux, conteneurs, recettes, ...) avec IHM, Groovy accessible depuis quasiment partout dans Jenkins, Base de plugins la plus importante dans ce domaine : > 1500 plugins Base d’installations tr`es large, sur des sites tr`es importants : PayPal 86 : 40 000 jobs, 12 000 builds/jours 86 https://www.cloudbees.com/sites/default/files/how_to_train_your_jenkins-manivannan.pdf Image from https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/ 200px-Groovy-logo.svg.png Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 96 / 127
  • 97. Jenkins Exemple de gui Jenkins 88 88 https://ci.inria.fr/pharo Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 97 / 127
  • 98. Jenkins Plugins Jenkins Plugins en tout genre : Outils de constructions, Outils d’analyse de code, Outils de gestion de sources, Outils de gestion de configurations, de VM, de conteneurs, ... Jenkins Swarm 89 : Plugin d’auto-d´ecouverte du master pour les esclaves, Pr´evu pour la gestion des clusters, ... Jenkins est capable d’installer ses plugins tout seul. Jenkins est capable de lire sa configuration de job depuis un fichier. 89 https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 98 / 127
  • 99. Jenkins Les plugins Leur installation : T´el´echarg´e depuis https://updates.jenkins-ci.org Peuvent-ˆetre install´es depuis l’IHM ou en CLI Leur cr´eation : Nombreux tuto M´ecanismes de d´ependances pour aller vite au fonctionnel Architecture de tests et distribution propos´e par la communaut´e Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 99 / 127
  • 100. Jenkins Jenkins en 2016/2017 Aujourd’hui : A d´epasser le stade du simple outil d’int´egration continue ; Certains l’utilisent aussi pour la gestion des artefacts et le d´eploiement continue ; Devient un outil d’orchestration `a part enti`ere (discutable) Les droits des jobs ne sont pas n´ecessairement ceux du d´epˆot de sources 2 limites d´ebut 2016 : Pour ceux qui veulent un job de CI li´e au code sources ... Jenkins pipeline IHM discutable ... Blue Ocean Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 100 / 127
  • 101. Jenkins Liaison possible avec GitLab 90 mkdir jenkins redis postgresql gitlab registry helloWorldC Ajouter la registry dans le docker-compose.yml pr´ec´edent (attention au cˆot´e insecure `a ajouter au d´emon si ce n’est pas fait) Bien utilis´e Azerty123 comme password, root comme user (mail root@root.com) Au lancement de Jenkins, ne garder que les plugins ”Pipeline”et git Ajouter `a Jenkins, les plugins ”Self-Organizing Swarm Plug-in Modules”, ”Config File Provider Plugin”et ”Gitlab Plugin” Naviguer dans les menus Gitlab et Jenkins 90 https://github.com/jenkinsci/gitlab-plugin Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 101 / 127
  • 102. Jenkins La console Outil pratique pour comprendre l’´etat du serveur ou automatiser quelques tˆaches (administration, qualit´e, ...). Aller dans ”Administrer Jenkins”, puis ”Console de script”. Code Listing 21 – Ping en groovy avec retour std du shell println ”ping −c1 gitlab”.execute() . text Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 102 / 127
  • 103. Jenkins Les esclaves Les esclaves : On peut travailler sur le serveur, mais ce n’est pas une bonne pratique. Il existe plusieurs types d’esclaves : ssh, jnlp, swarm Exemple pour un swarm c/c++ en docker : heliostech/jenkins-slave-gcc :centos-7 -master Exercice ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 103 / 127
  • 104. Jenkins Exercice : jenkins swarm c/c++ en docker Code Listing 22 – Conteneur Jenkins Swarm avec env C #!/bin/sh docker run −v ”$PWD”/jenkins/.ssh:/home/jenkins−slave/.ssh:ro −−name slaveC −−rm −−network ci default −d heliostech/jenkins−slave−gcc:centos−7 −master http:// jenkins:8080/ −username root −password ”Azerty123” −executors 2 −labels ”linux centos−7−gcc” Attention au network, cela doit ˆetre le mˆeme que celui de votre docker-compose Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 104 / 127
  • 105. Jenkins Notre 1er code jenkins Il nous faut un bout de code ! Code Listing 23 – HelloWorld en C++ #include <iostream> int main() { std :: cout << ”Hello, world!” << std::endl; } Code Listing 24 – Makefile HelloWorld.cpp all : g++ main.cpp −o hello Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 105 / 127
  • 106. Jenkins Droits minimaux 91 Il va nous falloir : un token gitlab (cr´eation) pour que jenkins (enregistrement) puisse acc´eder `a l’interface Gitlab une cl´e SSH depuis Jenkins (cr´eation) vers GitLab (enregistrement) pour la r´ecup´eration du code Copies d’´ecrans dans les slides suivantes. 91 https://medium.com/@teeks99/continuous-integration-with-jenkins-and-gitlab-fa770c62e88a Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 106 / 127
  • 107. Jenkins Cˆot´e Gitlab Allez dans votre paramˆetres (en haut `a droite). ”Access Token”: pour la cr´eation de votre token ”SSH Keys”: pour l’enregistrement de votre cl´e SSH Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 107 / 127
  • 108. Jenkins Cˆot´e Jenkins Allez dans ”Administrer Jenkins” ”Configure Credentials/Identifiants/System/Identifiants globaux/Ajouter Ajouter le token Gitlab et la cl´e SSH Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 108 / 127
  • 109. Jenkins Cˆot´e Jenkins En synth`ese cela devrait au ”Credentials”ci-dessous Le token peut ˆetre test´e dans ”Administrer Jenkins/Configurer le syst`eme” Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 109 / 127
  • 110. Jenkins Droits Jenkins/Gitlab - Exercice Aller sur votre profil Gitlab et r´ecup´erez la commande openssl pour cr´eer votre cl´e Faite un docker exec sur le conteneur jenkins et ex´ecutez la commande (copier le contenu de .ssh/id rsa.pub) Faire un test avec ssh git@gitlab Aller sur votre profile Gitlab et cr´eer un token pour jenkins Aller dans la configuration de Jenkins, cr´eez et testez une connection Gitlab Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 110 / 127
  • 111. Jenkins API - Jenkins Code Listing 25 – Create a job with Jenkins API #!/bin/sh if [ $# −ne 4 ] then echo ”No arguments supplied” echo ”1st argument : is your Jenkins user” echo ”2nd argument : is your Jenkins password” echo ”3th argument : is your job” echo ”4th argument : is the jenkins type of your job [ freestyle | pipeline ] ” exit 1 fi USER=$1 APITOKEN=$2 JOB=$3 GROOVYSCRIPT=list−jobs.groovy SERVER=127.0.0.1:10081 CRUMB=‘curl ”http://$USER:$APITOKEN@$SERVER/crumbIssuer/api/xml/?xpath=concat (//crumbRequestField,%22:%22,//crumb)”‘ curl −v −X POST −−data−binary ”@Jenkins/””$4””.xml” −H ”Content−Type:application/ xml” −H ”$CRUMB” ”http://$USER:Azerty123@$SERVER/createItem?name=$JOB” Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 111 / 127
  • 112. Jenkins API - Gitlab Code Listing 26 – Create a project with GitLab API #!/bin/sh if [ $# −ne 2 ] then echo ”No arguments supplied” echo ”First argument is your GitLab token” echo ”Second argument is your new project” exit 1 fi curl −−header ”PRIVATE−TOKEN:$1” −X POST ”http://127.0.0.1:10080/api/v3/projects? name=$2” IDS=‘curl −−header ”PRIVATE−TOKEN:$1” GET ”http://127.0.0.1:10080/api/v4/projects? search=$2&simple=true”‘ ID=‘echo ”$IDS”|tr ”, ” ’n’| sed −e ”s/”//g”|grep ”id : ”|sed −e ’s/[{id ://’‘ curl −−header ”PRIVATE−TOKEN:$1” −X POST ”http://127.0.0.1:10080/api/v4/projects/ $ID/hooks?url=http://jenkins:8080/project/$2&push events=true&token= d738cdacfb22fcce95ae5cfa7c065972” Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 112 / 127
  • 113. Jenkins API - Les 2 en mˆemes temps Code Listing 27 – Appel les 2 pr´ecedents scripts #!/bin/bash if [ $# −ne 5 ] then echo ”No arguments supplied” echo ”1st argument : is your Jenkins user” echo ”2nd argument : is your Jenkins password” echo ”3th argument : is your Gitlab token” echo ”4th argument : is your job/project ” echo ”5th argument : is the jenkins type of your job [ freestyle | pipeline ] ” exit 1 fi ./ Gitlab/ gitlabcreateProject .sh $3 $4 ./Jenkins/ jenkinscreateJob .sh $1 $2 $4 $5 Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 113 / 127
  • 114. Jenkins Job Jenkins De quoi s’agit-il ? Projet de travail pouvant (mais pas n´ecessairement) ˆetre li´e `a un d´epˆot de sources Les jobs peuvent travailler ensemble Les droits des jobs ne sont pas n´ecessairement ceux du d´epˆot de sources Il existe plusieurs type de job : Principalement : ”freestyle”et ”pipeline” Multibranch Pipeline, Folder, ... Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 114 / 127
  • 115. Jenkins Job freestyle - cr´eation Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 115 / 127
  • 116. Jenkins Job freestyle - param Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 116 / 127
  • 117. Jenkins Exercice Cr´eer un projet test1 sur gitlab, cr´eer un job freestyle test1 sur jenkins Lier Jenkins/Gitlab Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 117 / 127
  • 118. Jenkins Pipeline 2 versions : Imperative (aka scripted) Pipeline (2016) Declarative Pipeline (2017) Jenkins Jobs as Code : Jenkinsfile Proche d’un travis.yml ou d’un .gitlab-ci.yml Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 118 / 127
  • 119. Jenkins Pipeline C++ Code Listing 28 – Pipeline CPP node(”centos−7−gcc”) { stage (’checkout’) { checkout([ $class : ’GitSCM’, userRemoteConfigs: [[ credentialsId : ’sshkey ’, url : ”ssh:// git@gitlab /root/test . git ”]] ])} stage (’make’) { gitlabCommitStatus(”build ”) { sh ”make” } } } Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 119 / 127
  • 120. Jenkins Pipeline avec exception et documentation Code Listing 29 – Pipeline avec exception et doc html node (”Ubuntu && amd64”) { checkout scm stage (’ build ’) { try { sh ’make’ } catch( err) { currentBuild . result = ’UNSTABLE’ publishArtifacts(’err.log ’) throw err } } stage (’ test ’) { sh ’make test’ } step ([ $class : ’JavadocArchiver’, javadocDir: ”target/ site ”, keepAll : true ]) } Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 120 / 127
  • 121. Jenkins Declarative pipeline Junit Code Listing 30 – Declarative Pipeline Junit pipeline { agent { docker ’maven:3.3.3’ } stages { stage (’ Build ’) { steps { git url : ’http://github.com/JohanMoreau/JunitTest.git’ sh ”mvn −B clean install −Dmaven.test.failure . ignore=true” }} stage (’Archive’) { steps { junit ’∗∗/target/ surefire −reports/TEST−∗.xml’ sh ’ ls −al target /’ archive ’ target /∗. jar ’ }}} post { always { deleteDir () }} }Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 121 / 127
  • 122. Jenkins Pipeline Docker Code Listing 31 – Pipeline Docker node(’docker’){ stage (’Checkout’) { git url : ’http://github.com/JohanMoreau/dev−koans.git’ } stage (’ Build docker’) { sh(”cp Docker/webapppy/Dockerfile Python/FlaskBasic/”) sh(”cd Python/FlaskBasic && ls −al && docker build −t webapppy . ”) } } Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 122 / 127
  • 125. Jenkins Alors Jenkins pour vous ? Pas simple ? Il peut sembler plus complexe que GitLab-ci (si on a un GitLab), donc pour un petit projet avec du build+test+doc sans historique, Jenkins est peut-ˆetre plus lourd Mais pas si complexe et adaptable `a tous les processus de d´eveloppement : Outil ancien qui a r´eussi `a s’adapter r´eguli`erement Tr`es bien connect´e aux communaut´es (Sonar, Nexus, Docker, OpenStack, ...) Liaison entre les jobs et vision d’ensemble Possibilit´e de franchir l’´etape et d’aller vers du d´eploiement continue 94 95 (si possible avec un outil interm´ediaire : SaltStack/Ansible, Rancher/Kubernetes, ...) 94 Continuous Delivery = Continuous Integration + tests fonctionnels automatiques 95 Continuous Deployment = Continuous Delivery + d´eloiement automatique en production Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 125 / 127
  • 126. Jenkins Deploiement continue Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 126 / 127
  • 127. Jenkins Le document : Cette pr´esentation a ´et´e faite avec des outils opensource et libre dans le but de pr´esenter des outils de construction d’applications eux-aussi opensource. N’h´esitez pas `a m’envoyer vos remarques ou corrections sur johan.moreau sur gmail.com Ce document est distribu´e sous licence Creative Commons Attribution-ShareAlike 2.0 Johan Moreau (IRCAD/IHU) Int´egration continue 29 mai 2017 127 / 127