使用 Azure Pipelines 和 Compute Engine 建立持續整合/持續推送軟體更新管道

Last reviewed 2023-03-09 UTC

本教學課程說明如何使用 Azure PipelinesCompute Engine,為 ASP.NET MVC 網頁應用程式建立持續整合/持續部署 (CI/CD) 管道。應用程式使用 Microsoft Internet Information Services,並在 Windows Server 上執行。

CI/CD 管道使用兩個分開的環境:一個用於測試,另一個用於實際工作。

在管道的一開始,開發人員會將變更推送至範例程式碼基底。這項動作會觸發管道建構應用程式、將其封裝為 ZIP 檔案,並將 ZIP 檔案上傳至 Cloud Storage。

系統會接著使用滾動式更新,將套件自動發布至開發環境。測試完畢後,版本管理員可以升級版本,將該版本部署至實際工作環境中。

本教學課程適用於開發人員和 DevOps 工程師。本文假設您已具備 .NET Framework、Windows Server、IIS、Azure Pipelines 和 Compute Engine 的基本知識。另外,也會要求您擁有 Azure DevOps 帳戶的管理權限。

目標

  • 使用 Compute Engine 代管執行個體群組實作滾動式部署。
  • 在 Azure Pipelines 中設定 CI/CD 管道來自動化調度管理建構、建立及部署程序。

費用

在本文件中,您會使用下列 Google Cloud的計費元件:

您可以使用 Pricing Calculator,根據預測用量估算費用。

初次使用 Google Cloud 的使用者可能符合免費試用期資格。

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」一節。

如要瞭解使用 Azure DevOps 可能需要支付的任何費用,請參閱 Azure DevOps 定價頁面

事前準備

我們通常建議使用不同的專案來處理開發環境工作負載與實際工作環境工作負載,這樣就能分別授予身分與存取權管理 (IAM) 角色與權限。為求簡單起見,本教學課程的開發和實際工作環境會使用同一個專案。

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Enable the Compute Engine and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  3. Verify that billing is enabled for your Google Cloud project.

  4. 確認您有 Azure DevOps 帳戶並具備其管理權限。 如果您還沒有 Azure DevOps 帳戶,可以在 Azure DevOps 首頁進行註冊。

建立 Azure DevOps 專案

