我们有自己的 gitlab 存储库。我们有自己的跑步者。
如何设置运行器和 gitlab 才能缓存 docker 层。
下面是 .gitlab-ci.yml 文件的示例:
before_script:
- docker version
test:
stage: test
script:
- docker-compose -f docker-compose.yml build my_job
- docker-compose -f docker-compose.yml down
- docker-compose -f docker-compose.yml up --remove-orphans --force-recreate --abort-on-container-exit
Run Code Online (Sandbox Code Playgroud)
我一直在尝试阅读如何执行此操作,但所有文档都非常令人困惑。
https://gitlab.com/gitlab-org/gitlab-ce/issues/17861指出:
使用 shell 执行器
这是目前当您不想缓存 docker 层时使用的最佳执行器。除了将 gitlab-runner 添加到 docker 组之外,它基本上不需要任何更改。
鉴于 git fetch 它提供了缓存 docker 层的最佳可能性。
如何设置这一点?我只是在文档中找不到这个。
小智 7
我发现使用 docker-in-docker 执行器实际上确实支持缓存层(即使文档另有说明)。
只需先拉取图像,然后在cache-from标志中指定它即可。
允许|| true拉取映像失败,这对于第一次构建映像时很重要(例如在新分支中)
script:
- docker pull $OLD_DOCKERIMAGE || true
- docker build -t $NEW_DOCKERIMAGE --cache-from $OLD_DOCKERIMAGE .
- docker push $NEW_DOCKERIMAGE
Run Code Online (Sandbox Code Playgroud)
附加要求:此功能需要DOCKER_BUILDKIT启用,并且构建必须使用构建参数完成:--build-arg BUILDKIT_INLINE_CACHE=1。
小智 5
由于您正在构建 docker 映像作为 CI 作业的一部分,这意味着您很可能已经使用了 shell 执行器。只有 3 种方法可以配置 gitlab 运行程序,以支持构建 docker 映像作为 CI 作业的一部分:https ://docs.gitlab.com/ee/ci/docker/using_docker_build.html
本文档还解释了如何配置 shell 执行器以及所有 3 种配置方式之间的权衡。
基本上,唯一不允许缓存 docker 层的运行器配置是使用 docker-in-docker 执行器。
使用 shell 和 docker 套接字绑定始终在托管 gitlab 运行程序的虚拟机上本地缓存层,因此无需进一步配置即可启用缓存。
| 归档时间: |
|
| 查看次数: |
6397 次 |
| 最近记录: |