Share via


教學課程:將 Java 應用程式部署至虛擬機擴展集

Azure DevOps Services

虛擬機擴展集可讓您部署和管理相同的自動調整虛擬機。

VM 會視需要在擴展集中建立。 您可以定義規則來控制從擴展集新增或移除 VM 的方式和時機。 您可以根據 CPU 負載、記憶體使用量或網路流量等計量來觸發這些規則。

在本教學課程中,您會建置 Java 應用程式,並將其部署至虛擬機擴展集。 您將學習如何:

  • 建立虛擬機器擴展集
  • 建置電腦映像
  • 將自定義映像部署至虛擬機擴展集

必要條件

開始之前,您需要:

設定Java管線

  1. 登入您的 Azure DevOps 組織,並移至您的專案。

  2. 移至 [管線],然後在建立第一個管線時選取 [ 新增管線 ] 或 [建立管線 ]。

  3. 先選取 GitHub 作為原始程式碼的位置,以執行精靈的步驟。

  4. 系統可能會將您重新導向至 GitHub 以進行登入。 若是如此,請輸入 GitHub 認證。

  5. 當您看到存放庫清單時,請選取您的存放庫。

  6. 系統可能會將您重新導向至 GitHub,以安裝 Azure Pipelines 應用程式。 如果是,請選取 [ 核准並安裝]。

出現 [設定 ] 索引標籤時,選取 [Maven]。

自訂管線

  1. 當您的新管線出現時,請查看 YAML 以查看其用途。 當您準備好時,請選取 [ 儲存並執行]。

    Save and run button in a new YAML pipeline

  2. 系統會提示您將新的 azure-pipelines.yml 檔案認可至存放庫。 滿意訊息之後,請選取 [ 儲存],然後再次執行

    如果您想要監看管線的運作情形,請選取建置作業。

    您剛建立並執行我們為您自動建立的管線,因為您的程序代碼似乎與 Maven 範本相符

    您現在已在存放庫中有一個可運作的 YAML 管線 (azure-pipelines.yml),可供您自定義!

  3. 當您準備好變更管線時,請在 [管線] 頁面中選取它,然後編輯azure-pipelines.yml檔案。

新增複製檔案和發佈組建成品工作

  1. 更新管線以包含工作 CopyFiles@2 。 這會建立您可以部署到虛擬機擴展集的成品。

      trigger: none
    
      pool:
        vmImage: 'ubuntu-latest'
    
      steps:
    - task: Maven@4
      inputs:
        mavenPomFile: 'pom.xml'
        mavenOptions: '-Xmx3072m'
        javaHomeOption: 'JDKVersion'
        jdkVersionOption: '1.8'
        jdkArchitectureOption: 'x64'
        publishJUnitResults: true
        testResultsFiles: '**/surefire-reports/TEST-*.xml'
        goals: 'package'
    
    - task: CopyFiles@2
      displayName: 'Copy File to: $(TargetFolder)'
      inputs:
        SourceFolder: '$(Build.SourcesDirectory)'
        Contents: |
          **/*.sh 
          **/*.war
          **/*jar-with-dependencies.jar
        TargetFolder: '$(System.DefaultWorkingDirectory)/pipeline-artifacts/'
        flattenFolders: true  
    

建立自定義映像並將其上傳至 Azure

您需要自定義映像的資源群組、記憶體帳戶和共用映像庫。

  1. 使用 az group create 建立資源群組。 此範例會在 eastus2 位置建立名為 myVMSSResourceGroup 的資源群組:

    az group create --name myVMSSResourceGroup --location eastus2
    
  2. 建立新的儲存體帳戶。 這個範例會建立記憶體帳戶 vmssstorageaccount

    az storage account create \
      --name vmssstorageaccount \
      --resource-group myVMSSResourceGroup \
      --location eastus2 \
      --sku Standard_LRS 
    
  3. 建立 共用映像庫

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  4. 在資源中 myVMSSGallery 建立新的映像庫。 請參閱使用入口網站建立 Azure 共用映像庫,以深入瞭解如何使用映像庫。

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  5. 建立映像定義。 id複製看起來像 /subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage的新映像的 。

    az sig image-definition create -g myVMSSResourceGroup --gallery-name myVMSSGallery --gallery-image-definition MyImage --publisher GreatPublisher --offer GreatOffer --sku GreatSku --os-type linux
    

建立受控識別

  1. 在您的資源群組中建立 受控識別

    az identity create -g myVMSSResourceGroup -n myVMSSIdentity
    
  2. 從輸出複製 idid看起來會像 /subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>

  3. 在資源庫中開啟您的映像庫,並指派 myVMSSIdentity 參與者角色。 請遵循 下列步驟來新增角色指派

建立自定義映像

若要建立自定義映像,您可以使用 Azure VM 映射產生器 DevOps 工作

  1. 將工作 AzureImageBuilderTask@1 新增至 YAML 檔案。 將、 <RESOURCE GROUP><USER ASSIGNED IDENTITY NAME> 的值<SUBSCRIPTION ID>取代為您自己的值。 請務必確認 galleryImageIdmanagedIdentitystorageAccountName 值正確無誤。

    - task: AzureImageBuilderTask@1
      displayName: 'Azure VM Image Builder Task'
      inputs:
        managedIdentity: '/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>'
        imageSource: 'marketplace'
        packagePath: '$(System.DefaultWorkingDirectory)/pipeline-artifacts'
        inlineScript: |
          sudo mkdir /lib/buildArtifacts
          sudo cp  "/tmp/pipeline-artifacts.tar.gz" /lib/buildArtifacts/.
          cd /lib/buildArtifacts/.
          sudo tar -zxvf pipeline-artifacts.tar.gz
          sudo sh install.sh
        storageAccountName: 'vmssstorageaccount2'
        distributeType: 'sig'
        galleryImageId: '/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage/versions/0.0.$(Build.BuildId)'
        replicationRegions: 'eastus2'
        ibSubscription: '<SUBSCRIPTION ID>'
        ibAzureResourceGroup: 'myVMSSResourceGroup'
        ibLocation: 'eastus2'
    
  2. 執行管線以產生您的第一個映像。 您可能需要在 管線執行期間授權資源

  3. 移至 Azure 入口網站 中的新映射,然後開啟 [概觀]。 選取 [建立 VMSS ],從新的映像建立新的虛擬機擴展集。 將[虛擬機延伸集名稱] 設定vmssScaleSet。 請參閱在 Azure 入口網站 中建立虛擬機擴展集,以深入瞭解如何在 Azure 入口網站 中建立虛擬機擴展集。

將更新部署至虛擬機擴展集

將 Azure CLI 工作新增至管線,以將更新部署至擴展集。 在管線結尾新增工作。 將取代 <SUBSCRIPTION ID> 為您的訂用帳戶標識碼。

- task: AzureCLI@2
  inputs:
    azureSubscription: '`YOUR_SUBSCRIPTION_ID`' #Authorize and in the task editor
    ScriptType: 'pscore'
    scriptLocation: 'inlineScript'
    Inline: 'az vmss update --resource-group myVMSSResourceGroup --name vmssScaleSet --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myVMSSResourceGroup/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage/versions/0.0.$(Build.BuildId)'

清除資源

移至 Azure 入口網站,並移除您的資源群組。 myVMSSResourceGroup

下一步