testcontainers / testcontainers/testcontainers-java
Container lifecycle management as Maven and Gradle plugins
Personne n'a encore pris cette issue.
- Langage dominant
- Java
- Étoiles
- 8.7k
- Forks
- 1.9k
- Merge moyen
- 2 j 17 h
- PR mergées (30 j)
- 9
Description
In jOOQ, one of the most re-occurring ideas is that jOOQ should tightly couple Testcontainers, Flyway/Liquibase and jOOQ's code generation. See e.g. https://github.com/jOOQ/jOOQ/issues/6551
This coupling is obviously a bad idea, because the glue code is only a few lines of code, but to make it sufficiently configurable on behalf of all 3 involved products, we'd have to go through a lot of hassle. Much better if all 3 products could be configured completely independently in a CI/CD pipeline.
This is already possible for Flyway/Liquibase and jOOQ, both in Maven and Gradle, but I think it's not trivial to do for Testcontainers yet? What I'd love to see is to have Maven and Gradle plugins available that would allow for controlling the lifecycle of a test container instance in a build, for example (in pseudo-Maven):
<plugins>
<!-- Start the database container -->
<plugin>
<artifactId>testcontainers-postgres-maven<artifactId>
<phase>initialize</phase>
<goal>start</goal>
</plugin>
<!-- Apply all schema migrations -->
<plugin>
<artifactId>flyway-maven<artifactId>
<phase>initialize</phase>
</plugin>
<!-- Generate jOOQ sources -->
<plugin>
<artifactId>jooq-codegen-maven<artifactId>
<phase>generate-sources</phase>
</plugin>
<!-- Stop the containers -->
<plugin>
<artifactId>testcontainers-postgres-maven<artifactId>
<phase>post-integration-test</phase>
<goal>stop</goal>
</plugin>
</plugin>
I don't think Maven has an equivalent of Java's finally clause (i.e. a phase that runs at the end irrespective of how many phases were run), so if the post-integration-test phase isn't reached, then the containers won't stop, but that can be handled:
- E.g. they could stop at the latest when the build VM terminates (might be possible?)
- Gradle might not have this problem
- The start goal could reset the container first, if it is already running
- They could use Maven profiles for the whole thing and put all 4 plugin executions in there
There are many details to flesh out, but you get the idea. I think the sort of versatility this offers to highly generic, configurable builds would be yet another killer feature for testcontainers, not just for testing, but for CI/CD pipelines in general.
I've found an example project here, that does something like what I have in mind:
https://github.com/squark-io/testcontainers-maven-plugin
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par examiner l’exemple lié squark-io/testcontainers-maven-plugin et les exigences de cycle de vie décrites ici pour Maven et Gradle. Définissez comment les objectifs configurables de démarrage et d’arrêt des conteneurs doivent s’intégrer aux phases de build, y compris le nettoyage lorsque le build se termine prématurément ; le travail est considéré comme terminé lorsque les deux intégrations de plugins prennent en charge le cycle de vie proposé indépendamment de Flyway, Liquibase et jOOQ.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- docker, java
- Domaine
- build-system, devops, testing
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- Active
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100