練習 - 將 Docker 容器部署至 Azure

已完成

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

在此單元中,您將會:

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

定義在管線內共用的變數

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

  1. 從 Azure DevOps 瀏覽至 [管線]

  2. 選取管線。

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

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

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

取代建置階段工作

安 迪: 我認為我們不再需要這些建置工作,因為項目資料夾中的 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)

取代部署階段的任務

安迪: 嗯,這似乎相當簡單。 現在,我們需要尋找可指示App Service使用新推送版本的容器映像的工作。

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

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

適用於容器的 Azure Web 應用程式工作的設計目的是將 Docker 容器部署至 Azure App Service。 將整個 部署 階段取代為下列 YAML 代碼段。

  • appName:指定現有 Azure App Service 的名稱。
  • azureSubscription:指定部署的 Azure Resource Manager 訂用帳戶名稱。
  • imageName:指定完整合格的容器映像名稱,例如,myregistry.azurecr.io/nginx:latestpython: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. 選取 [ 執行],並確定您的分支已設定為 main。 完成時,請選取 [ 執行 ]。

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

    Azure Pipelines 的螢幕快照,其中顯示網站 URL 的位置。

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

    Space Game 網站的螢幕快照。

安 迪: 結果很棒! 我認為採用容器對於我們的團隊來說可能是一場巨大的勝利。