【问题标题】:Store layers in gitlab ci docker executor在 gitlab ci docker executor 中存储层
【发布时间】:2018-01-10 17:26:21
【问题描述】:

我正在我的项目中使用 gitlab CI,我创建了图像来进行测试和构建。当我在 docker executor 中运行它时,每个作业都需要从开始下载图像。有没有办法在主机上缓存/存储该层?像缓存?我尝试了 store /var/lib/docker/aufs 但我并不是每个人都认为它。在任何地方都找不到任何解决方案。以前有人有这个问题吗?如何使用它?

gitlab-ci.yml

phpunit: stage: test script: - docker run -w /var/www -v $(pwd):/var/custom --rm phpunit/phpunit:4.8.5

gitlab-ci.yml 的卷来自

phpunit: stage: test script: - docker run -w /var/www -v $(pwd):/var/custom --rm --volumes-from {image_from other build} phpunit/phpunit:4.8.5

【问题讨论】:

  • 您是否尝试将这一行:volumes = ["/var/lib/docker"] 放入 gitlab-ci-runner 的 config.toml 文件的 [runners.docker] 部分?还需要使用 disable_cache = false 禁用自动缓存
  • 是的,我做到了,2 小时后我的跑步者空间不足。因为每个作业都在缓存所有层,但也缓存卷......
  • 我现在无法自己测试它,但是安装这样的卷怎么样:volumes = ["/data/runner/:/var/lib/docker:rw"]。显然,每个主机只允许一个跑步者。

标签: docker gitlab-ci gitlab-ci-runner


【解决方案1】:

效果最好的选项是使用专用的长时间运行的 docker:dind 容器,如下所示:

docker run --privileged --name gitlab-dind -d --restart=always  docker:dind

(如果您的主机支持,请添加 --storage-driver=overlay2!)

然后修改config.toml如下:

[runners.docker]
  tls_verify = false
  image = "docker:latest"   <--------
  privileged = false     <--------
  disable_cache = false
  volumes = ["/cache"]
  links = ["gitlab-dind:docker"]   <-----------
  shm_size = 0
[runners.cache]

并删除

services:
- docker:dind

来自.gitlab-ci.yml

如果你想从 .gitlab-ci.yml 运行一个 docker 容器,你可以这样做:

test:
  stage: test
  image: phpunit/phpunit:4.8.5
  script:
  - cd your_source && phpunit

注意我猜的是最后一行,因为我不知道 phpunit。

【讨论】:

  • 是的,它会很棒,但是当我在容器中执行 docker run 时,我无法挂载 dir。它看起来像这样:docker run -w /var/www -v $(pwd):/var /custom --volumes-from=trunk_$CI_PIPELINE_ID composer/composer run-script post-install-cmd --skip-application skip-config skip-upgrade skip-assets 但是自定义是空的 :(
  • 我尝试将主机目录挂载到 gitlab-dind 并将其添加到配置 toml 但仍然没有成功。也许有一些现成的解决方案?
  • 需要更多信息。请详细说明您的问题,包括您正在使用的 .gitlab-di.yml 文件。我给出的解决方案肯定应该在 docker 构建期间重用图像。我正在运行它。
  • 我需要什么: - 我应该存储和重用图像 - 你的解决方案解决了这个问题 - 当我的脚本运行时,我想从容器中运行带有挂载目录的 docker 图像,但是当我这样做时,我的容器有空目录,容器中没有文件在我的图像中。 phpunit: stage: test script: - docker run -w /var/www -v $(pwd):/var/custom --rm phpunit/phpunit:4.8.5
  • 我在我的问题中加入了 gitlab-ci 的一部分。
【解决方案2】:

好的,我尝试通过使用音量来解决这个问题

FROM docker:dind RUN mkdir /gitlab-runner VOLUME /gitlab-runner

当运行 gitlab ci docker executor 时,我使用命令从 docker 挂载卷

gitlab-ci-multi-runner exec docker phpunit --docker-volumes-from "gitlab-dind" --docker-links "gitlab-dind:docker" --builds-dir "/gitlab-runner"

但不知道为什么我的 docker 镜像和 docker 服务不共享卷,任何 ide? Gitlab mout 有自己的想法吗?还是除了 --docker-volumes-from 之外没有任何连接?

【讨论】:

  • 您不断地用更多问题扩展原始问题。我认为如果你创建一个新的堆栈溢出问题会更好,并且 - 既然你说我的答案解决了你的问题 - 将我的答案标记为正确?
猜你喜欢
  • 2017-10-28
  • 2020-03-04
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 2019-06-09
相关资源
最近更新 更多