设置自动构建

注意

自动构建需要 Docker Pro、团队或商业版订阅。

此页面包含有关以下方面的信息:

配置自动构建

您可以配置 Docker Hub 中的代码库,以便每次将新代码推送到您的源代码提供商时,它们都会自动构建一个镜像。如果您已配置 自动测试,则只有在测试成功后才会推送新镜像。

  1. 在“代码库”部分中,选择一个代码库以查看其详细信息。

  2. 选择“构建”选项卡。

  3. 选择 GitHub 或 Bitbucket 来连接存储镜像源代码的位置。

    注意

    您可能会被重定向到设置页面以 链接 代码库服务。否则,如果您正在编辑现有自动构建的构建设置,请单击“配置自动构建”。

  4. 选择要从中构建 Docker 镜像的源代码库

    注意

    您可能需要从源代码提供商指定一个组织或用户。选择用户后,“选择代码库”下拉列表中将显示源代码代码库。

  5. 可选:启用 自动测试

  6. 查看默认的构建规则

    构建规则控制 Docker Hub 从源代码库内容构建到镜像的内容,以及如何在 Docker 代码库中标记生成的镜像。

    为您设置了一个默认构建规则,您可以编辑或删除它。此默认规则设置来自名为mastermain的源代码库中的分支的构建,并创建一个标记为latest的 Docker 镜像。有关更多信息,请参见 设置构建规则

  7. 可选:选择加号图标以添加和 配置更多构建规则

  8. 对于每个分支或标签,启用或禁用自动构建切换。

    仅启用自动构建的分支或标签才会被构建、测试,并且生成的镜像会被推送到代码库。禁用自动构建的分支将用于测试目的(如果在代码库级别启用),但构建的 Docker 镜像不会推送到代码库。

  9. 对于每个分支或标签,启用或禁用构建缓存切换。

    构建缓存 可以在您频繁构建大型镜像或有很多依赖项时节省时间。禁用构建缓存以确保在构建时解析所有依赖项,或者如果您有一个较大的层,则在本地构建速度更快。

  10. 选择“保存”以保存设置,或选择“保存并构建”以保存并运行初始测试。

    注意

    Webhook 会自动添加到您的源代码库中,以便在每次推送时通知 Docker Hub。只有对列为一个或多个标签源的分支的推送才会触发构建。

设置构建规则

默认情况下,当您设置自动构建时,会为您创建一个基本构建规则。此默认规则会监视源代码库中mastermain分支的更改,并将mastermain分支构建到标记为latest的 Docker 镜像中。

在“构建规则”部分中,输入一个或多个要构建的源。

对于每个源

  • 选择要构建标签还是分支的源类型。这告诉构建系统在源代码库中查找什么。

  • 输入要构建的分支或标签的名称。

    第一次配置自动构建时,会为您设置一个默认构建规则。此默认设置构建来自名为master的源代码中的分支,并创建一个标记为latest的 Docker 镜像。

    您还可以使用正则表达式来选择要构建的源分支或标签。要了解更多信息,请参见 正则表达式

  • 输入要应用于从此源构建的 Docker 镜像的标签。

    如果您配置了正则表达式来选择源,则可以引用捕获组并将其结果用作标签的一部分。要了解更多信息,请参见 正则表达式

  • Dockerfile 位置指定为相对于源代码库根目录的路径。如果 Dockerfile 位于代码库根目录,请将此路径设置为/

注意

当 Docker Hub 从源代码仓库拉取分支时,它会执行浅克隆 - 只克隆指定分支的顶端。更多信息,请参考 自动构建和自动测试的高级选项

构建的环境变量

在配置自动构建时,您可以设置构建过程中使用的环境变量的值。通过选择“**构建环境变量**”部分旁边的**加号**图标,然后输入变量名和值来添加构建环境变量。

当您从 Docker Hub UI 设置变量值时,您可以通过在hooks文件中设置的命令来使用它们。但是,它们的存储方式仅允许拥有 Docker Hub 仓库admin权限的用户查看其值。这意味着您可以使用它们来存储访问令牌或其他应保密的信息。

注意

在构建配置屏幕上设置的变量仅在构建过程中使用,不应与您的服务使用的环境值混淆,例如创建服务链接。

高级自动构建选项

至少需要一个构建规则,该规则由源分支或标签和目标 Docker 标签组成才能设置自动构建。您还可以

  • 更改构建查找 Dockerfile 的位置
  • 设置构建应使用的文件的路径(构建上下文)
  • 设置要从中构建的多个静态标签或分支
  • 使用正则表达式 (regexes) 动态选择要构建的源代码并创建动态标签

所有这些选项都可以在每个仓库的“**构建配置**”屏幕中找到。从左侧导航中选择“**仓库**”,然后选择要编辑的仓库的名称。选择“**构建**”选项卡,然后选择“**配置自动构建**”。

标签和分支构建

