还要检查,与亚搏体育appGitLab 13.7 https://about.gitlab.com/releases/2020/12/22/gitlab-13-7-released/#avoid-docker-rate-limits-and-speed-up-your-pipelines(2020 年 12 月)如果改进的依赖代理可以提供帮助:
避免 Docker 速率限制并加快管道速度
为了更快、更可靠的构建,您可以使用依赖代理来缓存 Docker Hub 上托管的容器映像。
但是,当 Docker 开始强制执行时来自 Docker Hub 的拉取请求的速率限制 /blog/2020/10/30/mitigating-the-impact-of-docker-hub-pull-requests-limits/,您注意到即使从缓存中提取图像,Docker 也会将其计入您的限制。
这是因为依赖代理仅缓存图像的层(或 blob),而不缓存清单,清单包含有关如何构建给定图像的信息。
由于需要清单,因此仍然需要拉取请求。这也意味着如果 Docker Hub 不可用,您将无法提取映像。
展望未来,依赖代理将缓存图像的层和清单。
所以,第一次拉的时候alpine:latest
,该图像将被添加到依赖代理缓存中,并计为对您的速率限制的一次拉取。
下次拉的时候alpine:latest
,即使 Docker Hub 不可用,也会从缓存中提取not计入您的速率限制。
不要忘记,从里程碑 13.6 开始,依赖代理在 Core 中可用 /releases/2020/11/22/gitlab-13-6-released/#the-dependency-proxy-is-now-open-source。因此,请尝试一下并让我们知道您的想法。或者更好的是,考虑为开放项目之一做出贡献.
See 文档 https://docs.gitlab.com/ee/user/packages/dependency_proxy/#docker-hub-rate-limits-and-the-dependency-proxy and Issue https://gitlab.com/gitlab-org/gitlab/-/issues/241639.
And:
仍然与亚搏体育appGitLab 13.7 https://about.gitlab.com/releases/2020/12/22/gitlab-13-7-released/#use-pre-defined-variables-with-the-dependency-proxy(2020年12月)
将预定义变量与依赖代理一起使用
通过代理和缓存来自 Docker Hub 的容器映像,依赖代理可以帮助您提高管道的性能。
尽管代理旨在与 CI/CD 一起大量使用,但要使用该功能,您必须在文件中定义自己的变量或硬编码值gitlab.ci-yml
file.
这使得个人很难上手,并且无法成为可扩展的解决方案,特别是对于拥有许多不同团队和项目的组织而言。
继续前进,您可以使用预定义环境变量 https://docs.gitlab.com/ee/ci/variables/predefined_variables.html作为使用依赖代理的直观方式。支持以下变量:
-
CI_DEPENDENCY_PROXY_USER
:登录依赖代理的 CI 用户。
-
CI_DEPENDENCY_PROXY_PASSWORD
:用于登录依赖代理的 CI 密码。
-
CI_DEPENDENCY_PROXY_SERVER
:登录依赖代理的服务器。
-
CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX
:通过依赖代理拉取镜像的镜像前缀。
尝试一下,让我们知道您的想法!
See 文档 https://docs.gitlab.com/ee/user/packages/dependency_proxy/#authenticate-within-cicd and Issue https://gitlab.com/gitlab-org/gitlab/-/issues/280582.
这甚至适用于私人项目 https://about.gitlab.com/releases/2020/12/22/gitlab-13-7-released/#use-the-dependency-proxy-with-private-projects(2020年12月)
将依赖代理与私有项目一起使用
您可以使用 GitLab 依赖代理来代理和缓存来自 Docker Hub 的容器映像。直到最近,该功能仅适用于公共团体,导致许多人无法使用它。
您现在可以将依赖代理用于私有项目。
您可以通过缓存容器映像以供将来使用来减少对 Docker Hub 的依赖。
由于依赖代理将 Docker 映像存储在与您的组关联的空间中,因此您必须使用您的 GitLab 用户名和密码进行身份验证,或者使用您的个人访问令牌(范围至少设置为read_registry
.
See 文档 https://docs.gitlab.com/ee/user/packages/dependency_proxy/index.html#authenticate-with-the-dependency-proxy and Issue https://gitlab.com/gitlab-org/gitlab/-/issues/11582.
With 亚搏体育appGitLab 13.9 https://about.gitlab.com/releases/2021/02/22/gitlab-13-9-released/#automatically-authenticate-when-using-the-dependency-proxy(2021 年 2 月):
使用依赖代理时自动进行身份验证
通过代理和缓存来自 Docker Hub 的容器映像,依赖代理可以帮助您提高管道的性能。
尽管代理旨在与 CI/CD 一起大量使用,但要使用该功能,您必须将凭据添加到DOCKER_AUTH_CONFIG
CI/CD 变量或手动运行docker login
在你的管道中。这些解决方案效果很好,但是当您考虑有多少.gitlab-ci.yml
如果您需要更新文件,如果 GitLab Runner 能够自动为您进行身份验证,那就更好了。
由于 Runner 已经能够通过集成的 GitLab 容器注册表自动进行身份验证,因此我们能够利用该功能来帮助您通过依赖代理自动进行身份验证。
现在,可以更轻松地使用依赖代理来代理和缓存来自 Docker Hub 的容器映像,并开始进行更快、更可靠的构建。
See 文档 https://docs.gitlab.com/ee/user/packages/dependency_proxy/#authenticate-within-cicd and Issue https://gitlab.com/gitlab-org/gitlab-runner/-/issues/27302.
See 亚搏体育appGitLab 13.10 https://about.gitlab.com/releases/2021/03/22/gitlab-13-10-released/#use-the-dependency-proxy-with-containerd-and-docker-20(2021 年 3 月)
将依赖代理与“containerd”和 Docker 20+ 一起使用
GitLab 依赖代理是一个本地代理,可用于从 Docker Hub 频繁访问的上游镜像。在 CI/CD 的情况下,依赖代理接收请求并从注册表返回上游映像,充当拉通缓存。这有助于减少 CI 分钟并提高可靠性。
但是,您无法通过摘要提取图像,摘要作为不可变的标识符可确保您使用特定图像和标签的确切版本。既然两者containerd
Docker 20+ 依赖于 pull-by-digest,这意味着你们中的许多人被阻止使用依赖代理。
我们很高兴地告诉您,您现在可以通过摘要从 Docker Hub 中提取容器映像。您可以通过将 URL 添加到您的.gitlab-ci.yml
文件、从命令行手动拉取映像或使用 Dockerfile。查看文档并开始节省构建时间。
See 文档 https://docs.gitlab.com/ee/user/packages/dependency_proxy/#store-a-docker-image-in-dependency-proxy-cache and Issue https://gitlab.com/gitlab-org/gitlab/-/issues/290944.