為部署群組佈建代理程式

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

部署群組 可讓您輕鬆地定義目標機器的邏輯群組以進行部署,並在每部機器上安裝必要的代理程式。 本文說明如何建立部署群組,以及如何在部署群組中的每個虛擬或實體機器上安裝和布建代理程式。

您可以使用下列任一方式安裝代理程式:

如需代理程式和管線的相關信息,請參閱:

在目標伺服器上執行安裝文本

  1. 在 Azure Pipelines 的 [部署群組] 索引標籤中,選擇 [+新增] 以建立新的群組。

  2. 輸入群組的名稱,並選擇性地輸入描述,然後選擇 [ 建立]。

  3. 在下一頁的 [ 使用命令行 註冊機器] 區段中,選取目標計算機操作系統。

  4. 選擇 [在文稿中使用個人存取令牌進行驗證]。 深入了解

  5. 選擇 [將腳本複製到剪貼簿]。

  6. 接著,使用具有 適當許可權 的帳戶登入每個目標計算機,並:

    • 開啟 管理員 istrator PowerShell 命令提示字元,貼上您複製的腳本,然後執行它以向這個群組註冊計算機。

    • 如果您在執行無法建立安全通道的腳本時收到錯誤,請在 管理員 istrator PowerShell 提示字元中執行此命令:

      [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

    • 當系統提示您設定代理程式的標籤時,請按 Y 下並輸入您將用來識別群組中計算機子集以進行部分部署的任何標籤。

      當您在電腦群組作業上使用部署群組時,您指派的標籤可讓您將部署限制為特定伺服器。

    • 當系統提示您輸入使用者帳戶時,請按 [返回 ] 接受預設值。

    • 等候腳本完成訊息 Service vstsagent.{organization-name}.{computer-name} started successfully

  7. 在 Azure Pipelines 的 [部署群組] 頁面中,開啟 [機器] 索引標籤,並確認代理程式正在執行。 如果看不到您設定的標籤,請重新整理頁面。

安裝 Azure Pipelines Agent Azure VM 擴充功能

  1. 在 Azure Pipelines 的 [部署群組] 索引標籤中,選擇 [+新增] 以建立新的群組。

  2. 輸入群組的名稱,並選擇性地輸入描述,然後選擇 [ 建立]。

  3. 在 Azure 入口網站 中,針對將包含在部署群組中的每個 VM 開啟 [擴充功能] 刀鋒視窗,選擇 [+ 新增] 以開啟 [新增資源] 列表,然後選取 [Azure Pipelines Agent]。

    安裝 Azure Pipelines 代理程式擴充功能

  4. 在 [ 安裝擴充功能] 刀鋒視窗中,指定要使用的 Azure Pipelines 訂用帳戶名稱。 例如,如果 URL 是 https://dev.azure.com/contoso,只要指定 contoso 即可。

  5. 指定專案名稱和部署組名。

  6. 選擇性地指定代理程序的名稱。 如果未指定,它會使用附加的 -DGVM 名稱。

  7. 輸入用於對 Azure Pipelines 進行驗證的個人存取令牌 (PAT)。

  8. 選擇性地指定將在代理程式上設定之標記的逗號分隔清單。 標籤必須不超過 256 個字元。

  9. 選擇 [ 確定 ] 開始在此 VM 上安裝代理程式。

  10. 將擴充功能新增至您想要加入此部署群組的任何其他 VM。

使用ARM範本部署工作

重要

這些指示是指工作的第 2 版。 將您的 工作版本 從 3 切換為 2。

您可以使用 ARM 範本部署工作 來部署 Azure Resource Manager (ARM) 範本,以在您建立虛擬機時安裝 Azure Pipelines Agent Azure VM 擴充功能,或更新資源群組,以在建立虛擬機之後套用擴充功能。 或者,您可以使用 ARM 範本部署工作的進階部署選項,將代理程式部署至部署群組。

使用ARM樣本安裝「Azure Pipelines Agent」Azure VM 擴充功能

ARM 範本是一個 JSON 檔案,會以宣告方式定義一組 Azure 資源。 範本可以自動讀取,以及 Azure 所布建的資源。 在單一的範本中,您可以部署多個服務及其相依性。

針對 Windows VM,建立 ARM 範本,並在資源底下 Microsoft.Compute/virtualMachine 新增 resources 元素,如下所示:

"resources": [
  {
    "name": "[concat(parameters('vmNamePrefix'),copyIndex(),'/TeamServicesAgent')]",
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "location": "[parameters('location')]",
    "apiVersion": "2015-06-15",
    "dependsOn": [
        "[resourceId('Microsoft.Compute/virtualMachines/',
                      concat(parameters('vmNamePrefix'),copyindex()))]"
    ],
    "properties": {
      "publisher": "Microsoft.VisualStudio.Services",
      "type": "TeamServicesAgent",
      "typeHandlerVersion": "1.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
        "VSTSAccountName": "[parameters('VSTSAccountName')]",
        "TeamProject": "[parameters('TeamProject')]",
        "DeploymentGroup": "[parameters('DeploymentGroup')]",
        "AgentName": "[parameters('AgentName')]",
        "AgentMajorVersion": "auto|2|3",
        "Tags": "[parameters('Tags')]"
      },
      "protectedSettings": {
      "PATToken": "[parameters('PATToken')]"
     }
   }
  }
]

