ber*_*ert 5 gitlab spring-boot docker-in-docker testcontainers
我想在 Gitlab 中运行 Testontainers 来测试 Spring Boot 应用程序。创建 Gitlab 运行程序后(更改了 URL 和令牌):
sudo gitlab-runner register -n \
--url https://gitlab.com/ \
--registration-token REGISTRATION_TOKEN \
--executor docker \
--description "My Docker Runner" \
--docker-image "docker:19.03.12" \
--docker-privileged \
--docker-volumes "/certs/client"
Run Code Online (Sandbox Code Playgroud)
我写了一个简单的 ci 管道:
stages:
- test
services:
- docker:19.03.12-dind
variables:
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: "/certs"
test:
stage: test
image: amazoncorretto:11
script:
- java -version
- chmod +x gradlew
- ./gradlew test
tags:
- docker-dind
Run Code Online (Sandbox Code Playgroud)
测试看起来像:
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
@SpringBootTest
@Testcontainers
class DemoApplicationTests {
@Container
protected static GenericContainer<?> kc = new GenericContainer<>("jboss/keycloak")
.withEnv("KEYCLOAK_USER", "admin")
.withEnv("KEYCLOAK_PASSWORD", "admin")
.withExposedPorts(8080)
.waitingFor(Wait.forHttp("/auth").forStatusCode(200));
@Test
void contextLoads() {
}
}
Run Code Online (Sandbox Code Playgroud)
它可以是其他东西而不是 Keycloak,但结果是相同的:
DemoApplicationTests > initializationError FAILED
org.testcontainers.containers.ContainerLaunchException at GenericContainer.java:327
Caused by: org.testcontainers.containers.ContainerFetchException at GenericContainer.java:1278
Caused by: java.lang.IllegalStateException at DockerClientProviderStrategy.java:214s
Run Code Online (Sandbox Code Playgroud)
在我看来,构建容器 (amazoncorreto:11) 不是作为 docker 中的 docker 运行的。如果我检查 DockerClientProviderStrategy.java:214,我可以看到:
Could not find a valid Docker environment. Please see logs and check configuration
Run Code Online (Sandbox Code Playgroud)
Testontaniners 版本是 1.15.0。我做错了什么?我有使命吗?
我将 Spring Boot 与 TestContainers 和 gitlab runner 一起使用。我在这里写的完整解决方案/sf/answers/5452202731/
但我的简短回答是你需要使用包含 maven 和 dind 的图像
例如:
maven-job:
image: intension/docker-dind-maven:3.8.5-r0-openjdk17
stage: build
variables:
DOCKER_TLS_CERTDIR: ""
script:
- mvn --version # check that mvn is working
- docker images # check that docker is working
- mvn $MAVEN_CLI_OPTS clean package
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4662 次 |
最近记录: |