设置自动化构建
注意自动化构建需要 Docker Pro、Team 或 Business 订阅。
配置自动化构建
您可以在 Docker Hub 中配置仓库,以便在每次将新代码推送到源提供商时自动构建镜像。如果您配置了自动化测试,则只有在测试成功后才会推送新镜像。
在Docker Hub中,转到 My Hub > Repositories,然后选择一个仓库以查看其详细信息。
选择构建选项卡。
选择 GitHub 或 Bitbucket 以连接存储镜像源代码的位置。
注意您可能会被重定向到设置页面以链接代码仓库服务。否则,如果您正在编辑现有自动化构建的构建设置,请选择配置自动化构建。
选择要从中构建 Docker 镜像的源仓库。
注意您可能需要指定源代码提供商的组织或用户。选择用户后,源代码仓库将显示在选择仓库下拉列表中。
可选。启用自动测试。
查看默认的构建规则。
构建规则控制 Docker Hub 从源代码仓库内容构建到镜像中的内容,以及如何在 Docker 仓库中标记生成的镜像。
系统会为您设置一个默认构建规则,您可以编辑或删除它。此默认规则从源代码仓库中名为`master`或`main`的`Branch`进行构建,并创建标记为`latest`的 Docker 镜像。有关更多信息,请参阅设置构建规则。
可选。选择加号图标以添加和配置更多构建规则。
对于每个分支或标签,启用或禁用自动构建切换。
只有启用自动构建的分支或标签才会被构建、测试,并将生成的镜像推送到仓库。禁用自动构建的分支会用于测试目的(如果仓库级别启用),但构建的 Docker 镜像不会推送到仓库。
对于每个分支或标签,启用或禁用构建缓存切换。
构建缓存可以节省时间,如果您经常构建大型镜像或有许多依赖项。保持构建缓存禁用,以确保所有依赖项在构建时解析,或者如果您有一个较大的层,本地构建速度更快。
选择保存以保存设置,或选择保存并构建以保存并运行初始测试。
注意webhook 会自动添加到您的源代码仓库中,以便在每次推送时通知 Docker Hub。只有推送到被列为一个或多个标签源的分支才会触发构建。
设置构建规则
默认情况下,当您设置自动化构建时,系统会为您创建一个基本构建规则。此默认规则会监视源代码仓库中 `master` 或 `main` 分支的更改,并将 `master` 或 `main` 分支构建为带有 `latest` 标签的 Docker 镜像。
在构建规则部分,输入一个或多个要构建的源。
对于每个源
选择源类型来构建标签或分支。这会告诉构建系统在源代码仓库中查找什么。
输入您要构建的源分支或标签的名称。
首次配置自动化构建时,系统会为您设置一个默认构建规则。此默认设置从名为 `master` 的源代码中的 `Branch` 构建,并创建标记为 `latest` 的 Docker 镜像。
您还可以使用正则表达式来选择要构建的源分支或标签。要了解更多信息,请参阅正则表达式。
输入要应用于从该源构建的 Docker 镜像的标签。
如果您配置了正则表达式来选择源,则可以引用捕获组并将其结果用作标签的一部分。要了解更多信息,请参阅正则表达式。
将Dockerfile 位置指定为相对于源代码仓库根目录的路径。如果 Dockerfile 在仓库根目录,请将此路径设置为
/。
注意当 Docker Hub 从源代码仓库拉取分支时,它会执行浅克隆——只克隆指定分支的顶部。有关更多信息,请参阅自动构建和自动测试的高级选项。
构建环境变量
在配置自动化构建时,您可以为构建过程中使用的环境变量设置值。通过选择“构建环境变量”部分旁边的加号图标,然后输入变量名和值来添加构建环境变量。
当您从 Docker Hub 用户界面设置变量值时,您可以通过 `hooks` 文件中设置的命令来使用它们。但是,它们会被存储,只有对 Docker Hub 仓库具有 `admin` 访问权限的用户才能查看其值。这意味着您可以使用它们来存储访问令牌或其他应该保密的信息。
注意构建配置屏幕上设置的变量仅在构建过程中使用,不应与您的服务(例如创建服务链接)使用的环境变量混淆。
高级自动化构建选项
至少,您需要一个由源分支或标签以及目标 Docker 标签组成的构建规则才能设置自动化构建。您还可以
- 更改构建查找 Dockerfile 的位置
- 设置构建应使用的文件路径(构建上下文)
- 设置多个静态标签或分支进行构建
- 使用正则表达式 (regexes) 动态选择要构建的源代码并创建动态标签
所有这些选项都可以在每个仓库的构建配置屏幕上找到。在Docker Hub中,选择我的中心 > 仓库,然后选择要编辑的仓库名称。选择构建选项卡,然后选择配置自动化构建。
标签和分支构建
您可以配置自动化构建,以便推送到特定分支或标签会触发构建。
在构建规则部分,选择加号图标以添加更多要构建的源。
选择源类型以构建标签或分支。
注意这会告诉构建系统在代码仓库中查找哪种类型的源。
输入您要构建的源分支或标签的名称。
注意您可以输入名称,也可以使用正则表达式匹配要构建的源分支或标签名称。要了解更多信息,请参阅正则表达式。
输入要应用于从该源构建的 Docker 镜像的标签。
注意如果您配置了正则表达式来选择源,则可以引用捕获组并将其结果用作标签的一部分。要了解更多信息,请参阅正则表达式。
对于您设置的每个新构建规则,重复步骤 2 到 4。
设置构建上下文和 Dockerfile 位置
根据您在源代码仓库中排列文件的方式,构建镜像所需的文件可能不在仓库根目录。在这种情况下,您可以指定构建查找文件的路径。
构建上下文是构建所需文件的路径,相对于仓库根目录。在构建上下文字段中输入这些文件的路径。输入/将构建上下文设置为源代码仓库的根目录。
注意如果您从构建上下文字段中删除默认路径
/并将其留空,构建系统将使用 Dockerfile 的路径作为构建上下文。但是,为避免混淆,建议您指定完整路径。
您可以将 Dockerfile 位置指定为相对于构建上下文的路径。如果 Dockerfile 位于构建上下文路径的根目录,请将 Dockerfile 路径设置为 /。如果构建上下文字段为空,请从源代码仓库的根目录设置 Dockerfile 的路径。
正则表达式和自动化构建
您可以指定正则表达式 (regex),以便只构建匹配的分支或标签。您还可以使用正则表达式的结果来创建应用于已构建镜像的 Docker 标签。
您最多可以使用九个正则表达式捕获组(或括号内的表达式)来选择要构建的源,并在Docker 标签字段中使用{\1}到{\9}来引用这些捕获组。
使用 BuildKit 构建镜像
自动构建默认使用 BuildKit 构建系统。如果您想使用传统的 Docker 构建系统,请添加环境变量 `DOCKER_BUILDKIT=0`。有关 BuildKit 的更多信息,请参阅BuildKit页面。
团队自动构建
当您在自己的用户帐户中创建自动化构建仓库时,您可以启动、取消和重试构建,以及编辑和删除您自己的仓库。
如果您是所有者,这些操作也适用于 Docker Hub 中的团队仓库。如果您是具有 `write` 权限的团队成员,您可以启动、取消和重试团队仓库中的构建,但不能编辑团队仓库设置或删除团队仓库。如果您的用户帐户具有 `read` 权限,或者您是具有 `read` 权限的团队成员,您可以查看构建配置,包括任何测试设置。
| 操作/权限 | 读取 | 写入 | 管理员 | 所有者 |
|---|---|---|---|---|
| 查看构建详情 | x | x | x | x |
| 开始、取消、重试 | x | x | x | |
| 编辑构建设置 | x | x | ||
| 删除构建 | x |
团队自动构建的服务用户
注意只有所有者才能为团队设置自动化构建。
当您为团队设置自动化构建时,您将使用绑定到特定用户帐户的 OAuth 授予 Docker Hub 访问您的源代码仓库的权限。这意味着 Docker Hub 可以访问链接的源提供商帐户可以访问的所有内容。
对于组织和团队,建议您创建一个专用服务帐户来授予对源提供商的访问权限。这可以确保不会因个人用户访问权限的更改而导致任何构建中断,并且个人用户的个人项目不会暴露给整个组织。
此服务帐户应有权访问所有需要构建的仓库,并且必须对源代码仓库具有管理访问权限,以便它可以管理部署密钥。如果需要,您可以将此帐户限制为仅特定构建所需的一组特定仓库。
如果您正在构建带有链接私有子模块(私有依赖项)的仓库,您还需要向与该帐户关联的自动化构建添加一个覆盖 `SSH_PRIVATE` 环境变量。有关更多信息,请参阅故障排除
在您的源提供商上创建一个服务用户帐户,并为其生成 SSH 密钥。
在您的组织中创建一个“构建”团队。
确保新的“构建”团队有权访问您需要构建的每个仓库和子模块。
在 GitHub 或 Bitbucket 上,转到仓库的设置页面。
将新的“构建”团队添加到已批准的用户列表中。
- GitHub:在协作者和团队中添加团队。
- Bitbucket:在访问管理中添加团队。
将服务用户添加到源提供商上的“构建”团队。
以所有者身份登录 Docker Hub,切换到组织,然后按照说明使用服务帐户链接到源代码仓库。
注意您可能需要从源代码提供商上的个人帐户注销,才能创建与服务帐户的链接。
可选。使用您生成的 SSH 密钥,并按照先前的说明使用服务帐户设置任何带有私有子模块的构建。