Gitlab CI 服务和 docker hub 身份验证

Clé*_*ost 6 docker gitlab-ci dockerhub

由于新的限制,如何对 gitlab-ci 服务的 docker hub 帐户进行身份验证?

以下是gitlab 文档中的 CI 配置示例:

# from official documentation 
services:
  - postgres:12.2 # <---- this will fail at some point because it's a non-authenticated pull

variables:
  POSTGRES_DB: nice_marmot
  POSTGRES_USER: runner
  POSTGRES_PASSWORD: ""
  POSTGRES_HOST_AUTH_METHOD: trust
Run Code Online (Sandbox Code Playgroud)

一段时间后,这会导致以下错误:

ERROR: Preparation failed: Error response from daemon: 
toomanyrequests: You have reached your pull rate limit. 
You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit (executor_docker.go:188:1s)
Run Code Online (Sandbox Code Playgroud)

由于服务是在脚本运行之前拉取的,因此我们无法docker login在脚本部分中拉取服务。我无法从 gitlab 找到任何有关 url auth 或环境变量 auth 的文档。

理想的解决方案不需要对 gitlab-ci 服务器或 gitlab-ci 运行程序具有管理员访问权限,也不需要设置自定义运行程序pull_policy = never(我们最终这样做了,但它因 e2e 的单个运行程序瓶颈而大大减慢了我们的 CI测试)

Von*_*onC 7

另请检查GitLab 13.7(2020 年 12 月)改进的依赖代理是否可以提供帮助:

\n
\n

避免 Docker 速率限制并加快管道速度

\n

为了更快、更可靠的构建,您可以使用依赖代理来缓存 Docker Hub 上托管的容器映像。

\n

但是,当 Docker 开始对来自 Docker Hub 的拉取请求实施速率限制时,您注意到即使从缓存中拉取您的映像,Docker 也会将其计入您的限制。
\n\n\xe2\x80\x99s 因为依赖代理仅缓存图像\xe2\x80\x99s 层(或 blob),而不是清单,清单包含有关如何构建给定图像的信息。
\n由于需要清单,因此仍然需要拉取请求。这也意味着如果 Docker Hub 不可用,您将无法\xe2\x80\x99 提取映像。

\n

接下来,依赖代理将缓存 image\xe2\x80\x99s 层和清单。

\n

因此,第一次拉取时alpine:latest,图像将被添加到依赖代理缓存中,并计为针对您的速率限制的一次拉取。
\n下次您拉取 时alpine:latest,即使 Docker Hub 不可用,也会从缓存中拉取,并且不会计入您的速率限制。

\n

不要忘记,从里程碑 13.6 开始,依赖代理在 Core 中可用。因此,请尝试一下并让我们知道您的想法。或者更好的是,考虑为一个未解决的问题做出贡献。

\n

请参阅文档问题

\n
\n

和:

\n

仍然使用GitLab 13.7(2020 年 12 月)

\n
\n

将预定义变量与依赖代理一起使用

\n

通过代理和缓存来自 Docker Hub 的容器映像,依赖代理可以帮助您提高管道的性能。

\n

尽管代理旨在大量与 CI/CD 一起使用,但要使用该功能,您必须在文件中定义自己的变量或硬编码值gitlab.ci-yml
\n这使得个人难以上手,并使其无法成为可扩展的解决方案,特别是对于拥有许多不同小组和项目的组织而言。

\n

展望未来,您可以使用预定义的环境变量作为使用依赖关系代理的直观方式。支持以下变量:

\n
    \n
  • CI_DEPENDENCY_PROXY_USER:登录依赖代理的 CI 用户。
  • \n
  • CI_DEPENDENCY_PROXY_PASSWORD:用于登录依赖代理的 CI 密码。
  • \n
  • CI_DEPENDENCY_PROXY_SERVER:登录依赖代理的服务器。
  • \n
  • CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX:通过依赖代理拉取镜像的镜像前缀。
  • \n
\n

尝试一下,让我们知道您的想法!

\n

请参阅文档问题

\n
\n

这甚至适用于私人项目(2020 年 12 月)

\n
\n

将依赖代理与私有项目一起使用

\n

您可以使用 GitLab 依赖代理来代理和缓存来自 Docker Hub 的容器映像。直到最近,该功能仅适用于公共团体,导致许多人无法使用它。

\n

您现在可以将依赖代理用于私有项目。
\n您可以通过缓存容器映像以供将来使用来减少对 Docker Hub 的依赖。

\n

由于依赖代理将 Docker 映像存储在与您的组关联的空间中,因此您必须使用您的 GitLab 用户名和密码,或者使用范围至少设置为 的个人访问令牌进行身份验证read_registry

\n

请参阅文档问题

\n
\n
\n

使用GitLab 13.9(2021 年 2 月):

\n
\n

使用依赖代理时自动进行身份验证

\n

通过代理和缓存来自 Docker Hub 的容器映像,依赖代理可以帮助您提高管道的性能。

\n

尽管代理旨在与 CI/CD 一起大量使用,但要使用该功能,您必须将凭据添加到DOCKER_AUTH_CONFIGCI/CD 变量或docker login在管道中手动运行。.gitlab-ci.yml这些解决方案运行良好,但当您考虑需要更新多少文件时,如果 GitLab Runner 能够自动为您进行身份验证,那就更好了。

\n

由于 Runner 已经能够通过集成的 GitLab 容器注册表自动进行身份验证,因此我们能够利用该功能来帮助您通过依赖代理自动进行身份验证。

\n

现在,使用依赖代理来代理和缓存来自 Docker Hub 的容器映像变得更加容易,并开始进行更快、更可靠的构建。

\n

请参阅文档问题

\n
\n
\n

请参阅GitLab 13.10(2021 年 3 月)

\n
\n

将依赖代理与“containerd”和 Docker 20+ 一起使用

\n

GitLab 依赖代理是一个本地代理,可用于从 Docker Hub 频繁访问的上游镜像。在 CI/CD 的情况下,依赖代理接收请求并从注册表返回上游映像,充当拉通缓存。这有助于减少 CI 分钟并提高可靠性。

\n

但是,您\xe2\x80\x99无法通过摘要提取图像,摘要作为不可变的标识符可确保您使用特定图像和标签的确切版本。由于containerdDocker 20+ 都依赖于 pull-by-digest,这意味着许多人无法使用依赖代理。

\n

我们很高兴地告诉您,您现在可以通过摘要从 Docker Hub 中提取容器映像。您可以通过将 URL 添加到.gitlab-ci.yml文件、从命令行手动拉取映像或使用 Dockerfile 来使用依赖项代理。查看文档并开始节省构建时间。

\n

请参阅文档问题

\n
\n