如何在GitLab CI中用Gradle运行需Docker环境的SpringBoot JUnit测试
GitLab CI中解决SpringBoot单元测试依赖Testcontainers的环境冲突问题
我在搭建GitLab CI流水线运行SpringBoot应用单元测试时碰到了环境冲突的麻烦:本地执行gradle test --rerun-tasks能正常跑测试,但CI环境里,因为测试依赖Testcontainers(需要启动MySQL容器),必须要有Docker环境;可如果用Docker镜像,就缺Java环境没法运行Gradle;用Java镜像的话,又没有Docker环境。
之前的.gitlab-ci.yml配置是这样的:
image: docker:latest services: - docker:dind stages: - test test-backend: image: openjdk:17-jdk-alpine stage: test script: - cd spring - ./gradlew test --stacktrace tags: - docker
后来通过调整镜像和docker:dind服务的配置,解决了这个问题,最终可行的配置如下:
image: gradle:6.9.4-jdk17-jammy services: - name: docker:dind command: ["--tls=false"] variables: DOCKER_HOST: "tcp://docker:2375" DOCKER_TLS_CERTDIR: "" DOCKER_DRIVER: overlay2 stages: - test test-api: stage: test script: - gradle test
关键配置说明
- 选用
gradle:6.9.4-jdk17-jammy作为基础镜像,同时集成了Gradle和Java环境,直接满足运行测试的基础要求 - 给
docker:dind服务添加--tls=false命令,关闭TLS验证,避免CI环境中证书配置的麻烦 - 设置
DOCKER_HOST指向docker:dind服务的地址,让Testcontainers能够正确找到Docker环境;DOCKER_TLS_CERTDIR设为空以禁用TLS证书目录;DOCKER_DRIVER指定为overlay2,提升容器运行性能
内容的提问来源于stack exchange,提问作者Gereon99
相关产品推荐
相关产品推荐

