Как получить уведомление в Azure, если общее время выполнения больше для новой сборки - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть конвейер в Azure DevOps, в котором сценарий теста загрузки Гатлинга выполняется каждую ночь. Как я могу получить уведомление в Azure (и по электронной почте также), если общее время выполнения в последний раз больше, чем в предыдущий раз (например, 31.03.2020 общее время выполнения было 10 минут, 01.04.2020 общее время выполнения было 12 минут - в этом случае я хочу получить уведомление)?

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете создать новый конвейер сборки, который запускается только Завершение сборки вашего тестового конвейера.

И добавить задачу сценария для вызова Build rest api к этому новому конвейеру для расчета общего времени выполнения сборок. И добавьте Задача отправки электронной почты , чтобы отправить вам электронное письмо при условии, что продолжительность больше, чем в предыдущей сборке. Подробные шаги перечислены ниже:

1, Установите новый конвейер и настройте триггер завершения сборки

Go до Получить источники -> Проверить Не синхронизировать c источники , чтобы пропустить источники извлечения enter image description here

Нажмите Задание агента -> Проверить Разрешить сценариям получить доступ к токену OAuth , чтобы скрипты могли вызывать остальные API enter image description here

Go до Триггеры вкладка -> Завершение сборки -> Нажмите Добавить , чтобы выбрать тестовый конвейер как Запуск сборки

При настройке завершения сборки Запуск сборки, этот новый конвейер будет запущен, когда ваш Испытательный конвейер завершен.

enter image description here

2, добавьте задачу скрипта для вызова Build rest api и вычислите продолжительность. И сохраняет результат в переменной . Проверьте приведенный ниже сценарий powershell:

$url = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.TriggeredBy.BuildId)?api-version=5.1"
echo $url

$result = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get

# calculate the totaltime of the newest build
$time = [datetime]$result.finishTime - [datetime]$result.startTime

$thisBuild= $time.TotalMinutes

# get the last build
$lasturl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?definitions=$(Build.TriggeredBy.DefinitionId)&resultFilter=succeeded&`$top=2&api-version=5.1"

$lastResult =Invoke-RestMethod -Uri $lasturl -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get

#Caculate the totaltime of the last build
$lasttime = [datetime]$lastResult.value[1].finishTime - [datetime]$lastResult.value[1].startTime
$lastBuild = $lasttime.TotalMinutes

#Store the result to varialbe  isLonger    
if($thisBuild -ge $lastBuild ){ echo "##vso[task.setvariable variable=isLonger]True" }

3, Добавить задачу «Отправить по электронной почте» для отправки электронного письма. И установите пользовательское условие на eq(variables.isLonger, 'True'). Так что эта задача будет выполняться только тогда, когда общее время больше.

enter image description here

Надеюсь, что выше помогает!

...