TeamCity On-Premises 2025.03 Help

Docker 注册表连接

Docker 注册表连接 构建功能允许 TeamCity 在构建开始前自动登录到 DockerHub 或其他容器注册表。

将此功能添加至:

  • 允许 TeamCity 监控并检测 Docker / Podman 操作(例如, docker pullpodman run);

  • 在构建前自动登录已认证的注册表,构建后退出登录。

  • 清理本地(适用于 Docker 和 Podman)和推送到注册表的镜像(仅适用于 Docker);

  • 容器信息 选项卡添加到 构建结果 页面。 该标签页提供了与使用的容器管理器相关的操作信息。

    容器信息"选项卡

登录和退出存储库以及清理镜像需要配置好的 Docker 注册表 连接:

Docker 注册表连接构建功能

Docker 镜像清理

推送镜像的清理

如果您有一个用于发布镜像的构建配置,那么您需要在某个时间点删除它们。 您可以选择相应的选项,并指示 TeamCity 在构建自身被 清理 时,移除由某个特定构建发布的镜像。

它的工作原理如下:当发布一个镜像时,TeamCity会存储构建发布的镜像的注册表信息。 当运行 服务器清理 并删除构建时,系统将搜索所有配置的连接以找到此注册表的地址,并使用找到的连接中指定的凭据清理构建发布的镜像。

如果镜像是从 Linux 代理推送的,且设置了 --digestfile=<文件名> 选项,目前只有在这种情况下,才能清理通过 Podman 推送的镜像。 请注意, fileName 应该是相对于 checkout directory 的路径,并应指向最终摘要文件的位置(此路径不应被进一步的导航指令修改)。

在构建代理上清理镜像

作为 磁盘空间清理构建功能的一部分,Docker 注册表连接会清理由 TeamCity 构建在此构建代理上创建的镜像。 该构建功能假定 Docker 镜像存储在

  • /var/lib/docker 在 Linux上

  • 在 Windows 上的 %ProgramData% 目录

  • $HOME 在其他系统上的目录

位置非常重要,因为 Free disk space 功能会分析应清理哪些磁盘卷以进行构建。 如果您的 docker 守护进程使用非标准位置存放镜像/容器,则可以使用 teamcity.docker.data.path 配置参数指定该位置,最好在 buildAgent.properties 文件中指定。

Docker Registry 自动登录/登出

添加注册表连接 按钮允许您选择那些 注册表连接 ,这些连接将在构建开始时用于自动授权到相应的注册表。 构建完成后,TeamCity 会从这些注册表中注销。

Amazon ECR

与 Amazon Elastic Container Registry (ECR) 的连接允许将 Docker/Podman 镜像存储在私有 AWS 注册表中。 为此,在将 Docker 注册表连接功能添加到构建配置时,需要选择这样的连接。

连接设置:

设置

描述

AWS 区域

选择位于目标资源的 AWS 区域。

凭证类型

  • 访问密钥 :选择使用预配置的 AWS 帐户访问密钥。 您可以在 AWS 控制台的 Identity and Access Management 部分找到他们。

  • 临时凭据 :通过 AWS STS 获取 临时访问密钥。 此类凭据为短期,并不属于特定用户。

IAM 角色 ARN

仅适用于临时凭证

指定用于生成临时凭据的角色。 您需要在您的 AWS 控制台中 提前创建此角色 ,并将其分配给所有必要的权限。

外部 ID

仅适用于临时凭证

指定一个 external ID。 我们强烈建议您在使用临时凭证时始终进行定义。 这确保了只有 TeamCity 能够使用指定的 IAM 角色。

默认凭据提供程序链

启用此选项,系统会根据 default chain 自动寻找访问密钥。

访问密钥 ID

指定访问密钥 ID。

查看如何获取 这里

密钥访问密钥

指定秘密访问密钥。

查看如何获取 这里

注册表 ID

输入您的注册表 ID 或 AWS 帐户。

Kotlin DSL

以下 Kotlin DSL 代码片段说明了如何将 Docker 注册表连接构建功能添加到您的构建配置中。

import jetbrains.buildServer.configs.kotlin.* object MyBuildConfig : BuildType({ name = "Deploy Web (Windows)" features { dockerRegistryConnections { cleanupPushedImages = true loginToRegistry = on { dockerRegistryId = "PROJECT_EXT_5" } } } })
最后修改日期: 2025年 3月 21日