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.
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.
Here are the steps to download latest artifacts of DevOps build using Azure DevOps UI.
Using the beta UI as of 2019-11-09, the steps are as follows.
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:
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)
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
Pick your pipeline
Select your run.
Now look for Published. Click it. If something is there, you should be able to download it.