Cet article fait suite à Tests End-to-End avec Docker parties 1 & 2.

Cette 3 ième partie montre comment intégrer le build des images docker dans la phase package de l’outil de build Maven.

L’exemple complet est disponible sur github (branche e2e-docker-maven).

Voir le README pour lancer le test E2E, l’exemple a été testé sous Mac OS avec Docker for Mac .


Explication de ce qui change par rapport à l’approche de construction des images sans Maven

  •  Build avec maven package construit le packaging du batch et de la restapp, mais aussi les images docker
  • Ajout de la configuration du Docker maven plugin de fabric8 dans le pom.xml du batch
<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.15.16</version>
    <configuration>
        <verbose>true</verbose>
        <images>
            <image>
                <name>springbatch-sample:latest</name>
                <build>
                    <dockerFile>Dockerfile</dockerFile>
                    <assembly>
                        <descriptorRef>artifact</descriptorRef>
                    </assembly>
                </build>
            </image>
        </images>
    </configuration>
    <executions>
        <execution>
            <id>build</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  • Utilisation du Dockerfile dans répertoire par défaut src/main/docker
  • L’assembly prédéfinit artifact récupère le package jar spring boot afin de le copier dans l’image
    • dans Dockerfile on a « COPY maven/springbatch-sample*.jar /springbatch-sample.jar »
  • Exécution du goal build est liée à la phase package de maven

Dans le pom.xml de la restapp, le principe est le même que pour le batch

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.15.16</version>
    <configuration>
        <verbose>true</verbose>
        <images>
            <image>
                <name>spring-boot-sample:latest</name>
                <build>
                    <dockerFile>Dockerfile</dockerFile>
                    <assembly>
                        <descriptorRef>artifact</descriptorRef>
                    </assembly>
                </build>
            </image>
        </images>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Script résultant de build des images

mysql=$1
batch=$2
restapp=$3

cd $mysql && docker build -t mysql-sample:latest .
cd $batch && mvn clean package
cd $restapp && mvn clean package

Les autres phases ne sont pas remaniées par rapport à la partie 2

Le docker maven plugin de fabric8 permettrait aussi de lancer les containers dans la phase verify d’un build maven mais dans le cas présent cela ne rentre pas dans le pipeline qui est définit par la séquence suivante

  • build image mysql avec ses schémas
  • package batch & build image docker
  • package restapp & build image docker
  • pre e2e = run containers docker 
    • cette étape de préparation est responsable d’orchestrer les containers
    • renseigner l’environnement à utiliser
    • insérer les données initiales via le batch
  • e2e tests
  • post e2e = stop containers
Publicités