问题描述
我有一个发布管道,每当发布新版本的通用包时都会触发该管道。现在,由于我的包可以提升到特定视图(默认值为 @local、@prereleas 或 @release),我想在管道中的后续步骤中以自定义条件使用所选视图。
类似:
eq($(hopefullysomepredefinedvar),'@prerelease')
但是,我检查了可用的预定义变量,除非我遗漏了什么,否则“查看”信息似乎不可用。
更简洁的解决方案可能是在发布管道中使用单独的阶段,并通过一些部署前的条件评估“视图”,但我没有找到这样做的方法。
最后,我尝试多次添加相同的工件(通用包),使用不同的“视图”来“过滤”。所以一次使用视图@prerelease,一次使用视图@release。但是,使用此配置似乎根本不会触发我的管道。
谢谢!
解决方法
作为一种解决方法,您可以通过rest api编写脚本来判断包视图。如果存在名为 Prerelease
的视图,请将 condition
变量设置为 true
。
GET https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/Packages/{packageId}/versions/{packageVersionId}?api-version=6.0-preview.1
示例脚本:
$url = 'GET https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/Packages/{packageId}/versions/{packageVersionId}?api-version=6.0-preview.1';
$token = "PAT"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$results = $response.views.name
foreach($view in $response.views){
if($view.name -eq "Prerelease"){
$condition = "true"
}
}
Write-Host "results = $($results | ConvertTo-Json -Depth 100)"
Write-Host "result = $condition"
然后您可以像这样设置自定义条件eq($(condition),true)
。
第二种解决方法:
添加多个工件源,然后我们指定源别名,如下所示:
我们可以使用Release.TriggeringArtifact.Alias
default variable来获取条件中触发发布的artifact的别名来判断视图。
例如:condition: contains(variables['Release.TriggeringArtifact.Alias'],'@prerelease' ))