如何通过编程在Azure Artifact Feed中查找包版本的Git标签?
获取Azure DevOps Artifact包版本对应的Git标签/代码信息
要编程获取包版本关联的Git标签或代码信息,需要通过Azure DevOps的几个API串联查询,核心是关联包版本到构建任务,再从构建任务中提取Git相关数据:
步骤1:获取包版本的元数据,提取关联构建ID
调用Packages API获取目标包版本的详细信息,重点关注返回结果中的properties字段,其中包含构建关联信息:
GET https://pkgs.dev.azure.com/{组织名}/{项目名}/_apis/packaging/feeds/{FeedID}/packages/{包ID}/versions/{版本号}?api-version=7.1-preview.1
在返回的JSON里,找到Microsoft.VisualStudio.Services.Build.BuildUri属性(格式类似vstfs:///Build/Build/{构建ID}),从中提取出构建ID。
如果你的包是通过自定义流程发布的,建议在发布时手动添加Git标签/提交哈希作为包的自定义属性(比如在dotnet pack时添加/p:GitTag=你的标签名),这样可以直接在包元数据的properties中读取,无需走构建API。
步骤2:通过构建ID获取Git分支/标签信息
用提取到的构建ID调用Builds API,获取构建任务的详细数据:
GET https://dev.azure.com/{组织名}/{项目名}/_apis/build/builds/{构建ID}?api-version=7.1-preview.7
返回结果中:
sourceBranch:如果构建来自Git标签,该字段值为refs/tags/{标签名},直接提取即可;如果来自分支,则是分支路径。sourceVersion:对应代码的Git提交哈希,可用于后续验证或查找关联标签。
步骤3:(可选)通过提交哈希确认Git标签
如果需要通过提交哈希反向查找对应的标签,调用Git Tags API:
GET https://dev.azure.com/{组织名}/{项目名}/_apis/git/repositories/{仓库ID}/tags?api-version=7.1-preview.1
遍历返回的标签列表,找到objectId与sourceVersion匹配的项,其name就是对应的Git标签。
注意事项
- 确保调用API的账号拥有Packaging Read和Build Read权限,否则会返回权限不足错误。
- 如果包是手动上传而非通过Pipeline构建发布的,默认不会关联构建信息,需要在上传时手动注入Git相关元数据(比如使用
nuget push时添加-Properties GitTag=xxx)。
内容的提问来源于stack exchange,提问作者KazM
相关产品推荐
相关产品推荐

