设置自动化构建

注意

自动化构建需要 Docker Pro、Team 或 Business 订阅。

配置自动化构建

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

  1. Docker Hub中,转到 My Hub > Repositories,然后选择一个仓库以查看其详细信息。

  2. 选择构建选项卡。

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

    注意

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

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

    注意

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

  5. 可选。启用自动测试

  6. 查看默认的构建规则

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

    系统会为您设置一个默认构建规则,您可以编辑或删除它。此默认规则从源代码仓库中名为`master`或`main`的`Branch`进行构建,并创建标记为`latest`的 Docker 镜像。有关更多信息,请参阅设置构建规则

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

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

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

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

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

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

    注意

    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中,选择我的中心 > 仓库,然后选择要编辑的仓库名称。选择构建选项卡,然后选择配置自动化构建

标签和分支构建

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

  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 中的团队仓库。如果您是具有 `write` 权限的团队成员,您可以启动、取消和重试团队仓库中的构建,但不能编辑团队仓库设置或删除团队仓库。如果您的用户帐户具有 `read` 权限,或者您是具有 `read` 权限的团队成员,您可以查看构建配置,包括任何测试设置。

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

团队自动构建的服务用户

注意

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

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

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

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

如果您正在构建带有链接私有子模块(私有依赖项)的仓库,您还需要向与该帐户关联的自动化构建添加一个覆盖 `SSH_PRIVATE` 环境变量。有关更多信息,请参阅故障排除

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

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

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

    1. 在 GitHub 或 Bitbucket 上,转到仓库的设置页面。

    2. 将新的“构建”团队添加到已批准的用户列表中。

      • GitHub:在协作者和团队中添加团队。
      • Bitbucket:在访问管理中添加团队。
  4. 将服务用户添加到源提供商上的“构建”团队。

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

    注意

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

  6. 可选。使用您生成的 SSH 密钥,并按照先前的说明使用服务帐户设置任何带有私有子模块的构建。

下一步?

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.