使用 Azure 容器注册表任务自动执行容器映像的生成和维护

容器通过将应用程序和开发人员依赖项与基础结构和操作要求隔离,来提供新的虚拟化级别。 另外还需要解决在容器生命周期中这种应用程序虚拟化的管理和修补方式。

Azure 容器注册表任务是一个功能套件,可用于:

  • 为 linux、Windows 和 ARM 等平台提供基于云的容器映像生成。
  • 使用按需容器映像生成将应用程序开发周期的早期部分扩展到云。
  • 启用由源代码更新、容器的基础映像更新或计时器触发的自动生成。

例如,使用基础映像更新的触发器,可以为 Docker 容器自动执行 OS 和框架修补。 这些触发器有助于在遵守不可变容器原则的同时维护安全环境。

重要

Azure 容器注册表任务运行从 Azure 免费额度临时暂停。 此暂停可能会影响现有任务运行。 如果遇到问题,请提出支持案例,以便我们的团队能够提供其他指导。

警告

请注意,在命令行上或作为 URI 的一部分提供的任何信息都可以记录为 Azure 容器注册表 (ACR) 诊断跟踪的一部分。 这包括敏感数据,例如凭据、GitHub 个人访问令牌和其他安全信息。 请小心防止任何潜在安全风险,务必避免在受诊断日志记录影响的命令行或 URI 中包含敏感详细信息。

任务方案

Azure 容器注册表任务支持使用多种方案来生成和维护容器映像与其他项目。 本文介绍快速任务自动触发的任务以及多步骤任务

每个任务有一个关联的源代码上下文,这是用于生成容器映像或其他项目的源文件的位置。 示例上下文包括 Git 存储库和本地文件系统。

任务还可以利用运行变量,使你能够重复使用任务定义,并标准化映像和项目的标记。

快速任务

“内部循环”开发周期是指编写代码、生成和测试应用程序,然后提交到源代码管理的迭代过程。 它实际上是容器生命周期管理的开始。

Azure 容器注册表任务中的快速任务功能可以通过将容器映像生成卸载到 Azure 来提供集成开发体验。 可以在 Azure 中按需生成单个容器映像并将其推送到容器注册表,且无需安装本地 Docker 引擎。 请考虑云中的 docker builddocker push。 使用快速任务,可以在提交代码之前验证自动化生成定义并捕获潜在的问题。

通过使用熟悉的 docker build 格式,Azure CLI 中的 az acr build 命令可获取上下文。 然后,该命令将上下文发送到 Azure 容器注册表,并在完成后(默认情况下)将生成的映像推送到其注册表。

Azure 容器注册表任务设计为容器生命周期基元。 例如,可以将 Azure 容器注册表任务集成到持续集成和持续交付 (CI/CD) 解决方案中。 如果使用服务主体运行 az login,则 CI/CD 解决方案可以发出 az acr build 命令来启动映像生成。

要了解如何使用快速任务,请参阅快速入门教程,了解如何使用 Azure 容器注册表任务生成和部署容器映像。

提示

Azure 容器注册表提供 az acr pack build 命令(预览版)让你直接从源代码生成和推送映像,而无需使用 Dockerfile。 此工具通过使用云原生生成包基于应用程序源代码生成和推送映像。

自动触发的任务

启用一个或多个触发器来生成映像。

源代码更新时触发任务

可以向 GitHub 或 Azure DevOps 中的公共或专用 Git 存储库提交代码或者发出或更新拉取请求时,触发容器映像生成或多步骤任务。 例如,使用 Azure CLI 命令 az acr task create 并指定 Git 存储库以及可选的分支和 Dockerfile,来配置生成任务。 当团队更新存储库中的代码时,在 Azure 容器注册表任务中创建的 Webhook 会触发存储库中定义的容器映像的生成。

将 Git 存储库设置为任务的上下文时,Azure 容器注册表任务支持以下触发器:

触发器 默认已启用
提交
拉取请求

注意

目前,Azure 容器注册表任务不支持 GitHub Enterprise 存储库中的提交或拉取请求触发器。

要了解如何在提交源代码时触发生成,请参阅使用 Azure 容器注册表任务自动执行容器映像生成

个人访问令牌

要配置源代码更新的触发器,你需要为任务提供个人访问令牌,以便在公共或专用 GitHub 或 Azure DevOps 存储库中设置 Webhook。 个人访问令牌所需的范围如下所示:

存储库类型 GitHub Azure DevOps
公共存储库 repo:status
public_repo
代码(读取)
专用存储库 存储库(完全控制) 代码(读取)

要创建个人访问令牌,请参阅 GitHubAzure DevOps 文档。

自动执行 OS 和框架修补

增强容器生成工作流的 Azure 容器注册表任务的强大之处在于,它能够检测基础映像的更新。 基础映像是大多数容器映像的一项功能。 它是一个或多个应用程序映像所基于的父级映像。 基础映像通常包含操作系统,有时候包含应用程序框架。

