ci(e2e): отдельный maven-e2e job + surefire profile e2e
ordinis-app/pom.xml: - surefire excludes **/e2e/*E2ETest.java по умолчанию (быстрые unit без Docker) - profile `e2e`: combine.self override снимает excludes + includes только e2e .gitlab-ci.yml: новый job maven-e2e: - maven image + docker:29.1.2-dind service (тот же что docker-* jobs) - DOCKER_HOST=tcp://docker:2375, TESTCONTAINERS_HOST_OVERRIDE=docker, RYUK_DISABLED=true - mvn -pl ordinis-app -am -P e2e test - artifact: junit reports - rules: backend-changes (как maven-test) Локально: mvn -pl ordinis-app -am test # быстро, без Docker mvn -pl ordinis-app -am -P e2e test # с Docker, ~23 sec для 12 тестов В CI оба job'а параллельно после path-filter. e2e будет ловить регрессии типа audit_log INET/scope filter gap которые мы уже нашли через эти тесты.
This commit is contained in:
@@ -68,6 +68,34 @@ maven-test:
|
|||||||
rules:
|
rules:
|
||||||
- changes: *backend-changes
|
- changes: *backend-changes
|
||||||
|
|
||||||
|
# Е2Е тесты через Testcontainers (Postgres+Kafka). Профиль `e2e` в
|
||||||
|
# ordinis-app/pom.xml включает их (default surefire excludes e2e директорию).
|
||||||
|
# Требует docker:dind service для testcontainers — обычный maven-test runner
|
||||||
|
# не имеет Docker.
|
||||||
|
maven-e2e:
|
||||||
|
stage: test
|
||||||
|
image: repo.nstart.cloud/library/maven:3.9.9-eclipse-temurin-21
|
||||||
|
services:
|
||||||
|
- name: repo.nstart.cloud/library/docker:29.1.2-dind
|
||||||
|
alias: docker
|
||||||
|
command: ["--tls=false"]
|
||||||
|
variables:
|
||||||
|
DOCKER_HOST: "tcp://docker:2375"
|
||||||
|
DOCKER_TLS_CERTDIR: ""
|
||||||
|
TESTCONTAINERS_HOST_OVERRIDE: "docker"
|
||||||
|
TESTCONTAINERS_RYUK_DISABLED: "true"
|
||||||
|
script:
|
||||||
|
- for i in $(seq 1 30); do docker -H tcp://docker:2375 info >/dev/null 2>&1 && break; sleep 1; done
|
||||||
|
- mvn $MAVEN_CLI_OPTS -pl ordinis-app -am -P e2e test
|
||||||
|
artifacts:
|
||||||
|
when: always
|
||||||
|
reports:
|
||||||
|
junit: '**/target/surefire-reports/TEST-*.xml'
|
||||||
|
expire_in: 1 week
|
||||||
|
rules:
|
||||||
|
- changes: *backend-changes
|
||||||
|
# Можно сделать allow_failure: true если e2e будут флакать — пока нет.
|
||||||
|
|
||||||
# ─── BUILD (Maven jars) ────────────────────────
|
# ─── BUILD (Maven jars) ────────────────────────
|
||||||
# maven-package всегда запускается: docker backend jobs нуждаются в jar даже
|
# maven-package всегда запускается: docker backend jobs нуждаются в jar даже
|
||||||
# при frontend-only PR (иначе backend образы не пересобрать → ImagePullBackOff
|
# при frontend-only PR (иначе backend образы не пересобрать → ImagePullBackOff
|
||||||
|
|||||||
@@ -119,6 +119,12 @@
|
|||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
|
<!-- По умолчанию e2e тесты НЕ запускаются — нужны Postgres+Kafka
|
||||||
|
через Testcontainers (требует Docker). Включить через профиль
|
||||||
|
`-P e2e` (см. ниже). Локально: либо профиль, либо `-Dtest=*E2ETest`. -->
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/e2e/*E2ETest.java</exclude>
|
||||||
|
</excludes>
|
||||||
<!-- Testcontainers требует DOCKER_HOST. На macOS Docker Desktop
|
<!-- Testcontainers требует DOCKER_HOST. На macOS Docker Desktop
|
||||||
socket в ~/.docker/run, не /var/run. ENV не наследуется в
|
socket в ~/.docker/run, не /var/run. ENV не наследуется в
|
||||||
forked surefire процесс по умолчанию — пробрасываем явно. -->
|
forked surefire процесс по умолчанию — пробрасываем явно. -->
|
||||||
@@ -126,6 +132,10 @@
|
|||||||
<DOCKER_HOST>${env.DOCKER_HOST}</DOCKER_HOST>
|
<DOCKER_HOST>${env.DOCKER_HOST}</DOCKER_HOST>
|
||||||
<DOCKER_API_VERSION>1.45</DOCKER_API_VERSION>
|
<DOCKER_API_VERSION>1.45</DOCKER_API_VERSION>
|
||||||
<TESTCONTAINERS_RYUK_DISABLED>true</TESTCONTAINERS_RYUK_DISABLED>
|
<TESTCONTAINERS_RYUK_DISABLED>true</TESTCONTAINERS_RYUK_DISABLED>
|
||||||
|
<!-- Для CI с docker:dind service: указывает testcontainers
|
||||||
|
что spawned контейнеры доступны через `docker` hostname,
|
||||||
|
не localhost. Локально пусто → testcontainers default. -->
|
||||||
|
<TESTCONTAINERS_HOST_OVERRIDE>${env.TESTCONTAINERS_HOST_OVERRIDE}</TESTCONTAINERS_HOST_OVERRIDE>
|
||||||
</environmentVariables>
|
</environmentVariables>
|
||||||
<systemPropertyVariables>
|
<systemPropertyVariables>
|
||||||
<api.version>1.45</api.version>
|
<api.version>1.45</api.version>
|
||||||
@@ -134,4 +144,26 @@
|
|||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<!-- Включает e2e тесты (Testcontainers). Запускать на CI runner с DinD
|
||||||
|
либо локально с Docker Desktop. -->
|
||||||
|
<id>e2e</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<excludes combine.self="override"/>
|
||||||
|
<includes>
|
||||||
|
<include>**/e2e/*E2ETest.java</include>
|
||||||
|
</includes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
Reference in New Issue
Block a user