GitLab CI -Integrationstests für das Spring Maven -Projekt mit PSQL -Datenbank im Docker -ContainerJava

Java-Forum
Anonymous
 GitLab CI -Integrationstests für das Spring Maven -Projekt mit PSQL -Datenbank im Docker -Container

Post by Anonymous »

TLDR: < /strong>
Ich habe eine Spring -Boot -Anwendung, die lokal mit einer Datenbank in einem Docker -Container verbindet und einige Integrationstests in der CI -Pipeline durchführen möchte, aber nicht mit dem DB eine Verbindung herangeschlossen werden kann, wenn ich meine Gitlab -Pipeline ausführe. /> Für mein Projekt -Setup, für das ich eine CI -Pipeline mit GitLab erstellen möchte: < /p>

Java Spring -Boot -Anwendung mit Maven < /li>
PSQL -Datenbank, die lokal in einem Dokorcontainer ausgeführt werden. Tabellen) < /li>
Das Projekt enthält eine Einheit und Integrationstest, die die Anwendung testet (Integrationen verbinden sich auch mit dem DB) < /li>
< /ul>
Jetzt möchte ich eine grundlegende CI -Pipeline erstellen, die das Maven -Projekt zuerst erstellt und testet, wenn dies funktioniert. Und danach sollte es die Maven -Tests ausführen, um die Anwendung zu testen. Befolgenvariables:
DOCKERFILE_DIR: src/main/resources/docker

stages:
- .pre
- build
- test

Build DB docker-container:
stage: .pre
image: docker:28.0.4
rules:
- changes:
- $DOCKERFILE_DIR/**
services:
- docker:28.0.4-dind
script:
- cd $DOCKERFILE_DIR
- echo $CI_REGISTRY_PASSWORD | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin
- docker build -f Dockerfile -t $CI_REGISTRY_IMAGE/cookbook-db .
- docker push $CI_REGISTRY_IMAGE/cookbook-db

mvn compile:
stage: build
image: maven:3.9.9-eclipse-temurin-21
script:
- mvn clean compile
artifacts:
paths:
- target/

mvn test:
stage: test
image: maven:3.9.9-eclipse-temurin-21
services:
- name: $CI_REGISTRY_IMAGE/cookbook-db
alias: cookbook-db
script:
- mvn verify -Dspring.profiles.active=ci
artifacts:
when: always
reports:
junit: target/surefire-reports/*.xml
< /code>
und meine Anwendung.spring.datasource.url=jdbc:postgresql://localhost:5432/cookbook-db
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=org.postgresql.Driver
< /code>
Application-ci.properties (um die DataSource-URL für die Pipeline zu überschreiben) < /p>
spring.datasource.url=jdbc:postgresql://cookbook-db:5432/cookbook-db
< /code>
Meine Dockerfile Ich habe derzeit: < /p>
FROM postgres
ENV POSTGRES_DB=cookbook-db
COPY 01_init-db.sql /docker-entrypoint-initdb.d/
COPY 02_load-data-db.sql /docker-entrypoint-initdb.d/

ENTRYPOINT ["docker-entrypoint.sh"]
< /code>
Wenn die Pipeline ausgeführt wird, fällt es bei der Teststufe mit den Integrationstests (Unit-Tests perfekt). Der Fehler, den ich erhalte, ist, dass keine Verbindung zu den Abfragemetadaten gemacht werden kann und daher keine Verbindung zum DB hergestellt und die Integrationstests fehlschlagen, da der Anwendungskontext nicht gestartet werden kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post