首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gitlab CI的TestContainers集成测试

Gitlab CI的TestContainers集成测试
EN

Stack Overflow用户
提问于 2022-07-05 11:33:04
回答 1查看 1K关注 0票数 5

我有一个使用测试容器进行集成测试的java项目。我想在那个阶段实现gitlab ci,但是我有这个错误

代码语言:javascript
运行
复制
java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration

该项目成功地建立在本地机器上,但gitlap码头无法启动。

这里有一个日志输出

代码语言:javascript
运行
复制
[0KRunning with gitlab-runner 14.3.0 (b37d3da9)[0;m
[0K  on Backend Docker runner 9L3Zko1w[0;m
section_start:1657698628:prepare_executor
[0K[0K[36;1mPreparing the "docker" executor[0;m[0;m
[0KUsing Docker executor with image maven:3.6.0-jdk-11-slim ...[0;m
[0KStarting service docker:dind ...[0;m
[0KPulling docker image docker:dind ...[0;m
[0KUsing docker image sha256:232342342342 for docker:dind with digest docker@sha256:2342342342 ...[0;m
[0KWaiting for services to be up and running...[0;m

[0;33m*** WARNING:[0;m Service runner-23423423-docker-0 probably didn't start properly.

Health check error:
service "runner-234234234-docker-0-wait-for-service" timeout

Health check container logs:


Service container logs:
2022-07-13T07:50:40.800780292Z ip: can't find device 'ip_tables'
2022-07-13T07:50:40.801898214Z ip_tables              32768  2 iptable_filter,iptable_nat
2022-07-13T07:50:40.802546323Z x_tables               45056  5 xt_conntrack,xt_MASQUERADE,xt_addrtype,iptable_filter,ip_tables
2022-07-13T07:50:40.802609399Z modprobe: can't change directory to '/lib/modules': No such file or directory
2022-07-13T07:50:40.806461330Z mount: permission denied (are you root?)
2022-07-13T07:50:40.807019652Z Could not mount /sys/kernel/security.
2022-07-13T07:50:40.807028026Z AppArmor detection and --privileged mode might break.
2022-07-13T07:50:40.807931221Z mount: permission denied (are you root?)

这是gitlab ci yaml

代码语言:javascript
运行
复制
services:
  - name: docker:dind
    # explicitly disable tls to avoid docker startup interruption
    command: ["--tls=false"]
variables:
  # Instruct Testcontainers to use the daemon of DinD.
  DOCKER_HOST: "tcp://docker:2375"
  # Instruct Docker not to start over TLS.
  DOCKER_TLS_CERTDIR: ""
  # Improve performance with overlayfs.
  DOCKER_DRIVER: overlay2
test:
  image: maven:3.8.6-jdk-11-slim
  stage: ⚙️ maven-build
  before_script:
    - docker info
    - cp $MAVEN_SETTINGS_XML ~/.m2/settings.xml
  script:
    - mvn $MAVEN_CLI_OPTS clean verify
EN

回答 1

Stack Overflow用户

发布于 2022-07-12 18:51:33

仅仅使用maven:3.8.6-jdk-11-slim图像是不够的。您还需要在映像中安装docker。获得码头的一个非常简单的方法就是在管道中手动安装它:

代码语言:javascript
运行
复制
before_script:
    - curl -fsSL https://get.docker.com -o get-docker.sh
    - bash ./get-docker.sh
    - docker info

但是,如果您在自定义的码头映像中安装了对接器,这样您就不会在每个管道运行中不断地安装码头,这样做会好得多。您可以使用这个dockerfile来完成这个任务:

代码语言:javascript
运行
复制
FROM maven:3.8.6-jdk-11-slim
RUN curl -fsSL https://get.docker.com -o get-docker.sh
RUN bash ./get-docker.sh

然后,生成的映像可以上传到注册表中,而无需每次安装maven:3.8.6-jdk-11-slim即可使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72868752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档