共用方式為


部署至環境中的Linux VM

Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020

在本快速入門中,您將瞭解如何設定 Azure DevOps 管線,以部署至環境中的多個 Linux 虛擬機 (VM) 資源 您可以針對任何發佈 Web 部署套件的應用程式使用這些指示。

必要條件

針對 JavaScript 或Node.js應用程式, 至少有兩個在 Azure 上使用 Nginx 設定的 Linux VM。

派生範例程序代碼

如果您已在想要部署的 GitHub 中擁有應用程式,您可以建立該程式碼的管線。

如果您是新使用者,請在 GitHub 中派生此存放庫:

https://github.com/MicrosoftDocs/pipelines-javascript

使用 Linux VM 建立環境

您可以將 VM 新增為環境內的資源,並將其目標設為多 VM 部署。 環境的部署歷程記錄可從 VM 到認可提供可追蹤性。

新增 VM 資源

  1. 在您的 Azure DevOps 專案中,移至 [管線>環境],然後選取 [建立環境] 或 [新增環境]。

  2. 在第一個 [新增環境] 畫面上,新增 [ 名稱 ] 和選擇性 [描述]。

  3. 在 [資源] 下,選取 [虛擬機],然後選取 [下一步]。

  4. 在下一個 [新增環境] 畫面上,選擇 [操作系統] 下的 [Linux]。

  5. 複製 Linux 註冊腳本。 針對新增至環境的所有 Linux VM,腳本都相同。

    VM 建立的螢幕快照。

    注意

    已登入用戶的個人存取令牌 (PAT) 會在腳本中預先插入,並在三小時后到期。

  6. 選取 [ 關閉],並記下新環境已建立。

  7. 在您想要向環境註冊的每個目標 VM 上執行複製的腳本。

    注意

    如果 VM 上已經有另一個代理程式正在執行,請為代理程式提供唯一的名稱,以向環境註冊。

註冊 VM 之後,它就會顯示為環境 [資源] 索引標籤下的資源。

VM 資源檢視的螢幕快照。

若要再次複製腳本以建立更多資源,例如,如果您的 PAT 到期,請選取 環境頁面上的 [新增資源 ]。

新增和管理標籤

標籤是一種在環境中以特定 VM 作為部署目標的方法。 您可以使用的標籤數目沒有限制。 標籤各限制為 256 個字元。

您可以在互動式註冊腳本或透過UI中新增標籤或移除 VM 的標籤,方法是選取 VM 資源的 [更多動作]。 在本快速入門中,請將不同的標籤指派給您環境中的每個 VM。

卷標檢視的螢幕快照。

定義 CI 組建管線

您需要持續整合 (CI) 建置管線來發佈 Web 應用程式,以及部署腳本,以在 Linux 伺服器上本機執行。 根據您想要使用的運行時間來設定 CI 組建管線。

重要

在 GitHub 程式期間,系統可能會提示您建立 GitHub 服務連線 ,或重新導向至 GitHub 以登入、安裝 Azure Pipelines 或授權 Azure Pipelines。 請遵循畫面上的指示來完成此程式。 如需詳細資訊,請參閱 存取 GitHub 存放庫

  1. 在您的 Azure DevOps 專案中,選取 [管線建立管線>],然後選取 [GitHub] 作為原始程式碼的位置。
  2. 在 [ 選取存放庫 ] 畫面上,選取分支範例存放庫。
  3. 在 [設定您的管線] 畫面上,選取 [入門管線]。 Azure Pipelines 會為您的管線產生稱為 azure-pipelines.yml 的 YAML 檔案。
  4. 選取 [儲存並執行] 旁的下拉式插入號,選取 [儲存],然後再次選取 [儲存]。 檔案會儲存至分支 GitHub 存放庫。

編輯程式碼

選取 [編輯],並以下列程式代碼取代azure-pipelines.yml檔案的內容。 您會在未來的步驟中新增至此 YAML。

