问题: 有什么方法可以在azure-devops的构建管道中定义自定义变量,然后可以以任何方式在发布管道中使用自定义变量?
场景: 我们不使用变量组,因为我们需要在构建管道中动态设置变量,然后在发布管道中使用它-它不是静态的超级全局变量。
检查了release variables和build variables处的文档,但找不到任何帮助信息或提示,这是可能的。
我尝试过的事情
variable
中(在构建管道中)定义一个variables
,并尝试使用$(name)
在发布管道中访问它,或检查它是否在env
中。 / li>
其他-动机 背后的动机是
VERSION
(实际上,在此期间我们会修补)VERSION
作为标签,并使用该版本打包/发布工件。答案 0 :(得分:1)
默认情况下这是不可能的,但是您可以在市场上使用2个扩展程序:
1)Shared variable updater-创建一个变量组,并在构建更新期间通过此任务动态地更改变量。您也可以使用脚本来完成此操作,请参见答案here。
2)Variable Kit for Azure DevOps Services-在构建期间,将变量保存到与构建资产一起存储的json文件中。在发布期间,加载保存的变量并在发布定义中使用它们。
答案 1 :(得分:1)
如何在发布管道中使用构建管道中的自定义变量
您可以尝试使用REST API Release Definitions - Update更新发布管道中的默认变量,以使用在构建管道中定义的值。
PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=5.1
详细信息:
在构建管道中定义自定义变量,例如TestValue
,值为123
:
还用默认值123
在发布管道中定义相同的自定义变量:
然后添加一个内联powershell脚本来调用REST API Definitions - Update
,以更新发布管道中的默认值:
$url = "https://vsrm.dev.azure.com/<OrganizationName>/<ProjectName>/_apis/release/definitions/<DefinitionId>?api-version=5.1"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Method Get -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
# Update an existing variable named TestValue to its new value 987
$pipeline.variables.TestValue.value = "$(TestValue)"
####****************** update the modified object **************************
$json = @($pipeline) | ConvertTo-Json -Depth 99
Write-Host "URL: $json "
$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 'TestValue' is updated to" $updatedef.variables.TestValue.value
在这种情况下,我们可以在对构建管道进行排队时动态设置变量,并且该值将覆盖发布管道中的默认值,以便我们可以使用它来发布管道。
希望这会有所帮助。