【问题标题】:How to download the latest build artifacts from Azure DevOps programmatically?如何以编程方式从 Azure DevOps 下载最新的构建工件?
【发布时间】:2019-06-20 19:32:00
【问题描述】:

我有一个 .NET C# 应用程序,我想下载此公共 Azure DevOps 项目的最新版本生成的最新工件:

https://dev.azure.com/LumiaWoA/Boot%20Shim/_build?definitionId=3

如何与 Azure DevOps 交互以下载此类任务的工件?

我想使用一个 HttpClient 通过一些特殊的 URL 下载压缩的工件。

【问题讨论】:

    标签: c# .net azure azure-devops azure-artifacts


    【解决方案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 构建的最新工件的步骤。

    1. 点击构建日志。
    2. 接下来,单击构建的摘要选项。
    3. 在第 2 步之后,在 UI 的右上角,Artifacts 选项将可见,因此请点击该选项。
    4. 接下来,选择 drop 以下载构建的最新工件的 ZIP。

    使用截至 2019 年 11 月 9 日的测试版 UI,步骤如下。

    1. 单击已完成的构建(不是整个管道),您将被带到 构建 页面上的 Summary 选项卡。
    2. 在顶部框中,在最右侧,单击 Artifacts 列下的链接。它是一个带有 1 个已发布 之类的文本框的图标。然后,您将被带到 Artifacts 页面。
    3. 该页面显示所有可用的工件。点击下载图标下载任何工件。

    【讨论】:

    • 我们都知道 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.com{organization}/{project}/_apis/build/latest/{definition}....
        • 在这种情况下,最好的办法是从这里获取最新的 buildId:GET dev.azure.com{organization}/{project}/_apis/build/builds?api-version=4.1
        【解决方案6】:

        选择你的管道

        选择你的跑步。

        现在查找已发布。点击它。如果有东西,你应该可以下载它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多