У меня есть приложение .NET C#, и я хочу загрузить последние артефакты, созданные последней сборкой этого общедоступного проекта Azure DevOps:
https://dev.azure.com/LumiaWoA/Boot%20Shim/_build?definitionId=3
Как можно взаимодействовать с Azure DevOps для загрузки артефактов для такой задачи?
Я имею в виду использовать HttpClient для загрузки заархивированных артефактов с использованием специального URL-адреса.
🤔 А знаете ли вы, что...
C# обеспечивает возможность создания многопоточных приложений с помощью пространства имен System.Threading.
Для этого вам потребуется использовать 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
Вот статья (с некоторыми примерами) говорит о том, как вы будете аутентифицироваться в API. С точки зрения кода это простой HTTP-запрос, поэтому он должен быть довольно простым.
Ниже приведены инструкции по загрузке последних артефактов сборки DevOps с помощью пользовательского интерфейса Azure DevOps.
Используя бета-версию пользовательского интерфейса по состоянию на 09.11.2019, выполните следующие действия.
В Pipelines
, когда вы выбираете успешный запуск и переходите к Agent job X
и выбираете этого агента, его можно найти в информации журнала этого агента.
В агенте Job Information
по ссылке X artifact produced
можно получить ссылку на место загрузки, где можно скачать элементы:
Релизы > Выберите релиз
Щелкните ссылку Артефакт (синим цветом, например: 20191125.1).
Новый экран - журнал. В правом верхнем углу нажмите синюю кнопку [Артефакты].
Выберите Drop, разверните дерево и щелкните правой кнопкой мыши, чтобы загрузить нужный файл (возможно, zip-архив сборки)
Вот как я заставил его работать с помощью 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