我首先在azure DevOps中设置了发布管道,以将Windows服务部署到只有一个VM并设置了代理的部署组。我在部署文件夹的管道中设置了一个变量。
我现在正在尝试将此扩展到2个服务器。我已将第二台服务器添加到部署组中,并且注册已成功进行。在此服务器上,部署需要转到其他驱动器。
似乎没有一种方法可以由代理为变量指定不同的值。
我已经尝试在ui中进行谷歌搜索和拖网捕捞,到目前为止,我什么都没发现。我想知道变量是否正确?
答案 0 :(得分:2)
我要回答我自己的问题,因为该解决方案实际上是@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时,将其替换为目标计算机的正确文件夹,并且一切变为绿色!
答案 1 :(得分:1)
编写一个脚本,该脚本将能够确定它在哪台计算机上运行,并为变量分配适当的值。
答案 2 :(得分:1)
同意Tomasz。
我们可以通过超级脚本Write-Host“ ##vso[task.setvariable variable={variable name}]{variable value}
”设置变量,然后在另一个任务中调用该变量。
有关更多详细信息,请参阅this answer
此外,我们可以通过此API Update a release definition更新发布管道变量。
a 。打开发布管道并添加新的变量test,并向test Build Service (xxx)
帐户授予“编辑发布管道”权限。 (打开发布管道-> ...->安全->编辑设置为“允许”的发布管道。
b 。打开管道,启用“允许脚本访问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 "=========================================================="