使用 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”按钮

  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. 选择“管道”,然后选择“新建管道”,以创建新管道。

    创建新管道

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

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

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

    生成 Docker 映像并将其推送到 Azure 容器注册表

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

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

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

    屏幕截图显示如何配置 Docker 管道以生成映像并将其发布到 Azure 容器注册表

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

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

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

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

    查看管道,保存并运行

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

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

    监视器生成

如何生成管道

我们刚刚在上一部分创建的管道是从 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