Как загрузить последние версии сборки из 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 ссылка:

https://i.stack.imgur.com/PIsva.pn g

Выберите свой трубопровод

Выберите свой пробег.

Теперь ищите "Опубликовано". Щелкните по нему. Если что-то там есть, вы сможете его скачать.

Ниже приведены шаги по загрузке последних артефактов сборки DevOps с помощью пользовательского интерфейса Azure DevOps.

  1. Щелкните журналы сборки.
  2. Затем нажмите на вариант сводки сборки.
  3. После шага 2 в верхней правой части пользовательского интерфейса будет видна опция Артефакты, поэтому нажмите на нее.
  4. Затем выберите drop, чтобы загрузить ZIP с последними артефактами сборки.

При использовании пользовательского интерфейса бета-версии по состоянию на 09.11.2019 выполните следующие действия.

  1. Щелкните завершенную сборку (а не весь конвейер), и вы попадете на вкладку " Сводка " на странице " Сборка".
  2. В правом верхнем поле щелкните ссылку под столбцом Артефакты. Это значок поля с текстом типа 1 опубликовано. После этого вы попадете на страницу Артефактов.
  3. На странице отображаются все доступные артефакты. Щелкните значок загрузки, чтобы загрузить любой из артефактов.

Надеюсь, это сработает для вас.

Выпуски> Выберите выпуск

Щелкните ссылку Артефакт (синим цветом, например: 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— это имя вашего определения сборки.

Надеюсь, это поможет.

Другие вопросы по тегам