Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 通用包工件-在管道中使用包视图_Azure Devops_Azure Devops Pipelines - Fatal编程技术网

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

Azure devops 通用包工件-在管道中使用包视图,azure-devops,azure-devops-pipelines,Azure Devops,Azure Devops Pipelines,我有一个发布管道,每当发布通用软件包的新版本时都会触发它。现在,由于我的包可以升级到特定的视图(默认值为@local、@prereleas或@release),因此我希望在自定义条件下使用所选视图来执行管道中的后续步骤 比如: eq($(hoppellysomepredefinedvar),“@prerelease”) 然而,我检查了可用的预定义变量,“视图”信息似乎不可用,除非我遗漏了什么 一个更干净的解决方案可能是在发布管道中使用单独的阶段,并通过一些预部署条件来评估“视图”,但我没有找到一

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

比如:

eq($(hoppellysomepredefinedvar),“@prerelease”)

然而,我检查了可用的预定义变量,“视图”信息似乎不可用,除非我遗漏了什么

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

最后,我尝试多次添加相同的工件(通用包),并使用不同的“视图”对其进行“筛选”。因此,一次使用view@prerelease,一次使用view@release。然而,我的管道似乎根本不会被这种配置触发

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


谢谢

作为一种解决方法,您可以编写一个脚本来判断包视图。如果存在名为
Prerelease
的视图,请将
条件
变量设置为
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($(条件),true)

第二种解决方法

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

我们可以使用
Release.TriggeringArtifact.Alias
获取触发条件中发布的工件的别名,以判断视图


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

如果API假定我知道版本号,对吗?在触发管道的发布管道工件中,我只指定了“Latest”,而且我似乎记得在某个地方读到API不支持它。
我只指定了“Latest”
您可以试试这个。是最新的版本。好的,我试试看。我只是想,我还有一个版本可以从触发工件变量触发管道,例如[BUILD_BUILDID]-->[0.5.0],因此我甚至可以将其传递到API。API调用工作正常。这种方法的唯一问题是,如果我从工件触发器中删除视图“过滤器”,管道仅在发布包的新版本时触发,而不是在将版本升级到特定视图时触发。如果希望在将版本升级到特定视图时触发管道,为什么要从工件触发器中删除视图“过滤器”?此外,我在答案中添加了另一个解决方法,请查看。不要获取您的最新信息。只是想看看下面的答案是否对你有帮助?如果是的话,你可以,这也可以为其他谁与你有相同的难题,我们可以存档此线程受益。另外,如果还有任何疑问,请随时在下面留言:-)祝你有一个愉快的一天。