如何以编程方式从 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 月)

如何在 Azure 角色中以编程方式获取订阅 ID?

以编程方式下载 Azure 文件共享文档

如何使用 API 和 c# 从 azure DevOps 服务器下载文件到指定路径

如何以编程方式获取 Azure AD 应用程序的 Graph API 权限指南?

从Azure DevOps的Git库中下载指定文件