设置自动构建
注意
自动化构建需要 Docker Pro、Team 或 Business 订阅。
本页面包含以下信息:
配置自动构建
您可以在 Docker Hub 中配置代码仓库,使其在您每次向代码托管平台推送新代码时自动构建镜像。如果您已配置了自动化测试,则只有在测试全部通过后才会推送新镜像。
从 仓库 部分中,选择一个仓库以查看其详细信息。
选择 生成 选项卡。
请选择 GitHub 或 Bitbucket 来连接存储镜像源代码的位置。
注意
您可能将被重定向到设置页面,以关联代码仓库服务。否则,如果您正在编辑现有自动化构建的构建设置,请单击配置自动化构建。
选择用于构建 Docker 镜像的源代码仓库。
注意
您可能需要从源代码提供商指定一个组织或用户。选定用户后,源代码仓库将显示在选择仓库下拉列表中。
可选:启用 自动化测试。
查看默认的 构建规则。
构建规则控制 Docker Hub 如何从源代码仓库的内容构建镜像,以及生成的镜像如何在 Docker 仓库中进行标记。
已为您设置默认构建规则,您可以对其进行编辑或删除。此默认规则会从您的源代码仓库
Branch(称为master或main)中构建镜像,并创建一个标记为latest的 Docker 镜像。有关更多信息,请参阅 设置构建规则。可选:选择 加号 图标以添加并 配置更多构建规则。
针对每个分支或标签,启用或禁用 自动构建 开关。
仅启用自动构建的分支或标签才会被构建、测试,并将生成的镜像推送到仓库。 未启用自动构建的分支仅在仓库级别启用时才会被构建用于测试目的, 但生成的 Docker 镜像不会被推送到仓库。
对每个分支或标签,启用或禁用构建缓存开关。
构建缓存 如果频繁构建大型镜像或依赖项较多,构建缓存可节省时间。若希望确保所有依赖项在构建时均被正确解析,或存在一个本地构建更快的大型层,可保持构建缓存处于禁用状态。
选择 保存 以保存设置,或选择 保存并构建 以保存并运行初始测试。
注意
每次推送时,系统会自动向您的源代码仓库中添加 webhook,以通知 Docker Hub。 仅当推送的分支被列为一个或多个标签的来源时,才会触发构建。
设置构建规则
默认情况下,当您设置自动构建时,系统会为您创建一条基础构建规则。
该默认规则会监控源代码仓库中 master 或 main 分支的变更,
并将 master 或 main 分支构建为 Docker 镜像,且该镜像打上 latest 标签。
在构建规则部分,输入一个或多个要构建的源。
对于每个源:
选择 源类型 以构建标签或分支。这将告知构建系统在源代码仓库中查找什么内容。
输入您想要构建的源分支或标签名称。
首次配置自动构建时,系统将为您设置一条默认构建规则。 该默认规则将从源代码中的
Branch构建,并创建一个标记为latest的Docker镜像。您也可以使用正则表达式来选择要构建的源分支或标签。 如需了解更多详情,请参阅 正则表达式。
输入要应用到从此源构建的 Docker 镜像的标签。
如果您配置了正则表达式以选择源,则可以引用捕获组,并将其结果用作标签的一部分。有关更多信息,请参阅正则表达式。
指定 Dockerfile 路径 为相对于源代码仓库根目录的路径。如果 Dockerfile 位于仓库根目录,请将此路径保持为
/。
注意
当 Docker Hub 从源代码仓库拉取分支时,它会执行一次浅层克隆(shallow clone)——仅获取指定分支的最新提交。有关更多信息,请参阅 自动构建和自动测试的高级选项。
构建环境变量
您可以在配置自动化构建时设置构建过程中使用的环境变量的值。 通过选择Build environment variables(构建环境变量)部分旁边的plus(加号)图标, 然后输入变量名及其对应的值,即可添加构建环境变量。
当您通过 Docker Hub 用户界面设置变量值时,可在 hooks 文件中设置的命令中使用这些变量。但这些变量值仅对拥有 admin 访问权限的 Docker Hub 仓库用户可见。这意味着您可以安全地将其用于存储访问令牌或其他应保持机密的信息。
注意
构建配置页面中设置的变量仅在构建过程中使用,不应与服务使用的环境变量混淆,例如用于创建服务链接的环境变量。
高级自动化构建选项
最少您需要一条构建规则,该规则由源分支或标签以及目标 Docker 标签组成,以设置自动化构建。您还可以:
- 更改构建过程查找 Dockerfile 的位置
- 设置构建应使用的文件路径(构建上下文)
- 设置多个静态标签或分支以进行构建
- 使用正则表达式(regexes)动态选择要构建的源代码并创建动态标签
所有这些选项均可在每个仓库的构建配置页面中找到。请从左侧导航栏中选择仓库,然后选择您要编辑的仓库名称。接着选择构建选项卡,再点击配置自动构建。
标签与分支构建
您可以配置自动构建,使推送到特定分支或标签时触发构建。
在构建规则部分,选择加号图标以添加更多构建源。
选择 源类型 以构建标签或分支。
注意
这将告知构建系统在代码仓库中查找的源代码类型。
输入您想要构建的源分支或标签名称。
注意
您可以输入一个名称,或使用正则表达式匹配要构建的源分支或标签名称。 欲了解更多信息,请参阅正则表达式。
输入要应用到从此源构建的 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 密钥。
在您的组织中创建一个“构建”团队。
确保新的“build”团队能够访问您需要进行构建的每个仓库及其子模块。
进入仓库的 设置 页面。在 GitHub 上,将新的 "build" 团队添加到 协作者与团队 列表中。在 Bitbucket 上,将 "build" 团队添加到 访问管理 界面的已批准用户列表中。
将服务用户添加到源提供商的“build”团队中。
以所有者身份登录 Docker Hub,切换至组织,然后按照说明使用服务账户 链接到源代码仓库。
注意
您可能需要先从源代码提供商处注销您的个人账户,才能创建指向服务账户的链接。
可选:使用您生成的 SSH 密钥,通过服务账户并按照上述说明,为包含私有子模块的构建进行配置。