Как загрузить последние версии сборки из DevOps Azure?
У меня есть приложение.NET C#, и я хочу загрузить последние артефакты, сгенерированные последней сборкой этого общедоступного проекта Azure DevOps:
https://dev.azure.com/LumiaWoA/Boot%20Shim/_build?definitionId=3
Извините, потому что я не знаю никакого рабочего кода. Проблема именно в этом. Как взаимодействовать с Azure DevOps для выполнения такой задачи?
Я имею в виду использовать HttpClient для загрузки сжатых артефактов, используя какой-то специальный URL, но ничего не приходит в голову.
7 ответов
Для этого вам нужно будет использовать Azure DevOps REST Api. Этот оставшийся вызов извлекает артефакты из сборки:
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=5.0-preview.5
этот вызов REST даст вам последнюю сборку:
GET https://dev.azure.com/{organization}/{project}/_apis/build/latest/{definition}?branchName={branchName}&api-version=5.0-preview.1
Вот статья (с некоторыми примерами), рассказывающая о том, как вы проходите аутентификацию в API. С точки зрения кода, это простой HTTP-запрос, поэтому он должен быть довольно простым.
В Pipelines
когда выбирается успешный прогон и сверлится до Agent job X
и выбирает этого агента, его можно найти в информации журнала этого агента.
В агенте Job Information
, можно получить ссылку на место загрузки, где элементы могут быть загружены благодаря X artifact produced
ссылка:
Выберите свой трубопровод
Выберите свой пробег.
Теперь ищите "Опубликовано". Щелкните по нему. Если что-то там есть, вы сможете его скачать.
Ниже приведены шаги по загрузке последних артефактов сборки DevOps с помощью пользовательского интерфейса Azure DevOps.
- Щелкните журналы сборки.
- Затем нажмите на вариант сводки сборки.
- После шага 2 в верхней правой части пользовательского интерфейса будет видна опция Артефакты, поэтому нажмите на нее.
- Затем выберите drop, чтобы загрузить ZIP с последними артефактами сборки.
При использовании пользовательского интерфейса бета-версии по состоянию на 09.11.2019 выполните следующие действия.
- Щелкните завершенную сборку (а не весь конвейер), и вы попадете на вкладку " Сводка " на странице " Сборка".
- В правом верхнем поле щелкните ссылку под столбцом Артефакты. Это значок поля с текстом типа 1 опубликовано. После этого вы попадете на страницу Артефактов.
- На странице отображаются все доступные артефакты. Щелкните значок загрузки, чтобы загрузить любой из артефактов.
Надеюсь, это сработает для вас.
Выпуски> Выберите выпуск
Щелкните ссылку Артефакт (синим цветом, например: 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
Следующее работает для меня в PowerShell.
# Script to download the latest artifact from a DevOps build pipeline
# Configuration
$Company = '*********'
$Project = '*********'
$MyPat = '*********'
$DefinitionName = '*********'
$Branch = 'main'
$ArtifactName = 'drop'
$DownloadTo = 'C:\Downloads\Drop.zip'
# Build Auth header
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$MyPat"))
$h = @{'Authorization' = 'Basic ' + $B64Pat}
# Get build definition id
$response = Invoke-WebRequest -Uri "https://dev.azure.com/$($Company)/$($Project)/_apis/build/definitions?name=$($DefinitionName)&api-version=6.0" -Method 'GET' -Headers $h -UseBasicParsing
$response_json = ($response.Content | ConvertFrom-Json)
$DefinitionId = $response_json.value.id
# Get latest build id for named branch
$response = Invoke-WebRequest -Uri "https://dev.azure.com/$($Company)/$($Project)/_apis/build/latest/$($DefinitionId)?branchName=$($Branch)&api-version=6.0-preview" -Method 'GET' -Headers $h -UseBasicParsing
$response_json = ($response.Content | ConvertFrom-Json)
$BuildId = $response_json.id
# Download latest named artifact
$response = Invoke-WebRequest -Uri "https://dev.azure.com/$($Company)/$($Project)/_apis/build/builds/$($BuildId)/artifacts?artifactName=$($ArtifactName)&api-version=6.0" -Method 'GET' -Headers $h -UseBasicParsing
$response_json = ($response.Content | ConvertFrom-Json)
$response_json.resource.downloadUrl
$response_artifact = Invoke-WebRequest -Uri $response_json.resource.downloadUrl -Method 'GET' -Headers $h -UseBasicParsing -OutFile "$($DownloadTo)"
Где:$Company
— это название вашей компании в URL-адресе DevOps.$Project
ваш проект в URL-адресе DevOps.$MyPat
это ваш PrivateAccessToken для аутентификации.$DefinitionName
— это имя вашего определения сборки.
Надеюсь, это поможет.