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