如何在发布管道中使用构建管道中的自定义变量

时间:2020-01-29 10:21:44

标签: azure-devops azure-pipelines

问题: 有什么方法可以在azure-devops的构建管道中定义自定义变量,然后可以以任何方式在发布管道中使用自定义变量?

场景: 我们不使用变量组,因为我们需要在构建管道中动态设置变量,然后在发布管道中使用它-它不是静态的超级全局变量。

检查了release variablesbuild variables处的文档,但找不到任何帮助信息或提示,这是可能的。

我尝试过的事情

  1. variable中(在构建管道中)定义一个variables,并尝试使用$(name)在发布管道中访问它,或检查它是否在env中。 / li>

其他-动机 背后的动机是

  1. 阅读在构建管道步骤中使用的最新git-tag并将其公开给管道变量VERSION(实际上,在此期间我们会修补)
  2. 发布版本是一个手动步骤。
  3. 如果发布了版本,则azure-devops gui向我们显示了发布管道的所有变量,这些变量“在发布期间可设置-包括我们要使用的发布此程序包的版本
  4. 我们希望在此“版本”中预先添加构建管道的版本,以作为下一个版本的建议
  5. 在发布管道中,我们检出存储库,添加VERSION作为标签,并使用该版本打包/发布工件。

2 个答案:

答案 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

enter image description here

还用默认123发布管道中定义相同的自定义变量:

enter image description here

然后添加一个内联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

在这种情况下,我们可以在对构建管道进行排队时动态设置变量,并且该值将覆盖发布管道中的默认值,以便我们可以使用它来发布管道。

希望这会有所帮助。