通用包工件 - 在管道中使用包视图

问题描述

我有一个发布管道,每当发布新版本的通用包时都会触发该管道。现在,由于我的包可以提升到特定视图(认值为 @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)

第二种解决方法

添加多个工件源,然后我们指定源别名,如下所示:

enter image description here

我们可以使用Release.TriggeringArtifact.Alias default variable来获取条件中触发发布的artifact的别名来判断视图。

例如:condition: contains(variables['Release.TriggeringArtifact.Alias'],'@prerelease' ))