您可使用 Azure DevOps 來管理原始碼、執行建構與測試,以及自動化調度管理 Compute Engine 部署作業。首先,請在您的 Azure DevOps 帳戶中建立專案。

  1. 前往 Azure DevOps 首頁 (https://dev.azure.com/YOUR_AZURE_DEVOPS_ACCOUNT_NAME)。
  2. 按一下「New Project」
  3. 輸入專案名稱,例如 CloudDemo
  4. 將「Visibility」設為 [Private],然後按一下 [Create]
  5. 建立專案之後,請在左側的選單中按一下「Repos」
  6. 按一下「Import」,從 GitHub 建立 dotnet-docs-samples 存放區的分支,然後設定下列值:
    • 「存放區類型」Git
    • 「Clone URL」https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
  7. 按一下「匯入」

    匯入程序完成後,您會看到 dotnet-docs-samples 存放區的原始碼。

  8. 在選單中,依序按一下「Repos」>「Branches」

  9. 將滑鼠游標移到 main 分支版本上。右側會顯示「...」按鈕。

  10. 依序按一下「...」>「設為預設分支」

持續建構

您現在可以使用 Azure Pipelines 設定建構管道。針對已推送至 Git 存放區的每個修訂版本,Azure Pipelines 都會建構程式碼,並將程式碼封裝至 zip 檔案,然後將產生的套件發布至內部 Azure Pipelines 儲存空間。

稍後,您會設定發布管道,使用 Azure Pipelines 儲存空間中的套件,並將其部署至 Compute Engine。

建立建構定義

在 Azure Pipelines 中建立使用 YAML 語法的新建構定義:

  1. 使用 Visual Studio 或指令列 git 用戶端複製新的 Git 存放區
  2. 在存放區的根目錄中,建立名為 azure-pipelines.yml 的檔案。
  3. 複製下列程式碼,並貼到檔案中:

    resources:
    - repo: self
      fetchDepth: 1
    trigger:
    - main
    variables:
      artifactName: 'CloudDemo.Mvc'
    jobs:
    - job: Build
      displayName: Build application
      condition: succeeded()
      pool:
        vmImage: windows-latest
        demands:
        - msbuild
        - visualstudio
      variables:
        Solution: 'applications/clouddemo/net4/CloudDemo.Mvc.sln'
        BuildPlatform: 'Any CPU'
        BuildConfiguration: 'Release'
        ArtifactName: 'CloudDemo.Web'
      steps:
      - task: NuGetCommand@2
        displayName: 'NuGet restore'
        inputs:
          restoreSolution: '$(Solution)'
      - task: VSBuild@1
        displayName: 'Build solution'
        inputs:
          solution: '$(Solution)'
          msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"'
          platform: '$(BuildPlatform)'
          configuration: '$(BuildConfiguration)'
      - task: PublishBuildArtifacts@1
        displayName: 'Publish Artifact'
        inputs:
          PathtoPublish: '$(build.artifactstagingdirectory)/CloudDemo.Mvc.zip'
          ArtifactName: '$(ArtifactName)'
  4. 修訂變更並推送到 Azure Pipelines。

    Visual Studio

    1. 開啟 Team Explorer,然後按一下「首頁」圖示。
    2. 按一下 [Changes] (變更)
    3. 輸入修訂訊息,例如 Add pipeline definition
    4. 按一下 [Commit All and Push] (全部認可並推送)

    指令列

    1. 暫存所有已修改的檔案:

      git add -A
      
    2. 修訂本機存放區的變更:

      git commit -m "Add pipeline definition"
      
    3. 將變更推送至 Azure DevOps:

      git push
      
  5. 在 Azure DevOps 選單中選取「Pipelines」,然後按一下「Create Pipeline」

  6. 選取「Azure Repos Git」

  7. 選取存放區。

  8. 在「Review your pipeline YAML」(檢查管道 YAML) 頁面中,按一下「Run」(執行)

    系統會觸發新的建構作業。建構約需 2 分鐘才能完成。建構作業結束時,在內部 Azure Pipelines 成果儲存空間區域將會提供應用程式套件 CloudDemo.Mvc.zip,這個套件會包含網路應用程式的所有檔案。

持續部署

現在 Azure Pipelines 會自動建構每個修訂版本的程式碼,因此您可以將注意力轉移到部署作業上。

Azure Pipelines 與其他持續整合系統不同,會區分建構與部署,並提供一套名為「Release Management」的特殊工具,供所有部署相關工作使用。

Azure Pipelines Release Management 是根據下列概念建構而成:

  • 「版本」是指一組構件,這些構件組成了應用程式的特定版本,且通常是建構過程的結果。
  • 「部署」是指建立版本,並將它部署至特定環境中的過程。
  • 部署會執行一組「任務」,您可將這組任務組成工作。
  • 「階段」可讓您為管道分段,以用來自動化調度管理部署作業到多個環境,例如部署與測試環境。

您設定發布管道,在每次完成新版本建構作業時觸發管道。這個管線包含三個階段:

  1. 在第一階段,管道會從 Azure Pipelines 構件儲存區取得應用程式套件,並發布至 Cloud Storage bucket,讓 Compute Engine 存取該套件。
  2. 在第二階段,管道會使用滾動式更新更新開發環境。
  3. 在最後階段,管道會在核准後使用滾動式更新,更新實際工作環境。

為建構構件建立 Cloud Storage bucket

建立 Cloud Storage bucket,用於儲存應用程式套件。 稍後,您會設定 Compute Engine,讓新的 VM 執行個體可以自動從這個值區提取應用程式套件。

  1. 在 Google Cloud 控制台中,切換至您剛建立的專案。
  2. 開啟 Cloud Shell。

    前往 Cloud Shell

  3. 為節省時間,請設定專案 ID 和 Compute Engine 區域的預設值:

    gcloud config set project PROJECT_ID
    gcloud config set compute/zone ZONE

    PROJECT_ID 換成 Google Cloud 專案 ID,並將 ZONE 換成您將用於建立資源的區域名稱。如果您不確定該選用哪個區域,請使用 us-central1-a

    範例:

    gcloud config set project devops-test-project-12345
    gcloud config set compute/zone us-central1-a
  4. 建立新的 Cloud Storage bucket 來存放應用程式套件:

    gcloud storage buckets create gs://$(gcloud config get-value core/project)-artifacts
    

    如果您不想保留所有建構作業的應用程式套件,可考慮設定物件生命週期規則來刪除超過特定時間的檔案。

為 Azure Pipelines 設定服務帳戶

建立 Google Cloud 服務帳戶,供 Azure Pipelines 存取您的 Google Cloud 專案。

  1. 為 Azure Pipelines 建立服務帳戶:

    AZURE_PIPELINES_SERVICE_ACCOUNT=$(gcloud iam service-accounts create azure-pipelines --format "value(email)")
    
  2. 將「Storage 物件檢視者」(roles/storage.objectViewer) 和「Storage 物件建立者」(roles/storage.objectCreator) IAM 角色授予 azure-pipelines 服務帳戶,讓 Azure Pipelines 可以將應用程式套件上傳至 Cloud Storage:

    gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
        --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \
        --role roles/storage.objectViewer
    gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
        --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \
        --role roles/storage.objectCreator
    
  3. 將 Compute 管理員 (roles/compute.admin) 角色授予 azure-pipelines 服務帳戶,讓 Azure Pipelines 管理 VM 執行個體:

    gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
        --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \
        --role roles/compute.admin
    
  4. 產生服務帳戶金鑰:

    gcloud iam service-accounts keys create azure-pipelines-key.json \
      --iam-account=$AZURE_PIPELINES_SERVICE_ACCOUNT
    
    cat azure-pipelines-key.json | base64 -w 0;echo
    
    rm azure-pipelines-key.json
    

    您會在下列其中一個步驟中用到服務帳戶金鑰。

設定開發環境

在您可以使用 Azure Pipelines 設定自動化部署的步驟之前,必須先準備開發環境。準備工作包括建立代管執行個體群組,這個群組將會管理網路伺服器 VM 執行個體。此外,也包括建立 HTTP 負載平衡器。

  1. 在 Cloud Shell 中,為代管執行個體群組建立服務帳戶:

    DEV_SERVICE_ACCOUNT=$(gcloud iam service-accounts create clouddemo-dev --format "value(email)")
    
  2. Storage 物件檢視者 IAM 角色 (roles/storage.objectViewer) 授予服務帳戶,讓 VM 執行個體可以從 Cloud Storage 下載應用程式套件:

    gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \
        --member serviceAccount:$DEV_SERVICE_ACCOUNT \
        --role roles/storage.objectViewer
    
  3. 授予 azure-pipelines 服務帳戶權限,以使用 clouddemo-dev 服務帳戶:

    gcloud iam service-accounts add-iam-policy-binding $DEV_SERVICE_ACCOUNT \
        --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \
        --role roles/iam.serviceAccountUser
    
  4. 建立使用標準 Windows Server 2019 Core 映像檔的執行個體範本。您只會在一開始用到這個範本,因為每個建構作業都會產生新版本。

    gcloud compute instance-templates create clouddemo-initial \
        --machine-type n1-standard-2 \
        --image-family windows-2019-core \
        --image-project windows-cloud \
        --service-account $DEV_SERVICE_ACCOUNT \
        --scopes https://www.googleapis.com/auth/devstorage.read_only \
        --tags gclb-backend
    
  5. 建立 HTTP 健康狀態檢查。由於應用程式沒有專用的健康狀態檢查端點,因此您可以查詢路徑 /

    gcloud compute http-health-checks create clouddemo-dev-http \
        --check-interval=10s --unhealthy-threshold=10 \
        --request-path=/
    
  6. 使用初始執行個體範本建立代管執行個體群組。為求簡化,下列指令會建立區域代管執行個體群組。不過,您可以使用相同的方法來建立地區代管執行個體群組,將 VM 執行個體分散至多個區域。

    gcloud compute instance-groups managed create clouddemo-dev \
        --template=clouddemo-initial \
        --http-health-check=clouddemo-dev-http \
        --initial-delay=2m \
        --size=1 && \
    gcloud compute instance-groups set-named-ports clouddemo-dev --named-ports http:80
    
  7. 建立負載平衡器後端服務,來使用 HTTP 健康狀態檢查和之前建立的代管執行個體群組:

    gcloud compute backend-services create clouddemo-dev-backend \
        --http-health-checks clouddemo-dev-http \
        --port-name http --protocol HTTP --global && \
    gcloud compute backend-services add-backend clouddemo-dev-backend \
        --instance-group clouddemo-dev --global \
        --instance-group-zone=$(gcloud config get-value compute/zone)
    
  8. 建立負載平衡器前端:

    gcloud compute url-maps create clouddemo-dev --default-service clouddemo-dev-backend && \
    gcloud compute target-http-proxies create clouddemo-dev-proxy --url-map=clouddemo-dev && \
    gcloud compute forwarding-rules create clouddemo-dev-fw-rule --global --target-http-proxy clouddemo-dev-proxy --ports=80
    
  9. 建立防火牆規則,允許 Google 負載平衡器將 HTTP 要求傳送至加註 gclb-backend 標記的執行個體。之後,您可以將這個標記套用至網路服務 VM 執行個體。

    gcloud compute firewall-rules create gclb-backend --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=gclb-backend --allow tcp:80
    

設定正式環境

設定實際工作環境時,所需執行的一連串步驟與設定開發環境的步驟相似。

  1. 在 Cloud Shell 中建立 HTTP 健康狀態檢查:

    gcloud compute http-health-checks create clouddemo-prod-http \
        --check-interval=10s --unhealthy-threshold=10 \
        --request-path=/
    
  2. 使用之前建立的初始執行個體範本建立另一個代管執行個體群組:

    gcloud compute instance-groups managed create clouddemo-prod \
        --template=clouddemo-initial \
        --http-health-check=clouddemo-prod-http \
        --initial-delay=2m \
        --size=1 && \
    gcloud compute instance-groups set-named-ports clouddemo-prod --named-ports http:80
    
  3. 建立負載平衡器後端服務,來使用 HTTP 健康狀態檢查和之前建立的代管執行個體群組:

    gcloud compute backend-services create clouddemo-prod-backend --http-health-checks clouddemo-prod-http --port-name http --protocol HTTP --global && \
    gcloud compute backend-services add-backend clouddemo-prod-backend --instance-group clouddemo-prod --global --instance-group-zone=$(gcloud config get-value compute/zone)
    
  4. 建立負載平衡器前端:

    gcloud compute url-maps create clouddemo-prod --default-service clouddemo-prod-backend && \
    gcloud compute target-http-proxies create clouddemo-prod-proxy --url-map=clouddemo-prod && \
    gcloud compute forwarding-rules create clouddemo-prod-fw-rule --global --target-http-proxy clouddemo-prod-proxy --ports=80
    

設定發布管道

建立新的發布定義:

  1. 在 Azure DevOps 選單中,選取「Pipelines」>「Releases」
  2. 按一下 [New pipeline]
  3. 從範本清單中選取 [Empty job]
  4. 當系統提示您輸入階段名稱時,請輸入 Publish
  5. 在畫面頂端,將版本命名為 clouddemo-ComputeEngine
  6. 在管道圖的 [Artifacts] 旁,按一下 [Add]
  7. 選取 [Build],並新增下列設定:

    • 來源:選取含有 azure-pipelines.yml 檔案的 Git 存放區。
    • 預設版本Latest
    • 來源別名CloudDemo.Web
  8. 按一下「新增」。

  9. 按一下「Artifact」方塊中的「Continuous deployment trigger」(持續部署觸發程序) (閃電圖示),新增部署觸發條件。

  10. 在「Continuous deployment trigger」(持續部署觸發程序) 底下,將切換按鈕設定為 [Enabled] (已啟用)

  11. 按一下 [儲存]

  12. 視需要輸入註解,然後按一下 [OK] 確認。

管道現在看起來會像這樣:

Azure Pipelines 中的管道螢幕擷取畫面

發布至 Cloud Storage

現在您已經建立了版本定義,可以開始新增步驟,將應用程式套件發布至 Cloud Storage。

  1. 在 Azure Pipelines 中,切換至「Tasks」(工作) 分頁。
  2. 按一下「Agent job」(代理程式工作),然後設定下列項目:
    • 代理程式集區Azure Pipelines
    • 代理程式規格ubuntu-latest
  3. 在「Agent job」 旁,按一下「Add a task to agent job」(將工作新增至代理程式工作)
  4. 選取 bash 工作,然後按一下「新增」
  5. 按一下新增的工作,然後進行下列設定:

    • 顯示名稱Publish to Cloud Storage
    • 類型inline
    • 腳本

      cat << "EOF" > CloudDemo.Mvc.deploy.ps1
          $ErrorActionPreference = "Stop"
      
          # Download application package from Cloud Storage
          gcloud storage cp gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).zip $env:TEMP\app.zip
      
          # Install IIS
          Enable-WindowsOptionalFeature -Online -FeatureName `
              NetFx4Extended-ASPNET45, `
              IIS-WebServerRole, `
              IIS-WebServer, `
              IIS-CommonHttpFeatures, `
              IIS-HttpErrors, `
              IIS-HttpRedirect, `
              IIS-ApplicationDevelopment, `
              IIS-HealthAndDiagnostics, `
              IIS-HttpLogging, `
              IIS-LoggingLibraries, `
              IIS-RequestMonitor, `
              IIS-HttpTracing, `
              IIS-Security, `
              IIS-RequestFiltering, `
              IIS-Performance, `
              IIS-WebServerManagementTools, `
              IIS-IIS6ManagementCompatibility, `
              IIS-Metabase, `
              IIS-DefaultDocument, `
              IIS-ApplicationInit, `
              IIS-NetFxExtensibility45, `
              IIS-ISAPIExtensions, `
              IIS-ISAPIFilter, `
              IIS-ASPNET45, `
              IIS-HttpCompressionStatic
      
          # Extract application package to wwwroot
          New-Item -ItemType directory -Path $env:TEMP\app
          Add-Type -AssemblyName System.IO.Compression.FileSystem
          [System.IO.Compression.ZipFile]::ExtractToDirectory("$env:TEMP\app.zip", "$env:TEMP\app")
          Remove-Item $env:TEMP\app.zip
          Move-Item -Path $(dir -recurse $env:TEMP\app\**\PackageTmp | % { $_.FullName }) -Destination c:\inetpub\wwwroot\app -force
      
          # Configure IIS web application pool and application
          Import-Module WebAdministration
          New-WebAppPool clouddemo-net4
          Set-ItemProperty IIS:\AppPools\clouddemo-net4 managedRuntimeVersion v4.0
          New-WebApplication -Name clouddemo -Site 'Default Web Site' -PhysicalPath c:\inetpub\wwwroot\app -ApplicationPool clouddemo-net4
      
          # Grant read/execute access to the application pool user
          &icacls C:\inetpub\wwwroot\app\ /grant "IIS AppPool\clouddemo-net4:(OI)(CI)(RX)"
      EOF
      
      gcloud auth activate-service-account \
          --quiet \
          --key-file <(echo $(ServiceAccountKey) | base64 -d)
      
      gcloud storage cp $(System.ArtifactsDirectory)/CloudDemo.Web/CloudDemo.Web/CloudDemo.Mvc.zip gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).zip
      gcloud storage cp CloudDemo.Mvc.deploy.ps1 gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1
      

    這段指令碼會執行下列動作:

    1. 產生設定 IIS 的開機指令碼
    2. 設定 Google Cloud CLI,使用環境變數中的服務帳戶金鑰向 Google Cloud進行驗證。
    3. 將應用程式套件和啟動指令碼上傳至 Cloud Storage。
  6. 切換至「變數」分頁,然後新增下列變數。

    名稱 密鑰
    ServiceAccountKey 先前為 azure-pipelines-deployer 建立的服務帳戶金鑰。
    CloudDemo.ProjectId Google Cloud 專案的專案 ID。
    CloudDemo.Zone 您之前在執行 gcloud config set compute/zone 時指定的區域 (例如 us-central1-a)
  7. 按一下 [儲存]

  8. 視需要輸入註解,然後按一下 [OK] 確認。

部署開發環境

現在您可以新增步驟,以初始化開發環境的滾動式部署。

  1. 在 Azure Pipelines 中,切換至「Pipeline」(管線) 分頁。
  2. 在「Stages」方塊中,選取「Add」>「New stage」
  3. 從範本清單中選取 [Empty job]
  4. 當系統提示您輸入階段名稱時,請輸入 Dev
  5. 按一下新建立階段的閃電圖示。
  6. 進行下列設定:

    • 選取觸發條件After stage
    • 階段Publish
  7. 將滑鼠游標懸停在「Tasks」分頁標籤上,然後依序點選「Tasks」>「Dev」

  8. 按一下「Agent job」(代理程式工作),然後設定下列項目:

    • 代理程式集區Azure Pipelines
    • 代理程式規格ubuntu-latest
  9. 在「Agent job」 旁,按一下「Add a task to agent job」(將工作新增至代理程式工作)

  10. 選取 bash 工作,然後按一下「新增」

  11. 按一下新增的工作,然後進行下列設定:

    • 顯示名稱Rolling deploy
    • 類型inline
    • 腳本

      INSTANCE_TEMPLATE=clouddemo-$(Build.BuildId)-$(Release.ReleaseId)
      
      gcloud auth activate-service-account \
          --quiet \
          --key-file <(echo $(ServiceAccountKey) | base64 -d)
      
      gcloud compute instance-templates create $INSTANCE_TEMPLATE \
        --machine-type n1-standard-2 \
        --image-family windows-2019-core \
        --image-project windows-cloud \
        --service-account clouddemo-dev@$(CloudDemo.ProjectId).iam.gserviceaccount.com \
        --scopes https://www.googleapis.com/auth/devstorage.read_only \
        --tags gclb-backend \
        --metadata sysprep-specialize-script-url=gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1 \
        --project $(CloudDemo.ProjectId) \
      
      gcloud compute instance-groups managed set-instance-template clouddemo-dev \
        --template $INSTANCE_TEMPLATE \
        --project $(CloudDemo.ProjectId) \
        --zone $(CloudDemo.Zone)
      
      gcloud compute instance-groups managed rolling-action start-update clouddemo-dev \
        --version template=$INSTANCE_TEMPLATE \
        --type proactive \
        --max-unavailable 0 \
        --project $(CloudDemo.ProjectId) \
        --zone $(CloudDemo.Zone)
      

    這段指令碼會執行下列動作:

    1. 設定 Google Cloud CLI,使用環境變數中的服務帳戶金鑰向 Google Cloud進行驗證。
    2. 建立新的執行個體範本,使用前一階段產生的開機指令碼。
    3. 更新現有執行個體群組,以使用新的執行個體範本。請注意,這個指令不會更換或更新任何現有的 VM,而是會確保這個執行個體群組中的任何後續 VM 都會根據新範本來建立。
    4. 啟動滾動式更新,促使現有執行個體群組以滾動方式將現有的 VM 換成新的 VM。
  12. 按一下 [儲存]

  13. 視需要輸入註解,然後按一下 [OK] 確認。

部署正式環境

最後,您需要將部署作業配置到實際工作環境。

  1. 在 Azure Pipelines 中,切換至「Pipeline」(管線) 分頁。
  2. 在「Stages」方塊中,選取「Add」>「New stage」
  3. 從範本清單中選取 [Empty job]
  4. 當系統提示您輸入階段名稱時,請輸入 Prod
  5. 按一下新建立階段的閃電圖示。
  6. 進行下列設定:

    • 選取觸發條件After stage
    • 階段Dev
    • 「Pre-deployment approvals」(部署前核准):(啟用)
    • 「Approvers」(核准者):選取您自己的使用者名稱。
  7. 將滑鼠停在「Tasks」分頁上方,然後選取「Tasks」>「Prod」

  8. 按一下「Agent job」(代理程式工作),然後設定下列項目:

    • 代理程式集區Azure Pipelines
    • 代理程式規格ubuntu-latest
  9. 在「Agent job」旁,按一下「Add a task to agent job」 ,即可在階段中新增步驟。

  10. 選取 bash 工作,然後按一下「新增」

  11. 按一下新增的工作,然後進行下列設定:

    • 顯示名稱Rolling deploy
    • 類型inline
    • 腳本

      INSTANCE_TEMPLATE=clouddemo-$(Build.BuildId)-$(Release.ReleaseId)
      
      gcloud auth activate-service-account \
          --quiet \
          --key-file <(echo $(ServiceAccountKey) | base64 -d)
      
      gcloud compute instance-templates create $INSTANCE_TEMPLATE \
        --machine-type n1-standard-2 \
        --image-family windows-2019-core \
        --image-project windows-cloud \
        --service-account clouddemo-prod@$(CloudDemo.ProjectId).iam.gserviceaccount.com \
        --scopes https://www.googleapis.com/auth/devstorage.read_only \
        --tags gclb-backend \
        --metadata sysprep-specialize-script-url=gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1 \
        --project $(CloudDemo.ProjectId) \
      
      gcloud compute instance-groups managed set-instance-template clouddemo-prod \
        --template $INSTANCE_TEMPLATE \
        --project $(CloudDemo.ProjectId) \
        --zone $(CloudDemo.Zone)
      
      gcloud compute instance-groups managed rolling-action start-update clouddemo-prod \
        --version template=$INSTANCE_TEMPLATE \
        --type proactive \
        --max-unavailable 0 \
        --project $(CloudDemo.ProjectId) \
        --zone $(CloudDemo.Zone)
      
  12. 按一下 [儲存]

  13. 視需要輸入註解,然後按一下 [OK] 確認。

執行管道

您已經設定了整個管道,現在可以開始執行原始碼變更來進行測試:

  1. 在本機電腦上,開啟先前複製的 Git 存放區中的檔案。applications\clouddemo\net4\CloudDemo.Mvc\Views\Home\Index.cshtml
  2. ViewBag.Title 的值從 Home Page 變更為 This app runs on GKE
  3. 確認變更,然後將其推送到 Azure Pipelines。

    Visual Studio

    1. 開啟 Team Explorer,然後按一下「首頁」圖示。
    2. 按一下 [Changes] (變更)
    3. 輸入修訂訊息,例如 Change site title
    4. 按一下 [Commit All and Push] (全部認可並推送)

    指令列

    1. 暫存所有已修改的檔案:

      git add -A
      
    2. 修訂本機存放區的變更:

      git commit -m "Change site title"
      
    3. 將變更推送至 Azure Pipelines:

      git push
      
  4. 在 Azure DevOps 選單中,選取「Pipelines」

    系統會觸發建構作業。

  5. 建構完成後,請選取「Pipelines」>「Releases」。啟動發布程序。

  6. 按一下「Release-1」開啟詳細資料頁面,並等候「Dev」階段的狀態切換為「Succeeded」

  7. 在 Google Cloud 控制台中,依序選取「網路服務」>「負載平衡」>「clouddemo-dev」

    記下前端的 IP 位址。

  8. 開啟新的瀏覽器視窗,然後前往下列地址:

    http://IP_ADDRESS/clouddemo/
    

    其中 IP_ADDRESS 是前端的 IP 位址。

    您會發現應用程式已部署完成,並使用自訂名稱。

    您一開始可能會看到錯誤,因為負載平衡器需要幾分鐘的時間才能變為可用。

  9. 在 Azure Pipelines 的「Prod」階段中,按一下 [Approve] 將部署推送至實際工作環境。

    如果畫面上沒有按鈕,您可能需要先核准或拒絕先前的發行版本。

  10. 視需要輸入註解,然後按一下 [Approve] 確認。

  11. 等候「Prod」環境的狀態變成「Succeeded」

  12. 在 Google Cloud 控制台,依序選取「網路服務」>「負載平衡」>「clouddemo-prod」

    記下前端的 IP 位址。

  13. 開啟新的瀏覽器視窗,然後前往下列地址:

    http://IP_ADDRESS/clouddemo/
    

    其中 IP_ADDRESS 是前端的 IP 位址。

    您會發現應用程式已部署完成,並使用自訂名稱。

清除所用資源

如要避免在完成本教學課程後繼續產生費用,請刪除您建立的實體。

刪除 Azure Pipelines 專案

如要刪除 Azure Pipelines 專案,請參閱 Azure DevOps Services 文件。刪除 Azure Pipelines 專案會導致所有原始碼變更遺失。

刪除 Google Cloud 開發和正式環境專案

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

後續步驟