注意

在 Azure DevOps Server 2022 中,允許的值為 AgentMajorVersionauto|N。 在 Azure DevOps Server 2022.1 和更新版本中,允許的值為 AgentMajorVersionauto|2|3

"resources": [
  {
    "name": "[concat(parameters('vmNamePrefix'),copyIndex(),'/TeamServicesAgent')]",
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "location": "[parameters('location')]",
    "apiVersion": "2015-06-15",
    "dependsOn": [
        "[resourceId('Microsoft.Compute/virtualMachines/',
                      concat(parameters('vmNamePrefix'),copyindex()))]"
    ],
    "properties": {
      "publisher": "Microsoft.VisualStudio.Services",
      "type": "TeamServicesAgent",
      "typeHandlerVersion": "1.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
        "VSTSAccountName": "[parameters('VSTSAccountName')]",
        "TeamProject": "[parameters('TeamProject')]",
        "DeploymentGroup": "[parameters('DeploymentGroup')]",
        "AgentName": "[parameters('AgentName')]",
        "AgentMajorVersion": "auto|N",
        "Tags": "[parameters('Tags')]"
      },
      "protectedSettings": {
      "PATToken": "[parameters('PATToken')]"
     }
   }
  }
]

其中:

  • 需要 VSTSAccountName 。 要使用的 Azure Pipelines 訂用帳戶。 範例:如果您的 URL 是 https://dev.azure.com/contoso,只要指定 contoso
  • 需要 TeamProject 。 在其中定義部署群組的專案
  • 需要 DeploymentGroup 。 將針對哪個部署代理程式註冊的部署群組
  • AgentName 是選擇性的。 如果未指定,則會使用附加的 -DG VM 名稱
  • 標籤是選擇性的。 將在代理程式上設定之標記的逗號分隔清單。 卷標不區分大小寫,而且每個標記不得超過 256 個字元
  • 需要 PATToken 。 用來向 Azure Pipelines 進行驗證的個人存取令牌,以下載和設定代理程式

注意

如果您要部署至 Linux VM,請確定 type 程式代碼中的 參數為 TeamServicesAgentLinux

針對延伸模組進行疑難解答