可以设置一个 Azure 容器注册表任务,在它生成应用程序映像时跟踪对基础映像的依赖关系。 将更新的基础映像将推送到注册表时,或者在公共存储库(例如 Docker Hub)中更新基础映像时,Azure 容器注册表任务可以基于该映像自动生成任何应用程序映像。 通过这种自动检测和重新生成,Azure 容器注册表任务能够节省在正常情况下手动跟踪和更新引用已更新基础映像的每个应用程序映像所需的时间和精力。

有关详细信息,请参阅关于 Azure 容器注册表任务的基础映像更新教程:在 Azure 容器注册表中更新基础映像时自动执行容器映像生成

计划任务

创建或更新任务时,可以通过设置一个或多个计时器触发器来计划任务。 计划任务有助于按定义的计划运行容器工作负荷,或者对定期推送到注册表的映像运行维护操作或测试。 有关详细信息,请参阅按定义的计划运行 Azure 容器注册表任务

多步骤任务

使用基于多个容器的多步骤工作流扩展 Azure 容器注册表任务的单映像生成和推送功能。

多步骤任务提供用于在云中构建、测试和修补容器映像的基于步骤的任务定义和执行。 在 YAML 文件中定义的任务步骤将指定针对容器映像或其他项目执行的各项生成和推送操作。 它们还可以定义一个或多个容器的执行,每个步骤都使用容器作为其执行环境。

例如,可以创建一个多步骤任务来自动执行以下步骤:

  1. 生成 Web 应用程序映像。
  2. 运行 Web 应用程序容器。
  3. 生成 Web 应用程序测试映像。
  4. 运行针对正在运行的应用程序容器执行测试的 Web 应用程序测试容器。
  5. 如果测试通过,则生成 Helm 图表存档包。
  6. 通过使用新的 Helm 图表存档包执行 helm upgrade 任务。

使用多步骤任务可将映像的生成、运行和测试操作拆分成组合性更强的步骤,并支持步骤之间的依赖关系。 使用 Azure 容器注册表任务中的多步骤任务,可以更精细地控制映像生成、测试,以及 OS 和框架修补的工作流。

详细了解如何在 Azure 容器注册表任务中运行多步骤生成、测试和修补任务

上下文位置

下表显示了 Azure 容器注册表任务的受支持上下文位置的示例:

上下文位置 说明 示例
本地文件系统 本地文件系统上某个目录中的文件。 /home/user/projects/myapp
GitHub 主分支 公共或专用 GitHub 存储库的主分支(或其他默认分支)中的文件。 https://github.com/gituser/myapp-repo.git
GitHub 分支 公共或专用 GitHub 存储库的特定分支。 https://github.com/gituser/myapp-repo.git#mybranch
GitHub 子文件夹 公共或专用 GitHub 存储库中某个子文件夹内的文件。 示例显示了分支和子文件夹规范的组合。 https://github.com/gituser/myapp-repo.git#mybranch:myfolder
GitHub 提交 公共或专用 GitHub 存储库中的特定提交。 示例显示了提交哈希 (SHA) 和子文件夹规范的组合。 https://github.com/gituser/myapp-repo.git#git-commit-hash:myfolder
Azure DevOps 子文件夹 公共或专用 Azure 存储库中某个子文件夹内的文件。 示例显示了分支和子文件夹规范的组合。 https://dev.azure.com/user/myproject/_git/myapp-repo#mybranch:myfolder
远程 tarball 远程 Web 服务器上某个压缩存档中的文件。 http://remoteserver/myapp.tar.gz
容器注册表中的项目 容器注册表存储库中的 OCI 项目文件。 oci://myregistry.azurecr.cn/myartifact:mytag

注意

使用 Git 存储库作为源代码更新触发的任务的上下文时,需要提供个人访问令牌

映像平台

默认情况下,Azure 容器注册表任务为 Linux OS 和 AMD64 体系结构生成映像。 指定 --platform 标记可为其他体系结构生成 Windows 映像或 Linux 映像。 请以“OS/体系结构”格式(例如 --platform Linux/arm)指定 OS 和(可选)支持的体系结构。 对于 ARM 体系结构,可以选择性地以“OS/体系结构/变体”格式(例如 --platform Linux/arm64/v8)指定变体。

操作系统 体系结构
Linux AMD64
ARM
ARM64
386
Windows AMD64

任务输出

每个任务运行都会生成日志输出,检查该输出即可确定任务步骤是否已成功运行。 手动触发某个任务时,会将任务运行的日志输出流式传输到控制台,并将其存储起来供以后检索。 自动触发某个任务(例如,提交源代码或更新基础映像)后,只会存储任务日志。 在 Azure 门户中查看运行日志,或者使用 az acr task logs 命令。

详细了解如何查看和管理任务日志