从资源中读取文件在 gitlab CI 中不起作用

Posted

技术标签:

【中文标题】从资源中读取文件在 gitlab CI 中不起作用【英文标题】:Reading a file from resources not working in gitlab CI 【发布时间】:2019-11-02 14:28:54 【问题描述】:

使用以下命令在 gitlab CI 上运行测试时出现错误:

./gradlew clean test

我正在使用测试容器来运行我的测试:https://www.testcontainers.org/modules/docker_compose/

这是我用来加载位于 src/test/resources 的 docker compose 文件的代码。

@ClassRule
public static DockerComposeContainer container = new DockerComposeContainer(new File(BaseServiceTest.class.getClassLoader().getResource("docker-compose.yml").getFile()));

我在本地运行时运行良好,在gitlab上运行ci时购买,我收到以下错误:

"timestamp":"2019-06-17T18:47:44.903Z","level":"ERROR","thread":"Test worker","logger":"docker[docker/compose:1.8.0]","message":"Log output from the failed container:\n.IOError: [Errno 2] No such file or directory: '/builds/xxxx/xxxx/xxxx-xxxx/src/test/resources/docker-compose.yml'\n","context":"default"

以下是我的 gitlab-ci.yml 文件:

include:
  - project: 'xxxx/xxxx/sdlc'
    file: '/sdlc.yml'

variables:
  CONTAINER_NAME: xxxx-xxxx

test:
  stage: test
  image: registry.xxxx.com/xxxx-alpine-jdk8:v1_8_181
  script:
    - ls -la src/test/resources
    - ./gradlew clean test -i

在我的脚本中,我有ls -la src/test/resources,并且在运行该脚本时我可以看到docker-compose.yml 文件。不知道为什么运行代码时它不可用。

【问题讨论】:

你能分享你的 gitlab-ci.yml 吗?您使用什么图像来运行您的管道? @earandap 我添加了 gitlab-ci.yml 文件。 【参考方案1】:

基于 Testcontainers 文档 here。 Gitlab CI 上的 Testcontainers 需要 DinD 服务

这里是一个例子:

# DinD service is required for Testcontainers
services:
  - docker:dind

variables:
  # Instruct Testcontainers to use the daemon of DinD.
  DOCKER_HOST: "tcp://docker:2375"
  # Improve performance with overlayfs.
  DOCKER_DRIVER: overlay2

test:
 image: gradle:5.0
 stage: test
 script: ./gradlew test

【讨论】:

公开您的本地 docker 端口以接受远程连接并使用您的 IP 地址配置 DOCKER_HOST 变量,以确保正确设置 Gitlab。

以上是关于从资源中读取文件在 gitlab CI 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何让 gitlab-runner 从指定文件中读取而不是 .gitlab-ci.yml?

从文本文件创建数据框,在 pyspark 中不起作用

rails 测试在 gitlab 管道中不起作用

表单验证在我的 CI 项目中不起作用(已修复,代码已更新)

C 代码在 Linux 编译器中不起作用

在此上下文中不允许 Gitlab CI YML 映射值