簡體   English   中英

在 Azure DevOps 發布管道中,如何將具有不同目標文件夾的部署組部署到多個 VM

[英]In an Azure DevOps release pipeline how do you deploy to multiple VMs a deployment group with different target folders

我首先在 azure DevOps 中設置發布管道,將 Windows 服務部署到只有一個 VM 並設置了代理的部署組。 我在管道中為部署文件夾設置了一個變量。

我現在正在嘗試將其擴展為部署到 2 台服務器。 我已將第二台服務器添加到部署組中,並且注冊成功。 在此服務器上,部署需要轉到不同的驅動器。

似乎沒有辦法為代理指定不同的變量值。

我試過在 ui 中使用谷歌搜索和拖網搜索,但到目前為止我一無所獲。 我想知道變量是否是正確的?

我要回答我自己的問題,因為解決方案實際上是@Martin A @Tomasz Kaniewski 和@Vito Liu-MSFT 提供的答案的組合,並進行了大量的反復試驗。 我希望這會幫助其他人。

環境變量是識別部署文件夾的關鍵,因此我在每個 VM 上設置了一個名為 AutomationDeploymentRoot 的系統環境變量

您必須在每個 VM 上重新啟動 Azure Pipelines 代理 Windows 服務,然后才能獲取對環境變量的更改!!

我發現對環境變量的支持在不同任務之間非常不一致——它們似乎在腳本任務中運行良好,但在其他任務(如 CopyFiles)中表現不佳。

最可靠的方法是將環境變量復制到我在變量選項卡上設置的管道變量 (deployment.root) 中,如下所示

變量的屏幕截圖

然后按照 Thomasz 和 Vito 的建議從腳本中設置變量

 steps: - script: | @echo ##vso[task.setvariable variable=deployment.root]%AutomationDeploymentRoot% displayName: 'Set Deployment Folder'

當它運行時, c:\\temp\\deploy 被目標機器的正確文件夾替換,一切都變綠了!

您可以從腳本設置變量: https : //docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=classic%2Cpowershell# set-variables-in-scripts

編寫一個腳本,該腳本將能夠確定它在哪台機器上運行並為變量分配適當的值。

同意托馬斯。

我們可以通過power腳本Write-Host“ ##vso[task.setvariable variable={variable name}]{variable value} ”設置##vso[task.setvariable variable={variable name}]{variable value} ,然后我們可以在另一個任務中調用該變量。

請參閱此答案以獲取更多詳細信息

此外,我們可以通過此 API 更新發布管道變量Update a release definition

一個 打開發布管道並添加一個新變量 test 並授予test Build Service (xxx)帳戶編輯發布管道權限。 (打開發布管道--> ... --> 安全性--> 編輯發布管道設置為允許)。

打開管道,啟用允許腳本訪問 OAuth 令牌功能(單擊代理作業名稱=>附加選項)添加任務 powershell 並輸入下面的腳本以更新發布變量測試值。

$url = "https://vsrm.dev.azure.com/{org name}/{project name}/_apis/release/definitions/{release definition ID}?api-version=6.0-preview.4"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"

# Update an existing variable named test to its new value 
$pipeline.variables.test.value= {new variable value}

####****************** update the modified object **************************
$json = @($pipeline) | ConvertTo-Json -Depth 99


$updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}

write-host "==========================================================" 
Write-host "The value of Varialbe 'test' is updated to" $updatedef.variables.test.value
write-host "=========================================================="

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM