如何在.gitlab-ci.yml中将卷挂载到Docker容器中?

17

我正在一个Android项目中使用.gitlab-ci.yml和Docker作为GitLab CI Runner。在测试运行结束时,gradlew会将测试结果保存在build目录下的xml和html文件中。

Finished generating test XML results (0.001 secs) into: /builds/org/project/sdk/build/test-results/release
 Generating HTML test report...
Finished generating test html results (0.002 secs) into: /builds/org/project/sdk/build/reports/tests/release

我希望能够访问这些文件,但是文档没有提到如何像docker run -v <path>:/builds/org/...一样挂载一个卷。

1个回答

22

我建议不要从主机挂载卷到你的CI中。如果你真的想这样做,你需要相应地配置runner(config.toml)。 如果你正在使用共享的runner,你永远不知道一个特定的构建将在哪个系统上执行。

我认为更好的解决方案是将测试结果定义为artifacts。 这样,测试结果可以用于旧版本的构建,而不仅仅是最新构建。

下面是我用于构建Docker镜像的runner的配置(config.toml)。你可以将/var/run/docker.sock替换为你想要构建结果存放的目录。

[[runners]]
  name = "Docker"
  url = "https://mygitlab/ci"
  token = "mytoken"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
  [runners.cache]
    Insecure = false

我仔细阅读了gitlab-ci.yml文档后意识到自己走了弯路。像@mgansler建议的那样使用_artifacts_对我很有帮助。 - Travis Holton
@Martin 我使用 Gitlab 11.9.8 通过 K8s 集成 UI 在 k8s 上安装了我的 gitlab-runner。现在安装完成后,我似乎无法修改 runner 的配置。我使用 kubeadm 来设置我的 k8s 集群。我想将主机上的 /var/run/docker.sock 挂载到构建代码的容器中。 - Tjs
以下是如何使用构件来访问在GitLab流水线执行期间生成的文件的示例,即使流水线失败也可以:https://juristr.com/blog/2020/10/upload-failed-artifacts-gitlab/ - oomer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接