Azure DevOps Services
本快速入门介绍如何使用 Azure Pipelines 为应用部署生成容器映像。 若要生成此映像,只需存储库中的 Dockerfile。 可以根据管道中使用的代理生成 Linux 或 Windows 容器。
先决条件
| 类别 | 要求 | 
|---|---|
| Azure DevOps | - Azure DevOps 项目。 - 能够在 Microsoft 托管的代理上运行管道。 可以购买 并行作业 ,也可以请求免费层。 - 对 YAML 和 Azure Pipelines 的基本知识。 有关详细信息,请参阅 创建第一个管道。 - 权限: 若要创建管道,用户需要位于 “参与者 ”组中,并且该组需要将 “创建生成管道 ”权限设置为“允许”。 生成管理员和项目管理员组的成员还可以管理管道。 | 
| GitHub | - GitHub 帐户。 - 用于授权 Azure Pipelines 的 GitHub 服务连接 。 | 
| 天蓝色 | 一个 Azure 订阅。 | 
创建示例存储库分支
在浏览器中,转到以下示例存储库,并将其分支到 GitHub 帐户。
https://github.com/MicrosoftDocs/pipelines-javascript-docker
生成 Linux 或 Windows 映像
- 登录到你的 Azure DevOps 组织,并转到你的项目。 
- 转到“管道”,如果在项目中创建第一个管道,请选择“新建管道”或“创建管道”。 
- 选择“GitHub”作为源代码位置。 
- 选择你的存储库,然后选择“初学者管道”。 - 如果你已重定向到 GitHub 进行登录,请输入 GitHub 凭据。
- 如果你已重定向到 GitHub 来安装 Azure Pipelines 应用,请选择“批准并安装”。
 
- 将 azure-pipelines.yml 的内容替换为以下代码。 根据是部署 Linux 还是 Windows 应用,将其设置为 - vmImage或- ubuntu-latest- windows-latest。- trigger: - main pool: vmImage: 'ubuntu-latest' variables: imageName: 'pipelines-javascript-docker' steps: - task: Docker@2 displayName: Build an image inputs: repository: $(imageName) command: build Dockerfile: app/Dockerfile
- 完成后,选择“保存并运行”。 
- 将 azure-pipelines.yml 文件添加到存储库时,系统会提示你添加提交消息。 输入消息,然后选择“保存并运行”。 
使用自承载代理时,请确保在代理的主机上安装 Docker,并使用提升的权限运行 Docker 引擎/守护程序。
若要生成映像,必须在代理的主机上安装 Docker,并且 Docker 引擎/守护程序必须以提升的权限运行。 使用以下步骤使用 YAML 管道编辑器创建管道。
- 转到集合,并创建项目。
- 在项目中,选择“管道”。
- 选择 Create Pipeline。
- 选择 GitHub Enterprise Server 作为源代码的位置。
- 如果尚未这样做,请授权 Azure Pipelines 连接到 GitHub Enterprise Server 帐户。
- 选择连接到 GitHub Enterprise Server。
- 输入帐户详细信息,然后选择“验证并保存”。
 
- 选择存储库。 如果你已重定向到 GitHub 来安装 Azure Pipelines 应用,请选择“批准并安装”。
- 若要配置管道,请选择“生成 Docker 映像”模板。
- 在 YAML 管道编辑器中,将 YAML 文件的内容替换为以下代码。 将池名称替换为包含具有 Docker 功能的自托管代理的池的名称。
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
trigger:
- main
pool:
  name: default
  demands: docker
variables:
  imageName: 'pipelines-javascript-docker'
steps:
 - task: Docker@2
   displayName: Build an image
   inputs:
     repository: $(imageName)
     command: build
     Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'
