Présentation au Jug de Nantes le 15 mai 2017
Si vous croyez que Docker et les Pipelines ne servent qu'aux chargements et transport de conteneurs, Jenkins, votre fidèle serviteur, vous montrera comment en tirer le meilleur parti.
Conférence donnée au JUG Nantes, mai 2017
3. Guillaume Membré
Consultant et formateur chez Zenika Nantes
Mise en place de démarche DevOps
Développeur Java depuis 10 ans, en transition
sur du grails
Mes hobbies : DIY, Raspberry Pi, Arduino
Me suivre :
◇ @GuillaumeMembre
◇ http://www.monbook.tech
7. Besoins couvert par les
pipelines
◇ Process de construction scripté et
◇ Orchestre les différentes étapes de build
◇ Feedback à chaque étape : Fail fast, fail often
◇ Versionné avec les sources du projet
◇ Hier, l’enchainement des jobs étaient implicites ⇒
aujourd’hui, c’est codé
9. Conteneurs
● Isolation d’environnement
● Jetable
● Dé-corrèle la version de l’OS des outils de build
● Permet d’introduire des nouveaux outils sans
impacter les existants
⇒ Les utiliser comme environnement de compilation
mvn, go, gcc, node, ...
10. Conteneurs dans le
pipeline
Checkout Compile Deploy IntUnit Tests
Func Tests //
Load Testing
Deploy Prod
Integration tests Deploy Q/A
Perform
Release
Ready ?
Image applicative
version 1.2.3
13. Pipeline as code
● En cours de maturation (~1½ ans)
○ Renommé en Jenkins Pipeline - Janv 2016
● DSL en groovy pour définir des workflows CI/CD
● Versionné avec les sources de l’application
⇒ Jenkinsfile
● Mutualisable entre projets pour l’industrialisation
● Documentation rapidement obsolète
15. 2 DSL
◇ Declarative pipeline
■ Structure similaire à un job freestyle
■ Adapté aux processus simples
◇ Scripted Pipeline
■ Accès au DSL complet
■ Permet de tout faire
18. Documentation
◇ Step enrichis avec des plugins
◇ Documentation disponible
■
■ https://jenkins.io/doc/pipeline/steps/ ou
19. Limites
◇ DSL et groovy à apprendre
◇ Nécessite une adaptation de
tous les plugins existants
◇ Plugin Chuck Norris non porté
◇ Ne se teste pas en TU
20. Docker
Une image par outil de build :
◇ mvn:3.3.9-jdk-7
◇ golang:1.7.5
◇ gcc:6.3.0
◇ node:7.7.2
◇ sonar
◇ ...
22. ◇ Jenkins est lancé dans un conteneur
◇ Jenkins lance un conteneur pour faire de la compilation
◇ Question : comment lancer un conteneur à partir d’un
conteneur ?
■ Docker in Docker
■ Docker out of Docker
Inception
◇ Jenkins est lancé dans un conteneur
◇ Jenkins lance un conteneur pour faire de la compilation
◇ Question : comment lancer un conteneur à partir d’un
conteneur ?
■ Docker in Docker
■ Docker out of Docker
23. Docker in Docker
◇ Instancier un démon docker dans un conteneur
⇒ Besoin d’être en mode privileged
⇒ Idée suivante : partager la registry locale avec la
machine hôte
Démon Docker
Jenkins
Mvn
Démon Docker
Mvn
25. Docker out of Docker
Appeler le démon Docker de la machine hôte depuis le conteneur
Démon Docker
Jenkins Mvn
Mvn
26. Slave Jenkins
Plusieurs strategies de lancement :
◇ ssh sur une machine distante
◇ Jenkins Swarm plugin
◇ Conteneur Jenkins Swarm plugin
27. Multi branche
◇ Développement par feature ⇒ multiplication des branches
◇ Besoin d’un job / branche
◇ Copier / coller fastidieux
⇒ Nouveau type de job Multi branche pipeline
28.
29. A propos de cette démo
◇ Difficultés avec Docker for Mac :
■ Mapping des users entre un conteneur et l’hôte
■ Montage des volumes
◇ Finalement : VM Debian avec Virtualbox
■ Jenkins dans un conteneur
■ Slave en ssh natif