Use fixed ports in ci, necessary for woodpecker-ci

This commit is contained in:
Stephan Schnabel 2025-06-23 16:54:42 +02:00
parent 9552221cc4
commit b7e60a7723
Signed by: stephan.schnabel
SSH key fingerprint: SHA256:99zuzxNGFb5/5P+E/O7ONU2qhUojUe/D8rIPTW+9Xp0
2 changed files with 29 additions and 17 deletions

View file

@ -153,6 +153,15 @@
<groupId>org.jboss.resteasy</groupId> <groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId> <artifactId>resteasy-multipart-provider</artifactId>
</exclusion> </exclusion>
<!-- The POM for ... is invalid -->
<exclusion>
<groupId>com.sun.istack</groupId>
<artifactId>istack-commons-tools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.istack</groupId>
<artifactId>istack-commons-runtime</artifactId>
</exclusion>
</exclusions> </exclusions>
</dependency> </dependency>

View file

@ -15,6 +15,7 @@ import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.api.extension.ParameterResolver; import org.junit.jupiter.api.extension.ParameterResolver;
import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.Keycloak;
import org.keycloak.admin.client.token.TokenService; import org.keycloak.admin.client.token.TokenService;
import org.testcontainers.containers.FixedHostPortGenericContainer;
import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.MountableFile; import org.testcontainers.utility.MountableFile;
@ -45,13 +46,16 @@ public class KeycloakExtension implements BeforeAllCallback, ParameterResolver {
throw new Exception("Failed to read properties", e); throw new Exception("Failed to read properties", e);
} }
var version = properties.getProperty("version"); var version = properties.getProperty("version");
var image = "quay.io/keycloak/keycloak:" + version;
var jar = properties.getProperty("jar"); var jar = properties.getProperty("jar");
var timeout = properties.getProperty("timeout"); var timeout = properties.getProperty("timeout");
// create and start container // create and start container
@SuppressWarnings("resource") @SuppressWarnings({ "resource", "deprecation" })
var container = new GenericContainer<>("quay.io/keycloak/keycloak:" + version) var container = (System.getenv("CI") == null
? new GenericContainer<>(image).withExposedPorts(8080)
: new FixedHostPortGenericContainer<>(image).withFixedExposedPort(8080, 8080))
.withEnv("KEYCLOAK_ADMIN", "admin") .withEnv("KEYCLOAK_ADMIN", "admin")
.withEnv("KEYCLOAK_ADMIN_PASSWORD", "password") .withEnv("KEYCLOAK_ADMIN_PASSWORD", "password")
.withEnv("KC_LOG_LEVEL", "io.kokuwa:trace") .withEnv("KC_LOG_LEVEL", "io.kokuwa:trace")
@ -63,9 +67,8 @@ public class KeycloakExtension implements BeforeAllCallback, ParameterResolver {
.withEnv("KC_METRICS_STATS_INTERVAL", "PT1s") .withEnv("KC_METRICS_STATS_INTERVAL", "PT1s")
.withCopyFileToContainer(MountableFile.forHostPath(jar), "/opt/keycloak/providers/metrics.jar") .withCopyFileToContainer(MountableFile.forHostPath(jar), "/opt/keycloak/providers/metrics.jar")
.withLogConsumer(out -> System.out.print(out.getUtf8String())) .withLogConsumer(out -> System.out.print(out.getUtf8String()))
.withExposedPorts(8080)
.withStartupTimeout(Duration.parse(timeout)) .withStartupTimeout(Duration.parse(timeout))
.waitingFor(Wait.forHttp("/health").forPort(8080)) .waitingFor(Wait.forHttp("/health").forPort(8080).withStartupTimeout(Duration.ofMinutes(10)))
.withCommand("start-dev"); .withCommand("start-dev");
try { try {
container.start(); container.start();