您可以配置您的自动构建,以便对特定分支或标签的推送会触发构建。

  1. 在“**构建规则**”部分,选择**加号**图标以添加更多要构建的源。

  2. 选择**源类型**以构建标签或分支。

    注意

    这告诉构建系统在代码仓库中查找哪种类型的源。

  3. 输入要构建的分支或标签的名称。

    注意

    您可以输入名称,或使用正则表达式来匹配要构建的源分支或标签名称。要了解更多信息,请参阅 正则表达式

  4. 输入要应用于从此源构建的 Docker 镜像的标签。

    注意

    如果您配置了正则表达式来选择源,则可以引用捕获组并将其结果用作标签的一部分。要了解更多信息,请参阅 正则表达式

  5. 为设置的每个新的构建规则重复步骤 2 到 4。

设置构建上下文和 Dockerfile 位置

根据您在源代码仓库中文件的排列方式,构建镜像所需的文件可能不在仓库根目录下。如果是这种情况,您可以指定构建查找文件的路径。

构建上下文是构建所需文件的路径,相对于仓库的根目录。在“**构建上下文**”字段中输入这些文件的路径。输入/可将构建上下文设置为源代码仓库的根目录。

注意

如果您从“**构建上下文**”字段中删除默认路径/并将其留空,则构建系统将使用 Dockerfile 的路径作为构建上下文。但是,为了避免混淆,建议您指定完整路径。

您可以将“**Dockerfile 位置**”指定为相对于构建上下文的路径。如果 Dockerfile 位于构建上下文路径的根目录下,请将 Dockerfile 路径设置为/。如果“构建上下文”字段为空,请从源代码仓库的根目录设置 Dockerfile 的路径。

正则表达式和自动构建

您可以指定正则表达式 (regex),以便只构建匹配的分支或标签。您还可以使用正则表达式的结果来创建应用于已构建镜像的 Docker 标签。

您可以使用最多九个正则表达式捕获组(或括号中的表达式)来选择要构建的源,并在“**Docker 标签**”字段中使用{\1}{\9}来引用它们。

使用 BuildKit 构建镜像

自动构建默认使用 BuildKit 构建系统。如果您想使用旧版 Docker 构建系统,请添加 环境变量 DOCKER_BUILDKIT=0。有关 BuildKit 的更多信息,请参阅 BuildKit 页面。

团队的自动构建

当您在自己的用户帐户中创建自动构建仓库时,您可以启动、取消和重试构建,以及编辑和删除您自己的仓库。

如果您是 Docker Hub 的所有者,则团队仓库也提供相同的操作。如果您是拥有写入权限的团队成员,则可以在团队的仓库中启动、取消和重试构建,但您无法编辑团队仓库设置或删除团队仓库。如果您的用户帐户具有读取权限,或者如果您是具有读取权限的团队成员,则可以查看构建配置,包括任何测试设置。

操作/权限读取写入管理员所有者
查看构建详情xxxx
启动、取消、重试xxx
编辑构建设置xx
删除构建x

团队自动构建的服务用户

注意

只有所有者才能为团队设置自动构建。

当您为团队设置自动构建时,您会使用与特定用户帐户绑定的 OAuth 向 Docker Hub 授予对您的源代码仓库的访问权限。这意味着 Docker Hub 可以访问链接的源提供商帐户可以访问的所有内容。

对于组织和团队,建议您创建一个专用的服务帐户来授予对源提供商的访问权限。这确保了在单个用户的访问权限更改时不会中断任何构建,并且单个用户的个人项目不会暴露给整个组织。

此服务帐户应该可以访问所有要构建的仓库,并且必须对源代码仓库具有管理员访问权限,以便它可以管理部署密钥。如有需要,您可以将此帐户限制为仅用于特定构建所需的特定仓库集。

如果您正在构建具有链接的私有子模块(私有依赖项)的仓库,则还需要向与帐户关联的自动构建添加覆盖SSH_PRIVATE环境变量。更多信息,请参阅 疑难解答

  1. 在您的源提供商上创建一个服务用户帐户,并为其生成 SSH 密钥。

  2. 在您的组织中创建一个“构建”团队。

  3. 确保新的“构建”团队可以访问您需要构建的每个仓库和子模块。

    转到仓库的**设置**页面。在 GitHub 上,将新的“构建”团队添加到**协作者和团队**列表中。在 Bitbucket 上,在**访问管理**屏幕上将“构建”团队添加到批准的用户列表中。

  4. 将服务用户添加到源提供商上的“构建”团队。

  5. 以所有者的身份登录 Docker Hub,切换到组织,并按照说明 链接到源代码仓库 使用服务帐户。

    注意

    您可能需要注销源代码提供商上的个人帐户才能创建到服务帐户的链接。

  6. 可选:使用您生成的 SSH 密钥使用服务帐户和 上面的说明 设置任何具有私有子模块的构建。

下一步是什么?