Azure 資源群組部署工作

Azure Pipelines

您可以使用此工作來部署、啟動、停止及刪除 Azure 資源群組。

YAML 程式碼片段

# Azure resource group deployment
# Deploy an Azure Resource Manager (ARM) template to a resource group and manage virtual machines
- task: AzureResourceGroupDeployment@2
  inputs:
    azureSubscription: 
    #action: 'Create Or Update Resource Group' # Options: create Or Update Resource Group, select Resource Group, start, stop, stopWithDeallocate, restart, delete, deleteRG
    resourceGroupName: 
    #location: # Required when action == Create Or Update Resource Group
    #templateLocation: 'Linked artifact' # Options: linked Artifact, uRL Of The File
    #csmFileLink: # Required when templateLocation == URL Of The File
    #csmParametersFileLink: # Optional
    #csmFile: # Required when  TemplateLocation == Linked Artifact
    #csmParametersFile: # Optional
    #overrideParameters: # Optional
    #deploymentMode: 'Incremental' # Options: Incremental, Complete, Validate
    #enableDeploymentPrerequisites: 'None' # Optional. Options: none, configureVMwithWinRM, configureVMWithDGAgent
    #teamServicesConnection: # Required when enableDeploymentPrerequisites == ConfigureVMWithDGAgent
    #teamProject: # Required when enableDeploymentPrerequisites == ConfigureVMWithDGAgent
    #deploymentGroupName: # Required when enableDeploymentPrerequisites == ConfigureVMWithDGAgent
    #copyAzureVMTags: true # Optional
    #runAgentServiceAsUser: # Optional
    #userName: # Required when enableDeploymentPrerequisites == ConfigureVMWithDGAgent && RunAgentServiceAsUser == True
    #password: # Optional
    #outputVariable: # Optional
    #deploymentName: # Optional
    #deploymentOutputs: # Optional
    #addSpnToEnvironment: false # Optional

引數

