首页 > 解决方案 > 无法在 Azure DevOps API 中按 artifactSourceId 进行筛选

问题描述

给定一个已知的 buildDefinitionId,我试图确定依赖于构建输出的(一个或多个)发布定义。

文档:https ://docs.microsoft.com/en-us/rest/api/azure/devops/release/definitions/list?view=azure-devops-rest-5.0

声明我可以传递artifactSourceId格式的参数,{projectGuid}:{BuildDefinitionId}但是当我尝试传递这个参数时,我得到了指定项目的每个发布定义。

使用网址:https://vsrm.dev.azure.com/my-company/d4155bbc-d85f-4aaf-9a8e-0ba70272cca4/_apis/release/definitions?artifactSourceId=d4155bbc-d85f-4aaf-9a8e-0ba70272cca4:950&api-version=5.0

在我的项目中,我得到了 553 个构建定义的列表。在响应正文中搜索工件键d4155bbc-d85f-4aaf-9a8e-0ba70272cca4:950({projectGuid}:{buildDefinitionId}) 会给我预期的 2 个结果,如下所示:

"artifacts": [
            {
                "sourceId": "d4155bbc-d85f-4aaf-9a8e-0ba70272cca4:950",
                "type": "Build",
                "alias": "my-build-definition",
                // more fields here
             }
             ]

奇怪的是,如果我不传入artifactSourceId参数,我根本不会在响应中获得任何工件数据 - 包括我指定$expand=artifact参数时 - 但我可以指定artifactSourceId=xyz它仍然会返回所有发布定义的列表。

这似乎是 api 的一个错误,但如果有人有任何见解或解决方法,我将不胜感激。

标签: azure-devopsazure-pipelines-release-pipeline

解决方案


您需要使用参数$expand=artifacts(不是$expand=artifact)来扩展工件详细信息。

关于 parameter artifactSourceId,您需要使用 parametersartifactTypeartifactSourceId一起过滤具有给定 artifactSourceId 的 Release 定义。


推荐阅读