使用 Docker 模板构建 Docker 映像并将其推送到 Azure 容器注册表

Azure DevOps Services

本分步教程介绍如何设置持续集成管道来生成容器化应用程序。 新的拉取请求会触发管道生成 Docker 映像并将其发布到 Azure 容器注册表。

先决条件

获取代码

对 pipeline-javascript-docker 示例应用程序进行分支或克隆:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

创建容器注册表

  1. 登录到 Azure,然后选择右上角的“Azure Cloud Shell”按钮。

    Azure Cloud Shell button

  2. 运行以下命令,以使用 Azure CLI 创建资源组和 Azure 容器注册表。

    # Create a resource group
    az group create --name myapp-rg --location eastus
    
    # Create a container registry
    az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic
    

注意

容器注册表名称必须是小写。

还可以使用 Azure 门户 Web UI 创建 Azure 容器注册表。 有关详细信息,请参阅创建容器注册表

重要

必须启用管理员用户帐户,才能从 Azure 容器注册表部署 Docker 映像。 如需更多详细信息,请参阅容器注册表身份验证

创建管道

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择“管道”,然后选择“新建管道”,以创建新管道。

    Create a new pipeline

  3. 选择“GitHub YAML”,然后选择“授权 Azure Pipelines”,以提供访问存储库的相应权限。

  4. 系统可能会要求你登录到 GitHub。 如果是这样,请输入 GitHub 凭据,然后从存储库列表中选择存储库。

  5. 在“配置”选项卡中,选择“Docker - 生成映像并将其推送到 Azure 容器注册表”任务。

    Build and push Docker images to Azure Container Registry

  6. 选择你的 Azure 订阅,然后选择“继续”。

  7. 从下拉菜单中选择“容器注册表”,然后为容器映像提供“映像名称”。

  8. 完成后,选择“验证并配置”。

    A screenshot showing how to configure a docker pipeline to build and publish an image to Azure Container Registry

    Azure Pipelines 在创建管道的过程中会执行以下操作:

    • 创建一个 Docker 注册表服务连接,使管道能够将映像推送到容器注册表。

    • 生成一个 azure-pipelines.yml 文件用于定义管道。

  9. 查看管道 YAML,然后在准备就绪后选择“保存并运行”。

    Review your pipeline, save & run

  10. 添加“提交消息”,然后选择“保存并运行”以提交所做的更改并运行管道。

  11. 管道运行时,选择生成作业来观察管道运行情况。

    Monitor builds

如何生成管道

我们刚刚在上一部分创建的管道是从 Docker 容器模板 YAML 生成的。 生成阶段使用 Docker 任务Docker@2 生成 Docker 映像并将其推送到容器注册表。

- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

清理资源

如果不打算继续使用此应用程序,可以删除在本教程中创建的资源,以免持续产生费用。 运行以下命令以删除资源组。

az group delete --name myapp-rg