Azure devops 通用包工件-在管道中使用包视图
我有一个发布管道,每当发布通用软件包的新版本时都会触发它。现在,由于我的包可以升级到特定的视图(默认值为@local、@prereleas或@release),因此我希望在自定义条件下使用所选视图来执行管道中的后续步骤 比如: eq($(hoppellysomepredefinedvar),“@prerelease”) 然而,我检查了可用的预定义变量,“视图”信息似乎不可用,除非我遗漏了什么 一个更干净的解决方案可能是在发布管道中使用单独的阶段,并通过一些预部署条件来评估“视图”,但我没有找到一种方法来做到这一点 最后,我尝试多次添加相同的工件(通用包),并使用不同的“视图”对其进行“筛选”。因此,一次使用view@prerelease,一次使用view@release。然而,我的管道似乎根本不会被这种配置触发 是否有解决方案(或良好的解决方法)Azure devops 通用包工件-在管道中使用包视图,azure-devops,azure-devops-pipelines,Azure Devops,Azure Devops Pipelines,我有一个发布管道,每当发布通用软件包的新版本时都会触发它。现在,由于我的包可以升级到特定的视图(默认值为@local、@prereleas或@release),因此我希望在自定义条件下使用所选视图来执行管道中的后续步骤 比如: eq($(hoppellysomepredefinedvar),“@prerelease”) 然而,我检查了可用的预定义变量,“视图”信息似乎不可用,除非我遗漏了什么 一个更干净的解决方案可能是在发布管道中使用单独的阶段,并通过一些预部署条件来评估“视图”,但我没有找到一
谢谢 作为一种解决方法,您可以编写一个脚本来判断包视图。如果存在名为
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调用工作正常。这种方法的唯一问题是,如果我从工件触发器中删除视图“过滤器”,管道仅在发布包的新版本时触发,而不是在将版本升级到特定视图时触发。如果希望在将版本升级到特定视图时触发管道,为什么要从工件触发器中删除视图“过滤器”?此外,我在答案中添加了另一个解决方法,请查看。不要获取您的最新信息。只是想看看下面的答案是否对你有帮助?如果是的话,你可以,这也可以为其他谁与你有相同的难题,我们可以存档此线程受益。另外,如果还有任何疑问,请随时在下面留言:-)祝你有一个愉快的一天。