下列程式代碼會使用 npm 建置您的Node.js專案。

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    - stage: Build
      displayName: Build stage
      jobs:  
      - job: Build
        displayName: Build
        steps:
        - task: UseNode@1
          inputs:
            version: '16.x'
          displayName: 'Install Node.js'
        - script: |
            npm install
            npm run build --if-present
            npm run test --if-present
          displayName: 'npm install, build and test'
        - task: ArchiveFiles@2
          displayName: 'Archive files'
          inputs:
            rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
            includeRootFolder: false
            archiveType: zip
            archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
            replaceExistingArchive: true
        - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
          artifact: drop

如需詳細資訊,請檢閱使用 gulp 建置 Node.js 應用程式中的步驟,以建立組建。

執行您的管線

選取 [驗證並儲存],然後選取 [儲存],選取 [執行],然後再次選取 [執行]。

在管線執行之後,請確認作業已成功執行,且您看到已發佈的成品。

部署至Linux VM

  1. 編輯管線以新增下列 部署作業。 將取代 <environment name> 為您稍早建立的環境名稱。 從環境中選取特定的 VM,以指定 <VM tag> 您為每個 VM 定義的 ,以接收部署。

    jobs:  
    - deployment: VMDeploy
      displayName: Web deploy
      environment:
        name:  <environment name>
        resourceType: VirtualMachine
        tags: <VM tag> # Update value for VMs to deploy to
      strategy:
    

    如需詳細資訊,請參閱完整的 jobs.deployment 定義

    如需部署作業目標關鍵詞和資源的詳細資訊 environment ,請參閱 jobs.deployment.environment 定義

  2. runOnce將或 rolling 指定為部署 strategy

    • runOnce 是最簡單的部署策略。 preDeploy deployrouteTrafficpostRouteTraffic 生命週期會攔截每個執行一次。 然後執行 on: successon: failure

      下列程式代碼顯示 的 runOnce部署作業:

      jobs:
      - deployment: VMDeploy
        displayName: Web deploy
        environment:
          name: <environment name>
          resourceType: VirtualMachine
          tags: <VM tag>
        strategy:
          runOnce:
            deploy:
              steps:
              - script: echo my first deployment
      
    • 下列程式代碼示範使用 Java 管線部署策略的 rolling YAML 代碼段。 您可以在每個反覆專案中更新最多五個目標。 參數 maxParallel 會指定可以平行部署的目標數目。

      選取 maxParallel 專案會考慮隨時必須維持可用之目標的絕對數目或百分比,但不包括要部署的目標,並決定部署期間的成功和失敗狀況。

      jobs: 
      - deployment: VMDeploy
        displayName: web
        environment:
          name: <environment name>
          resourceType: VirtualMachine
          tags: <VM tag>
        strategy:
            rolling:
              maxParallel: 2  #for percentages, mention as x%
              preDeploy:
                steps:
                - download: current
                  artifact: drop
                - script: echo initialize, cleanup, backup, install certs
              deploy:
                steps:
                - task: Bash@3
                  inputs:
                    targetType: 'inline'
                    script: |
                      # Modify deployment script based on the app type
                      echo "Starting deployment script run"
                      sudo java -jar '$(Pipeline.Workspace)/drop/**/target/*.jar'
              routeTraffic:
                steps:
                - script: echo routing traffic
              postRouteTraffic:
                steps:
                - script: echo health check post-route traffic
              on:
                failure:
                  steps:
                  - script: echo Restore from backup! This is on failure
                success:
                  steps:
                  - script: echo Notify! This is on success
      

      每次執行此作業時,都會針對您所建立和註冊 VM 的環境記錄部署歷程記錄。

存取環境中的管線可追蹤性

環境 部署 檢視提供認可和工作專案的完整可追蹤性,以及環境的跨管線部署歷程記錄。

部署檢視的螢幕快照。