0

我有一个发布管道,每当发布通用包的新版本时就会触发它。现在,由于我的包可以提升到特定视图(默认为@local、@prereleas 或@release),我想在自定义条件下使用选定的视图来执行管道中的后续步骤。

就像是 :

eq($(hopefullysomepredefinedvar), '@prerelease')

但是,我检查了可用的预定义变量,除非我错过了什么,否则“视图”信息似乎不可用。

一个更清洁的解决方案可能是在发布管道中使用单独的阶段并通过一些预部署条件评估“视图”,但我没有找到这样做的方法。

最后,我尝试多次添加相同的工件(通用包),并使用不同的“视图”来“过滤”。因此,一次使用视图@prerelease,一次使用视图@release。但是,这种配置似乎根本没有触发我的管道。

是否有解决方案(或好的解决方法)?

谢谢!

4

1 回答 1

1

作为一种解决方法,您可以通过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)

第二种解决方法

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

在此处输入图像描述

我们可以使用Release.TriggeringArtifact.Alias 默认变量来获取条件中触发释放的工件的别名来判断视图。

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

于 2021-01-21T08:46:08.100 回答