引數 描述
ConnectedServiceName
Azure 訂用帳戶
(必要) 選取包含適用于部署之 Azure 訂用帳戶的服務連接。
引數別名: azureSubscription
action
動作
(需要在 Azure 資源或資源群組上執行) 動作。
預設值:Create Or Update Resource Group
resourceGroupName
資源群組
(需要) 提供資源群組的名稱。
location
位置
(部署資源群組所需的) 位置。 如果資源群組已存在於訂用帳戶中,則會忽略此值。
templateLocation
範本位置
(必要) 選取 連結 的成品或檔案的 URL
預設值:Linked artifact
csmFileLink
範本連結
(必要) 指定範本檔案的 URL。
例子:
若要部署儲存在私人儲存體帳戶中的範本,請在範本的 URL 中取出共用存取簽章 (SAS) token。
範例 blob_storage_url /template.json? <SAStoken >
若要將範本檔案 (或連結的範本) 上傳至儲存體帳戶並產生 SAS 權杖,您可以使用 Azure 檔案複製 工作,或使用 PowerShellAzure CLI來執行下列步驟。
若要在方格中查看範本參數,請按一下 [覆 寫範本參數] 文字方塊旁的 [...]。 這項功能需要啟用來源端的 CORS 規則。 如果範本位於 Azure 儲存體 blob 中,請參閱 功能以啟用 CORS。
csmParametersFileLink
範本參數連結
(選擇性) 指定參數檔案的 URL。
若要使用儲存在私人儲存體帳戶中的檔案,請在範本的 URL 中取出共用存取簽章 (SAS) token。
範例: blob_storage_url /template.json? <SAStoken >
若要將參數檔案上傳至儲存體帳戶並產生 SAS 權杖,您可以使用 Azure 檔案複製工作,或使用 PowerShell 或 Azure CLI 進行下列步驟。
若要在方格中查看範本參數,請按一下 [覆 寫範本參數] 文字方塊旁的 [...]。 這項功能需要啟用來源端的 CORS 規則。 如果範本位於 Azure 儲存體 blob 中,請參閱此功能以啟用 CORS。
csmFile
範本
(必要) 指定指向 Azure Resource Manager 範本的路徑或模式。 如需範本的詳細資訊,請參閱 https://aka.ms/azuretemplates 。 立即開始使用範本 https://github.com/Azure/azure-quickstart-templates/tree/master/demos/vm-winrm-windows
csmParametersFile
範本參數
(選擇性) 指定指向 Azure Resource Manager 範本參數檔案的路徑或模式。
overrideParameters
覆寫範本參數
(選擇性) 若要在方格中查看範本參數,請按一下 [覆寫參數] 文字方塊旁的 ... 。 這項功能需要啟用來源端的 CORS 規則。 如果範本位於 Azure 儲存體 blob 中,請參閱此功能以啟用 CORS。 或者,在文字方塊中輸入要覆寫的範本參數。
範例-StorageName fabrikam-adminUsername $ (Vmusername) -adminPassword $ (Password) -AzureKeyVaultName $ (fabrikamFibre)
如果您使用的參數值具有多個單字,請將它們括在引號中,即使您使用變數傳遞它們也是一樣。
例如-name "參數值"-name2 "$ (var) "
若要覆寫物件類型參數,請使用 stringified JSON 物件。
例如-options ["option1"]-map {"key1": "value1"}
deploymentMode
部署模式
(需要) 累加模式會將部署處理為資源群組的累加式更新。 它會保留存在於資源群組中但未在範本中指定的未變更資源。 完整模式會刪除不在範本中的資源。 [驗證] 模式可讓您在建立實際資源之前,找出範本的問題。 請注意,即使沒有部署任何資源,此模式一律會建立資源群組。
預設值:Incremental
enableDeploymentPrerequisites
啟用必要條件
(選擇性) 這些選項只適用于資源群組包含虛擬機器時。 選擇 [部署群組] 選項會設定每部虛擬機器上的部署群組代理程式。 選取 winrm 選項會使用自我簽署憑證,在埠5986上使用 HTTPS 通訊協定設定 Windows 遠端管理 (WinRM) 接聽程式。 這是在 Azure 機器上執行部署作業的必要設定。 如果目標虛擬機器是由負載平衡器所支援,請確定已針對目標埠 (5986) 設定輸入 NAT 規則。
預設值:None
deploymentGroupEndpoint
Azure Pipelines 服務連接
(必要) 指定連接到 Azure DevOps 組織或集合以進行代理程式註冊的服務連接。

您可以使用 [ + 新增] 來建立服務連線,然後選取 [ 權杖型驗證]。 您需要 個人存取權杖 (PAT) 來設定服務連線。
​按一下 [ ​ ] 以更新服務連接詳細資料。
引數別名: teamServicesConnection
project
Team 專案
(必要) 指定已定義部署群組的 Team 專案。
引數別名: teamProject
deploymentGroupName
部署群組
(必要) 指定將註冊代理程式 () 的部署群組。 如需詳細指引,請參閱 部署群組
copyAzureVMTags
將 Azure VM 標記複製到代理程式
(選擇性) 選擇是否需要將在 Azure VM 上設定的標記複製到對應的部署群組代理程式。 根據預設,所有的 Azure 標籤都會以格式索引 鍵:值複製。
範例: Azure 標記「 角色: Web 」會依原樣複製到代理程式電腦。 如需 Azure 資源標記如何參考 連結的詳細資訊,請參閱。
runAgentServiceAsUser
以使用者的身份執行 agent 服務
(選擇性) 決定是否以非預設值的使用者身份執行 agent 服務。 預設使用者是 Windows 中的NT AUTHORITY\\SYSTEM以及 Linux 中的根目錄
userName
使用者名稱
(需要) 在虛擬機器上執行代理程式服務的使用者名稱。
針對網域使用者,請輸入 domain\\username 或的值
若為本機使用者,請只輸入使用者名稱。
假設資源群組中的所有虛擬機器上都有相同的網域使用者或具有相同名稱的本機使用者。
password
密碼
要在 Windows vm 上執行代理程式服務的使用者密碼。
假設所有 Vm 上的指定使用者都有相同的密碼。
它可以接受組建或發行管線中定義的變數,做為 $ (passwordVariable) 。 您可以將變數標示為 秘密 來保護它。
若為 linux Vm,則不需要密碼,將會予以忽略。
outputVariable
WinRM 的 VM 詳細資料
(選擇性) 提供資源群組的變數名稱。 變數可以用來做為 $ (variableName) 在後續工作(例如,在 [目的電腦上的 PowerShell] 工作中)參考資源群組,以部署應用程式。 只有在選取的動作是 [ 建立]、[更新 ] 或 [ 選取],且選取了現有的資源群組時才會有效。
deploymentName
部署名稱
(選擇性) 指定要建立之資源群組部署的名稱
deploymentOutputs
部署輸出
(選擇性) 提供輸出變數的變數名稱,該變數將會以字串格式包含目前部署物件的輸出區段。 您可以使用 convertfrom-string-Json PowerShell Cmdlet 來剖析 Json 物件,並存取個別的輸出值。
addSpnToEnvironment
存取覆寫參數中的服務主體詳細資料
將您所選 Azure 端點的服務主體識別碼和金鑰新增至腳本的執行環境。 您可以使用這些變數: $servicePrincipalId ,並在您的覆寫參數中 $servicePrincipalKey ,例如 -key $servicePrincipalKey

