设置自动构建

笔记

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

此页面包含以下信息:

配置自动化构建

您可以在 Docker Hub 中配置存储库,以便每次您将新代码推送到源提供商时它们都会自动构建镜像。如果您配置了 自动化测试,则仅当测试成功时才会推送新映像。

  1. 存储库部分中,选择一个存储库以查看其详细信息。

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

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

    笔记

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

  4. 选择要从中构建 Docker 映像的源存储库。

    笔记

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

  5. 可选:启用 自动测试

  6. 查看默认的构建规则

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

    已为您设置了默认构建规则,您可以编辑或删除该规则。此默认规则设置从Branch源代码存储库中名为 master或 的构建main,并创建一个标记为 的 Docker 映像latest。有关详细信息,请参阅 设置构建规则

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

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

    仅构建、测试启用了自动构建的分支或标签,并将生成的映像推送到存储库。禁用自动构建的分支是出于测试目的而构建的(如果在存储库级别启用),但构建的 Docker 映像不会推送到存储库。

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

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

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

    笔记

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

设置构建规则

默认情况下,当您设置自动构建时,系统会为您创建基本构建规则。此默认规则监视源代码存储库中对master或分支的更改,并将或分支构建到标记为 的 Docker 映像中 。mainmastermainlatest

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

对于每个来源:

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

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

    第一次配置自动构建时,系统会为您设置默认构建规则。此默认集从Branch源代码中名为 的 构建master,并创建一个标记为 的 Docker 映像latest

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

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

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

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

笔记

当 Docker Hub 从源代码存储库中提取分支时,它会执行浅克隆 - 仅指定分支的尖端。 有关详细信息,请参阅 自动构建和自动测试的高级选项。

构建的环境变量

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

hooks当您从 Docker Hub UI 设置变量值时,可以通过在文件中设置的命令使用它们。但是,它们被存储起来,以便只有有权admin访问 Docker Hub 存储库的用户才能看到它们的值。这意味着您可以使用它们来存储访问令牌或其他应保密的信息。

笔记

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

高级自动化构建选项

您至少需要一个由源分支或标记和目标 Docker 标记组成的构建规则来设置自动构建。你也可以:

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

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

标签和分支构建

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

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

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

    笔记

    这告诉构建系统要在代码存储库中查找什么类型的源。

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

    笔记

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

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

    笔记

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

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

设置构建上下文和 Dockerfile 位置

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

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

笔记

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

您可以将Dockerfile 位置指定为相对于构建上下文的路径。如果 Dockerfile 位于构建上下文路径的根目录,请将 Dockerfile 路径设置为/.如果构建上下文字段为空,请设置从源存储库根目录到 Dockerfile 的路径。

正则表达式和自动构建

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

您可以使用最多九个正则表达式捕获组或括在括号中的表达式来选择要构建的源,并使用through在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. 确保新的“构建”团队可以访问您需要构建的每个存储库和子模块。

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

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

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

    笔记

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

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

下一步是什么?