# Obtenir des feedbacks de tous vos personas plus rapidement en s’appuyant sur Docker
Qui sommes nous?
Emmanuel Duchastenier
Laurent Leseigneur
@LLeseigneur @bonitasoft
Sommaire
Fluidifier la production de la documentation
Fiabiliser les tests d'intégration avec Docker
Faciliter les démos grâce au déploiement continu
Glossaire
Docker
Glossaire
Jenkins
Glossaire
Github / Pull Request
Glossaire
Markdown
Format d'écriture d'un document texte avec mise en forme légère
```markdown
An h1 header
============
Paragraphs are separated by a blank line.
2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists
look like:
* this one
* that one
* the other one
```
Fluidifier la production de la documentation
## Fabriquer la documentation
* basée sur Drupal personnalisé par l’IT
* une seule personne met à jour la doc
* versioning compliqué
* mise en production peu fréquente et douloureuse
* accès utilisateur fermé par login
Frustrations
On ne se sent pas propriétaire du contenu de la doc.
Reports douloureux. Oublis fréquents.
Pas d'aperçu du rendu final avant sa réelle publication.
![Thinking](images/monkey_thinking.jpeg)
## Nécessité de changer le processus
## Janvier 2016, la documentation passe en Open Source
* suppression du login obligatoire: indexation possible par les moteurs de recherche
* meilleur moteur de recherche intégré au site
## Oui, mais pour qui?
![Personas](images/personas.png)
Personas
Richard
Utilisateur (payant / de la communauté) qui lit la doc en ligne. Consommateur du contenu.
MANU
Développeur de la R&D qui maintient la doc à jour. Producteur de contenu.
Marielle
Support client / consultant qui fait face aux clients perdus dans la doc.
Elle facilite l'amélioration de la qualité du contenu.
## Yapluka!
### Tout le contenu passe sous Contrôle de Version: Github
* flux standard de contribution / revue de contenu
* écrit en [markdown](https://fr.wikipedia.org/wiki/Markdown) en remplacement du ~~HTML~~.
* Pull Request (PR) exclusivement
* la PR est revue par Marielle
### toute PR déclenche une construction
sur l'environnement d'intégration continue
![Github Diff](images/doc.rd.lan.png)
* Le HTML est généré
* le site est publié dans un nouveau conteneur
![Github Diff](images/Jenkins_build_result.png)
### Tout le site est alors consultable
![Github Diff](images/documentation_PR_site.png)
### Github est notifié du résultat du build
![Github Diff](images/Github_checks.png)
### Une notification est envoyée sur l'outil de messagerie
* pour chaque PR créée ou commentée
* pour chaque PR fermée (acceptée ou refusée)
* pour chaque mise en Pre-Prod / Prod
![Github Diff](images/slack-doc-prod.png)
## Dans la foulée
### On automatise la mise en pré-production / production
## Mais... mais... mais
## mais c'est génial!
### Les effets secondaires
### Séparation entre contenu et présentation
Sur une PR: code source, sans rendu final
![Github Diff](images/github_diff.png)
## Mise en Production
Aujourd'hui, mettre en production une nouvelle version, c'est:
* merger une PR dans la branche 7.6
* attendre 2 minutes
Bénéfices visibles pour nos Personas
Richard
doc fréquemment mise à jour
une version Bêta sort avec sa doc
Bénéfices visibles pour nos Personas
Marielle / Manu
cycle court de correction et de mise en prod
traçabilité des modifications
Bénéfices visibles pour nos Personas
Manu
même cycle de travail que sur du code produit: Java, JS, Groovy, etc…
report d’une version sur l’autre simplifié: git merge
Bénéfices visibles pour nos Personas
Marielle
elle s’est formée à Git et aux Pull Request Github
## Sous le capot
### 1 build = 1 site complet
* généré en HTML à partir de Markdown
* pour chaque version du produit
### Déclenchement du build des PR
* Jenkins Organization plugin
* Jenkinsfile dans le repository Github
Rebuild la PR si commits complémentaires
Image Docker mise à jour. Feedbacks très courts.
### Publication dans un conteneur Docker
* sur 1 port dédié (numéro de la PR)
* même chaîne de build que la Prod
* le conteneur Docker est supprimé si la PR est fermée
## Bilan
* PR mergée: dispo en prod en moins de 2 minutes
* rendu identique
* plus de 370 PR = 370 mises en prod (depuis Janvier 2016)
Autonomie de l'équipe
Personas satisfaits
Fiabiliser les tests d'intégration avec Docker
Bonita doit tourner sur
H2 en mode émulation est rapide, mais ne valide pas la compatibilité sur les
autres DB vendors.
Personas
Manu
R&D: En charge du produit et de sa qualité
Chuck
IT: L'homme qui parle à l'oreille des serveurs
Avant
## Ce qu'on a mis en place
Utilisation d’images docker déjà ajustées pour nos besoins
### Image Docker
La **configuration** est déjà dans l'image
l'outil de build, le job à jouer sur l'Intégration
Continue et son déploiement sont dans le même repository GIT que le code source
Big Picture
## Build wrapper ?
* la bonne version de l'outil de build incluse dans la conf
* build identique localement et sur l'Intégration Continue
* plus besoin d'installer maven ou gradle
## Docker compose
* plusieurs conteneurs reliés entre eux
* sous-réseau partagé
* partage de répertoires (volumes)
* ordre de démarrage selon les dépendances
Tests utilisateur avec la user story incluant un changement d'ergonomie
Bénéfices visibles pour nos Personas
Philippe
la dernière version du produit toujours disponible pour une démo
un environnement avec des données consistantes
Bilan
## Les choses à améliorer
* temps de démarrage de certaines base de données (O....E)
* monitorer l'espace disque consommé par Docker
## Leçons apprises
* tout scripter
* idéalement dans le même repository
* utiliser la même version de Docker / Jenkins partout
* controler le démarage avec la commande healthcheck
## Références
* Site de la doc Bonita: http://documentation.bonitasoft.com
* Plugin Maven Docker: [Fabric8](https://maven.fabric8.io/)
* Plugin Gradle pour Docker: [gradle-docker-plugin](https://github.com/bmuschko/gradle-docker-plugin)
* Image officielle docker avec des vrais morceaux de [Bonita](https://hub.docker.com/_/bonita/)
* Cette [présentation](https://laurentleseigneur.github.io/agile-grenoble-2017/): https://github.com/laurentleseigneur/agile-grenoble-2017