How to download the latest build artifacts from Azure DevOps programmatically?

C#.NetAzureAzure DevopsAzure Artifacts

C# Problem Overview


I have a .NET C# application and I would like to download the latest artifacts generated by the latest build of this public Azure DevOps project:

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

How does one interface with Azure DevOps to download the artifacts for such a task?

I have in mind to use an HttpClient to download the zipped artifacts using some special URL.

C# Solutions


Solution 1 - C#

In the Pipelines when one selects a successful run and drills down to Agent job X and selects that agent, it can be found in the log information of that agent.

In the agent Job Information, one can get a link to the download location where items can be downloaded thanks to the X artifact produced link:

enter image description here

Solution 2 - C#

You would need to use Azure DevOps REST Api for that. This rest call retrieves artifacts from the build:

GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=5.0

this REST call would give you latest build:

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) talking about how you would authenticate to the API. As from the code perspective, its a simple HTTP request, so should be fairly easy.

Solution 3 - C#

Here are the steps to download latest artifacts of DevOps build using Azure DevOps UI.

  1. Click on build logs.
  2. Next, click on summary option of the build.
  3. After step 2, on top right side of UI, Artifacts option would be visible, so click on that.
  4. Next, select drop to download the ZIP of the latest artifacts of the build.

Using the beta UI as of 2019-11-09, the steps are as follows.

  1. Click on the completed build (not the whole pipeline) and you will be taken to the Summary tab on the Build page.
  2. In the top box, to the extreme right, click the link under the Artifacts column. It’s an icon of a box with text like 1 published. You will then be taken to the Artifacts page.
  3. The page displays all the available artifacts. Click the download icon to download any of the artifacts.

Solution 4 - C#

Pick your pipeline

AzureDevops pipeline selection

Select your run.

AzureDevops pipeline run

Now look for Published. Click it. If something is there, you should be able to download it.

enter image description here

Solution 5 - C#

Releases > Select a Release

enter image description here

Click the Artifact link (in blue eg: 20191125.1)

The new screen is the log. In the top right hand side, click the blue [Artifacts] button.

Choose Drop, expand the tree, and right click to download the file you want (probably the zip of the build)

Solution 6 - C#

This is how I got it to work using 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSuperJMNView Question on Stackoverflow
Solution 1 - C#ΩmegaManView Answer on Stackoverflow
Solution 2 - C#4c74356b41View Answer on Stackoverflow
Solution 3 - C#anilView Answer on Stackoverflow
Solution 4 - C#VivekDevView Answer on Stackoverflow
Solution 5 - C#Neil ThompsonView Answer on Stackoverflow
Solution 6 - C#Louis CribbinsView Answer on Stackoverflow