How to download the latest build artifacts from Azure DevOps programmatically?
C#.NetAzureAzure DevopsAzure ArtifactsC# 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:
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.
- Click on build logs.
- Next, click on summary option of the build.
- After step 2, on top right side of UI, Artifacts option would be visible, so click on that.
- 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.
- Click on the completed build (not the whole pipeline) and you will be taken to the Summary tab on the Build page.
- 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.
- The page displays all the available artifacts. Click the download icon to download any of the artifacts.
Solution 4 - C#
Pick your pipeline
Select your run.
Now look for Published. Click it. If something is there, you should be able to download it.
Solution 5 - C#
Releases > Select a Release
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