- 选择保存并运行。
- 在“保存并运行”页面上,再次选择“保存并运行”。
有关生成 Docker 映像的详细信息,请参阅此示例应用程序使用的 Docker 任务。 也可以使用命令行任务直接调用 Docker 命令。
容器映像将构建并存储在代理上。 将映像推送到 Google 容器注册表、Docker 中心或 Azure 容器注册表。 有关详细信息,请参阅将映像推送到 Docker Hub 或 Google Container Registry,或将映像推送到 Azure 容器注册表。
清理资源
如果不打算继续使用此应用程序,请删除管道和代码存储库。
FAQ
可以使用哪些代理来生成容器映像?
- 可以使用 Microsoft 托管的 Ubuntu 代理或基于 Linux 平台的自托管代理生成 Linux 容器映像。 
- 可以使用 Microsoft 托管的 Windows 代理或基于 Windows 平台的自托管代理生成 Windows 容器映像。 所有 Microsoft 托管的基于 Windows 平台的代理都附带 Docker 生成所需的 Moby 引擎和客户端。 
- 不能使用Microsoft托管的 macOS 代理生成容器映像,因为生成映像所需的 Moby 引擎未在这些代理上预安装。 
有关详细信息,请参阅 Microsoft 托管的代理可用的 Windows 和 Linux 代理选项。
托管代理上提供哪些预缓存的 Docker 映像?
为了节省从容器注册表中拉取每个作业的 Docker 映像所需的时间,部分常用映像已在 Microsoft 托管的代理上预缓存。
如何为 Docker 生成设置 BuildKit 变量?
BuildKit 在生成的性能、存储管理、特性/功能和安全性方面做出了改进。 Windows 主机目前不支持 BuildKit。
若要使用 BuildKit 启用 Docker 生成,请设置 DOCKER_BUILDKIT 变量。
trigger:
- main
   
pool:
  vmImage: 'ubuntu-latest'
   
variables:
  imageName: 'pipelines-javascript-docker'
  DOCKER_BUILDKIT: 1
    
steps:
- task: Docker@2
  displayName: Build an image
  inputs:
    repository: $(imageName)
    command: build
    Dockerfile: app/Dockerfile
如何使用自托管代理?
必须安装 Docker,并且引擎或守护程序在代理的主机上运行。 如果未安装 Docker,请将 Docker 安装程序任务 添加到管道。 在 Docker 任务之前添加 Docker 安装程序任务。
如何创建基于脚本的 Docker 生成而不使用 Docker 任务?
可以使用 build 命令或任何其他 Docker 命令。
docker build -f Dockerfile -t foobar.azurecr.io/hello:world .
此命令创建一个与使用 Docker 任务生成的映像等效的映像。 在内部,Docker 任务会调用脚本中的 Docker 二进制文件,并将其他几个命令拼结在一起以额外提供几项优势。 详细了解 Docker 任务。
是否可以在 Azure Pipelines 上生成期间重用层缓存?
如果使用Microsoft托管代理,则会根据从 azure-pipelines-image-generation 存储库 模板生成的映像将每个作业调度到新预配的虚拟机。 该作业完成后,将清理这些虚拟机。 这种短暂的生存期会阻止将这些虚拟机重用于后续作业,并会阻止重用缓存的 Docker 层。 解决方法是设置一个多阶段生成,以生成两个映像并在早期阶段将其推送到映像注册表。 然后,可以使用 --cache-from 参数告知 Docker 使用这些映像作为缓存源。
如果使用自托管代理,则无需采用任何解决方法即可缓存 Docker 层,因为短暂的生存期问题不适用于这些代理。
如何为 x64 以外的体系结构生成 Linux 容器映像?
当你使用 Microsoft 托管的 Linux 代理时,会为 x64 体系结构创建 Linux 容器映像。 若要为其他体系结构(如 x86 或 ARM 处理器)创建映像,可以使用 QEMU 等计算机仿真器。
按照以下步骤使用 QEMU 创建 ARM 处理器容器映像:
- 使用与目标体系结构匹配的基础映像创建 Dockerfile: - FROM arm64v8/alpine:latest
- 生成映像之前,在作业中运行以下脚本: - # register QEMU binary - this can be done by running the following image docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # build your image
有关详细信息,请参阅 GitHub 上的 qemu-user-static。
如何针对容器化应用程序运行测试并发布测试结果?
若要浏览用于测试容器化应用程序和发布测试结果的选项,请参阅 “发布测试结果”任务。
后续步骤
生成容器映像后,将映像推送到 Azure 容器注册表、Docker Hub 或 Google 容器注册表。 若要了解如何将映像推送到容器注册表,请参阅以下任一文章: