## RETOUR D’EXPÉRIENCE SUR L’UTILISATION DE DOCKER PAR UNE ÉQUIPE R&D Emmanuel Duchastenier Laurent Leseigneur @Bonitasoft
# Tests d'intégration sur différentes bases de données
Bonita supporte Oracle, PostgreSQL, MySQL, SQL Server.
H2 en mode émulation est rapide, mais ne valide pas la compatibilité sur les autres DB vendors.

Bonita doit tourner sur

Avant

## Ce qu'on a mis en place Utilisation d’images docker déjà tunées pour les bases de donnée supportées.
## Ce qu'on a mis en place La **configuration** est déjà dans l'image ```shell #!/bin/bash #max_prepared_transactions sed -i "s/^.*max_prepared_transactions\s*=\s*\(.*\)$/max_prepared_transactions = 100/" "$PGDATA"/postgresql.conf ```
## Ce qu'on a mis en place Les **schémas / databases** nécessaires sont déjà dans l'image Les **users** de connexion sont déjà dans l'image ```sql CREATE ROLE bonita LOGIN PASSWORD 'bpm'; CREATE DATABASE bonita WITH OWNER = bonita ENCODING = 'UTF8' TABLESPACE = pg_default CONNECTION LIMIT = -1; ```
## Ce qu'on a mis en place Possibilité de précharger des données à partir d'un dump ``` #!/bin/bash if [ -f /opt/bonita/dump/bonita.dump ]; then psql -h localhost -p 5432 -Ubonita bonita < /opt/bonita/dump/bonita.dump date > /var/lib/postgresql/restore.lastExecution echo "Database restored" fi ```
A chaque lancement des tests d'intégration, on lance un nouveau conteneur Docker


    io.fabric8
    docker-maven-plugin
    0.18.1

A chaque lancement des tests d'intégration, on lance un nouveau conteneur Docker


  
    <image>
      ${docker-mysql-image}
      
        
          root
        
        
          db.random.port:3306
        
      
    </image>
  

## Comment? * Activation par profils maven (1 profil pour chaque DB vendor) * Idem avec plugin gradle
## Tips: scalabilité Le plugin Maven permet de choisir un port aléatoire. Plus de conflit de ports. ![pigs rushing](images/pig_rush.jpg)
## Tips: Healthcheck Docker permet de s'assurer que l'image est up & running avant de lancer les tests ``` FROM postgres:9.3 MAINTAINER Laurent Leseigneur # restore dump on startup if dumpfile is present VOLUME /opt/bonita/dump COPY 0_init-databases.sql /docker-entrypoint-initdb.d/0_init-databases.sql COPY 1_set-max_prepared_transactions.sh /docker-entrypoint-initdb.d/1_set-max_prepared_transactions.sh COPY 2_restore_dump.sh /docker-entrypoint-initdb.d/2_restore_dump.sh COPY healthcheck.sh /usr/local/bin/healthcheck.sh HEALTHCHECK --interval=5s --retries=120 CMD ["/usr/local/bin/healthcheck.sh"] ```
# Bénéfices * env. clean avant chaque lancement * lancement en local pour debugguer * La R&D est complètement autonome
# Limitations Pas d'image docker pour MS SQL Server (compatible avec bonita). Ces tests tournent toujours "à l'ancienne".
## Questions? / Réponses! Merci de votre attention.
## Références Plugin Maven Docker: [Fabric8](https://maven.fabric8.io/) Plugin Maven 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/human-talk-nov-2017/): https://github.com/laurentleseigneur/human-talk-nov-2017