如何以编程方式从 Azure DevOps 下载最新的构建工件?
Posted
技术标签:
【中文标题】如何以编程方式从 Azure DevOps 下载最新的构建工件?【英文标题】:How to download the latest build artifacts from Azure DevOps programmatically? 【发布时间】:2019-06-20 19:32:00 【问题描述】:我有一个 .NET C# 应用程序,我想下载此公共 Azure DevOps 项目的最新版本生成的最新工件:
https://dev.azure.com/LumiaWoA/Boot%20Shim/_build?definitionId=3
如何与 Azure DevOps 交互以下载此类任务的工件?
我想使用一个 HttpClient 通过一些特殊的 URL 下载压缩的工件。
【问题讨论】:
【参考方案1】:您需要为此使用 Azure DevOps REST Api。这个 rest 调用从构建中检索工件:
GET https://dev.azure.com/organization/project/_apis/build/builds/buildId/artifacts?artifactName=artifactName&api-version=5.0
此 REST 调用将为您提供最新版本:
GET https://dev.azure.com/organization/project/_apis/build/latest/definition?branchName=branchName&api-version=5.0-preview.1
Here's an article (with some samples) 谈论您将如何向 API 进行身份验证。从代码的角度来看,它是一个简单的 HTTP 请求,所以应该相当简单。
【讨论】:
您能告诉我如何获取最新版本吗? 另外,是否有客户端库可以执行此操作? docs.microsoft.com/en-us/azure/devops/integrate/concepts/… 第二次休息调用检索最新版本。是的,我认为其中一个客户端库会帮助您,抱歉,我不是真正的 c# 开发人员。我一直在 powershell 中使用纯 HTTP 来讨论 Azure Devops。工作正常。 抱歉打扰了!我几乎拥有它。但是,我在第二次通话时遇到问题。我正在使用这个dev.azure.com/LumiaWOA/Boot%20Shim/_apis/build/latest/… 我希望你能告诉我哪里出了问题。 对不起,我正在尝试的 URL 是这个。 dev.azure.com/LumiaWOA/Boot%20Shim/_apis/build/latest/… Build?branchName=msm8994-pcie&api-version=5.0-preview.1。它说:无法序列化类型 Microsoft.TeamFoundation.Build.WebApi.Build,因为不满足安全要求【参考方案2】:以下是使用 Azure DevOps UI 下载 DevOps 构建的最新工件的步骤。
-
点击构建日志。
接下来,单击构建的摘要选项。
在第 2 步之后,在 UI 的右上角,Artifacts 选项将可见,因此请点击该选项。
接下来,选择 drop 以下载构建的最新工件的 ZIP。
使用截至 2019 年 11 月 9 日的测试版 UI,步骤如下。
-
单击已完成的构建(不是整个管道),您将被带到 构建 页面上的 Summary 选项卡。
在顶部框中,在最右侧,单击 Artifacts 列下的链接。它是一个带有 1 个已发布 之类的文本框的图标。然后,您将被带到 Artifacts 页面。
该页面显示所有可用的工件。点击下载图标下载任何工件。
【讨论】:
我们都知道 Azure DevOps 是一头快速发展的野兽。看起来新的 UI 更改删除了下载工件的选项。或者他们只是把选项放错了我找不到的地方。 是的,我终于找到了从 sprint 156 更新中下载给定工件的选项。 谢谢!是的,我在“已发布的构建工件”的构建管道摘要选项卡下找到了它。 对于那些因为在右上角找不到“工件”下拉菜单而慢慢发疯的人,可能是因为构建工件已被删除。我试图下载一个两天前的构建,但在任何地方都看不到“工件”下拉菜单。结果发现 Project Settings > Pipelines > Settings > Retention policy > Days to keep artifacts and attachments 被设置为 1,因此这些项目已经被删除了。【参考方案3】:在Pipelines
时,当一个选择成功运行并钻取到Agent job X
并选择该代理时,可以在该代理的日志信息中找到。
在代理Job Information
中,可以通过X artifact produced
链接获得指向可以下载项目的下载位置的链接:
【讨论】:
【参考方案4】:版本 > 选择版本
点击 Artifact 链接(蓝色,例如:20191125.1)
新屏幕是日志。在右上角,点击蓝色的 [Artifacts] 按钮。
选择Drop,展开树,然后右键下载你想要的文件(可能是构建的zip)
【讨论】:
【参考方案5】:这就是我使用 PowerShell 使其工作的方式。
$MyPat = '********************************'
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$MyPat"))
$h = @'Authorization' = 'Basic ' + $B64Pat
$response = Invoke-WebRequest -Uri "https://dev.azure.com/organization/project/_apis/build/builds/buildId/artifacts?artifactName=artifactName&api-version=4.1" -Method 'GET' -Headers $h
$response_json = ($response.Content | ConvertFrom-Json)
$response_artifact = Invoke-WebRequest -Uri $response_json.resource.downloadUrl -Method 'GET' -Headers $h
【讨论】:
嘿路易斯,在您的示例中,您必须插入 buildId。最新的成功构建也可以做到这一点吗?例如。 dev.azure.comorganization/project/_apis/build/latest/definition.... 在这种情况下,最好的办法是从这里获取最新的 buildId:GET dev.azure.comorganization/project/_apis/build/builds?api-version=4.1【参考方案6】:选择你的管道
选择你的跑步。
现在查找已发布。点击它。如果有东西,你应该可以下载它。
【讨论】:
以上是关于如何以编程方式从 Azure DevOps 下载最新的构建工件?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式在本地 Azure DevOps 服务器工作项注释中为 Active Directory 用户帐户添加 @提及(2021 年 1 月)
如何使用 API 和 c# 从 azure DevOps 服务器下载文件到指定路径