以下是擴充功能的一些已知問題:

  • 狀態檔案太大:此問題發生在 Windows VM 上;Linux VM 上尚未觀察到此問題。 狀態檔包含 JSON 物件,描述延伸模組的目前狀態。 對像是列出到目前為止所執行的作業的佔位元。 Azure 會讀取此狀態檔,並傳遞狀態對象作為 API 要求的回應。 檔案有允許的大小上限;如果大小超過臨界值,Azure 就無法完整讀取它,並針對狀態提供錯誤。 在每部機器重新啟動時,擴充功能會執行某些作業(即使可能稍早安裝成功),這會附加狀態檔。 如果機器重新啟動多次,狀態檔案大小就會超過臨界值,這會導致此錯誤。 錯誤訊息會讀取: Handler Microsoft.VisualStudio.Services.TeamServicesAgent:1.27.0.2 status file 0.status size xxxxxx bytes is too big. Max Limit allowed: 131072 bytes。 請注意,擴充功能安裝可能成功,但此錯誤會隱藏延伸模塊的實際狀態。

    我們已修正機器重新啟動的問題( 1.27.0.2 適用於 Windows 擴充功能和 Linux 擴充 1.21.0.1 功能的版本),因此在重新啟動時,不會將任何專案新增至狀態檔。 如果在進行修正之前,您的延伸模塊發生此問題(也就是說,您有舊版擴充功能的問題),且您的延伸模組已使用修正自動複製到版本,問題仍會持續發生。 這是因為在擴充功能更新時,較新版本的延伸模組仍能與先前的狀態檔搭配運作。 目前,如果您使用舊版的延伸模組搭配 旗標來關閉次要版本自動更新,或大型狀態檔案從舊版擴充功能傳送到包含修正的較新版本,或基於任何其他原因,您仍可能遇到此問題。 如果是這種情況,您可以卸載並重新安裝擴充功能,以超過此問題。 卸載延伸模組會清除整個延伸模組目錄,因此將會建立新的狀態檔以進行全新安裝。 您必須安裝最新版本的擴充功能。 此解決方案是永久的修正程式,且在此之後,您不應該再次遇到問題。

  • 自定義數據的問題:此問題與擴充功能無關,但有些客戶在切換OS版本時回報了VM上自定義數據位置的混淆。 我們建議下列因應措施。 Python 2 已被取代,因此我們已將擴充功能設為使用 Python 3。 如果您仍然使用預設未安裝 Python 3 的舊版作業系統,若要執行擴充功能,您應該在 VM 上安裝 Python 3,或切換至預設已安裝 Python 3 的操作系統版本。 在 Linux VM 上, 自定義數據 會複製到舊版 Microsoft Azure Linux 代理程式的檔案 /var/lib/waagent/ovf-env.xml ,並複製到 /var/lib/waagent/CustomData 較新的 Microsoft Azure Linux 代理程式版本。 因為檔案不存在於新的 OS 版本上,所以在切換 OS 版本時,只有這兩個路徑之一的客戶會面臨問題,但有另一個檔案存在。 因此,為了避免中斷 VM 布建,您應該考慮範本中的兩個檔案,如此一來,如果一個檔案失敗,另一個檔案應該會成功。

如需 ARM 範本的詳細資訊,請參閱 在 Azure Resource Manager 範本中定義資源。

若要使用範本:

  1. 在 Azure Pipelines 的 [部署群組] 索引標籤中,選擇 [+新增] 以建立新的群組。

  2. 輸入群組的名稱,並選擇性地輸入描述,然後選擇 [ 建立]。

  3. 在 Azure Pipelines 的 [發行] 索引標籤中,使用包含 ARM 範本部署工作的階段建立發行管線。

  4. 提供工作所需的參數,例如 Azure 訂用帳戶、資源組名、位置和範本資訊,然後儲存發行管線。

  5. 從發行管線建立發行以安裝代理程式。

使用進階部署選項安裝代理程式

  1. 在 Azure Pipelines 的 [部署群組] 索引標籤中,選擇 [+新增] 以建立新的群組。

  2. 輸入群組的名稱,並選擇性地輸入描述,然後選擇 [ 建立]。

  3. 在 Azure Pipelines 的 [發行] 索引標籤中,使用包含 ARM 範本部署工作的階段建立發行管線。

  4. 選取工作,然後展開 [虛擬機 的進階部署選項] 區段。 設定本節中的參數,如下所示:

    • 啟用必要條件:選取 [使用部署群組代理程序進行設定]。

    • Azure Pipelines/TFS 端點:選取指向目標的現有 Team Foundation Server/TFS 服務連線。 部署群組的代理程序註冊需要存取Visual Studio專案。 如果您沒有現有的服務連線,請選擇 [ 立即新增 並建立一個]。 將它設定為 使用個人存取令牌(PAT), 範圍僅限於 部署群組

    • 專案:指定包含部署群組的專案。

    • 部署群組:指定要註冊代理程式之部署群組的名稱。

    • 將 Azure VM 標籤複製到代理程式:設定時(勾選),Azure VM 上已設定的任何標籤都會複製到對應的部署群組代理程式。 根據預設,所有 Azure 標籤 都會使用 格式 Key: Value來複製。 例如: Role: Web

  5. 提供工作所需的其他參數,例如 Azure 訂用帳戶、資源組名和位置,然後儲存發行管線。

  6. 從發行管線建立發行以安裝代理程式。

說明與支援