疑難排解

錯誤:內部伺服器錯誤

這些問題大多本質上都是暫時性的。 發生這種情況的原因有很多:

  • 您嘗試部署的 Azure 服務之一,是在您嘗試部署的區域中進行維護。 請留意 https://status.azure.com/ 以查看 Azure 服務的停機時間。
  • Azure Pipelines 服務本身正在進行維護。 請留意 https://status.dev.azure.com/ 停機時間。

不過,我們看過某些實例,這是因為 ARM 範本中的錯誤所造成,例如您嘗試部署的 Azure 服務不支援您為資源選擇的區域。

錯誤:超時

超時問題可能來自兩個位置:

  • Azure Pipelines 代理程式
  • 入口網站部署

您可以藉由檢查工作記錄中的入口網站部署連結,來識別超時是否來自入口網站。 如果沒有連結,可能是因為 Azure Pipelines 代理程式。 如果有連結,請遵循連結以查看是否有在入口網站部署中發生的超時時間。

錯誤:覆寫參數時要啟用的 CORS 規則

如果範本檔是從 BLOB 參考,而覆寫管線中的參數,您可能會看到下列警告訊息:

Warning: Failed to download the file from template path.

這項功能需要在來源啟用 CORS 規則。 如果範本位於 Azure 儲存體 blob 中,請參閱 跨原始資源分享支援 以啟用 CORS。

除了啟用 CORS,請確定範本連結中所指定的 SAS 權杖為 "srt-sco"。 您必須要有此權杖,才能下載檔案並繼續進行。

Azure Pipelines 代理程式

如果問題來自 Azure Pipelines 代理程式,您可以將 YAML 中的 timeoutInMinutes 設定為0,以增加超時。 如需詳細資訊,請參閱 指定管線中的作業

入口網站部署

請參閱此檔,瞭解如何識別錯誤是否來自 Azure 入口網站: 使用 Azure Resource Manager 來查看部署歷程記錄

在部署入口網站時,請嘗試將 ARM 範本中的 "timeoutInMinutes" 設定為 "0"。 如果未指定,則假設的值為60分鐘。 0可確保部署將會執行一段時間,只要它可以成功即可。

這也可能是因為系統發生暫時性問題。 請留意 https://status.dev.azure.com/ ,確認 Azure Pipelines 服務是否有停機時間。

錯誤: Azure Resource Manager (ARM) 範本驗證失敗

之所以發生此問題,主要是因為 ARM 範本中有不正確參數,例如不支援的 SKU 或區域。 如果驗證失敗,請檢查錯誤訊息。 它應該指向不正確資源和參數。

此問題也可能是因為多行字串所造成。 目前,Azure 資源群組部署工作在 ARM 範本或參數 JSON 檔案中不支援多行字串。

此外,請參閱這篇關於 ARM 範本結構和語法的文章: 瞭解 arm 範本的結構和語法

開放原始碼

此工作是GitHub 上的開放原始碼。 歡迎您提供意見反應和投稿。