Отчет о состоянии сборки из Jenkins в Azure DevOps

Есть ли возможность отправлять отчеты о состоянии сборки из Jenkins в Azure DevOps?

У меня есть репозиторий в Azure DevOps и конвейер в Jenkins. Используя функциональные возможности Azure Service Hooks, я запускаю конвейер Jenkins при обновлении репозитория. Это отлично работает как с опциями "Встроенный API Jenkins", так и с "подключаемым модулем DevOps для Jenkins".

Теперь я хочу, чтобы статус сборки отображался на странице Azure DevOps на странице коммитов, как если бы был выполнен собственный конвейер Azure DevOps, и отображал ссылку на сборку Jenkins, если это возможно.

Есть ли способ сделать это?

Я думал о вызове некоторого Azure REST API в качестве действия после сборки в Jenkins, однако мне кажется, что нет API, позволяющего устанавливать статус фиксации, а также вставлять данные для сборки, которая никогда не запускалась самим Azure DevOps.

1 ответ

Решение

Существует спокойный api, который позволяет вам создавать статус коммитов git для коммитов на странице коммитов.

Вы можете вызвать ниже API как действие после сборки в Jenkins.

POST https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}/statuses?api-version=5.1

CommitId - это SHA фиксации. И вы можете получить repositoryId из Хранилища под Репо в настройках проекта. Это в URL. Посмотрите скриншот ниже.

Ниже приведен пример создания статуса фиксации в сценариях PowerShell.

$url="https://dev.azure.com/Org/Proj/_apis/git/repositories/....-..-442d-9dbe-76debfba1c60/commits/....faac7aafeefb3f1b83c/statuses?api-version=5.1"

$connectionToken ="Person Access Token"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

$body ='{
  "state": "succeeded",
  "description": "The build is successful",
  "targetUrl": "https://dev.azure.com/.../.../_build/results?buildId=1577",
  "context": {
    "name": "Build123",
    "genre": "continuous-integration"
  }}'

Invoke-RestMethod -Uri $url -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method  Post -ContentType "application/json" -Body $body
Другие вопросы по тегам