練習 - 將 Docker 容器部署到 Azure

已完成

專案隨附的發行管線可在解決方案中建立專案,並將 Web 應用程式部署至其 App Service。 現在,是時候更新該管線建置並將專案部署為容器了。

在本單元中,您將會:

  • 定義一些管線變數,以更輕鬆維護組建管線。
  • 將現有的組建工作換成整合工作,以建立並推送 Docker 容器。
  • 將現有的部署工作換成別的工作,改以新的容器映像來更新 App Service Web 應用程式。
  • 儲存管線以觸發組建和發行。

定義要在管線內共用的變數

在這裡,您會將新的管線變數新增至 azure-pipelines.yml定義的現有 YAML 管線。

  1. 從 Azure DevOps 瀏覽至 Pipelines

  2. 選取管線。

  3. 選取編輯。 從下拉功能表中選取分支,確定分支已設定為 main 。 這會顯示您的 azure-pipelines.yml 檔案。

  4. 新增下列醒目提示的行,以新增名為 webRepositorytag 的管線變數。 這些在多個工作中用來唯一識別所參考容器的特定版本。 您也可以移除 buildConfiguration 變數;您不再需要它。

    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      webRepository: 'web'
      tag: '$(Build.BuildId)'
    

取代組建階段工作

Andy: 我認為我們不再需要這些建置工作,因為項目資料夾中的 Dockerfile 已經定義我們想要的組建。 但我還沒機會找到什麼可讓我們使用 Dockerfile 來建立映像。 有什麼想法?

Mara:我還在找。 好像只要一個工作就可以建立容器,甚至推送至存放庫。 馬上新增。

Docker 工作

您可以使用 Docker 工作 來建置及部署 Docker 映射。 將整個組建階段替換為下面的 YAML 片段。

  • command:指定要執行的 Docker 命令。
  • buildContext:指定建置內容的路徑。
  • 存放庫:指定存放庫的名稱。
  • dockerfile:指定 Dockerfile 的路徑。
  • containerRegistry:指定 Docker 登錄服務連線的名稱。
  • tags:指定個別行上的標籤清單。 這些標記用於組建、推送和buildAndPush命令。
- stage: 'Build'
  displayName: 'Build and push'
  jobs:  
  - job: 'Build'
    displayName: 'Build job'
    pool:
      vmImage: 'ubuntu-20.04'
    steps:
    - task: Docker@2
      displayName: 'Build and push the image to container registry'
      inputs:
        command: buildAndPush
        buildContext: $(Build.Repository.LocalPath)
        repository: $(webRepository)
        dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
        containerRegistry: 'Container Registry Connection'
        tags: |
          $(tag)

更換部署階段工作

Andy: 嗯,這似乎相當直接。 現在我們只需要找到一項工作,以指示 App Service 使用新推送的容器映像版本。

Mara:已經做好。 這與將組建部署到 Azure Pipelines 有些不同,但還算夠直接,以至於我們可以在一項工作中完成作業。 馬上新增。

適用於容器的 Azure Web 應用程式工作

適用於容器的 Azure Web 應用程式工作被設計用來將 Docker 容器部署至 Azure App Service。 將整個部署階段替換為下面的 YAML 片段。

  • appName:指定現有 Azure App 服務 的名稱。
  • azureSubscription:指定部署的 Azure Resource Manager 訂用帳戶名稱。
  • imageName:指定完整容器映像名稱, myregistry.azurecr.io/nginx:latest 例如 或 python:3.7.2-alpine/
- stage: 'Deploy'
  displayName: 'Deploy the container'
  dependsOn: Build
  jobs:
  - job: 'Deploy'
    displayName: 'Deploy job'
    pool:
      vmImage: 'ubuntu-20.04'
    variables:
    - group: Release
    steps:
    - task: AzureWebAppContainer@1
      inputs:
       appName: $(WebAppName)
       azureSubscription: 'Resource Manager - Tailspin - Space Game'
       imageName: $(RegistryName)/$(webRepository):$(build.buildId)

儲存管線以觸發組建和發行

  1. 從頁面右上角選取 [ 儲存 ]。 輸入您的認可訊息,然後選取 [ 儲存 ] 以確認。

  2. 選取 [執行],並確定分支設定為「主分支」。 完成後,選取 [執行]

  3. 選取管線以檢視記錄。 組建成功之後,選取 [AzureWebAppContainer] 工作,然後選取 [App Service 應用程式 URL] 以檢視已部署的 Web 應用程式。

    Screenshot of Azure Pipelines showing the location of the website URL.

  4. 您應該會看到 Web 應用程式在 App Service 上執行。

    Screenshot of the Space Game website.

Andy:太棒了! 我認為採用容器對我們的團隊來說會很有幫助。