Вы можете создать новый конвейер сборки, который запускается только Завершение сборки вашего тестового конвейера.
И добавить задачу сценария для вызова Build rest api к этому новому конвейеру для расчета общего времени выполнения сборок. И добавьте Задача отправки электронной почты , чтобы отправить вам электронное письмо при условии, что продолжительность больше, чем в предыдущей сборке. Подробные шаги перечислены ниже:
1, Установите новый конвейер и настройте триггер завершения сборки
Go до Получить источники -> Проверить Не синхронизировать c источники , чтобы пропустить источники извлечения
Нажмите Задание агента -> Проверить Разрешить сценариям получить доступ к токену OAuth , чтобы скрипты могли вызывать остальные API
Go до Триггеры вкладка -> Завершение сборки -> Нажмите Добавить , чтобы выбрать тестовый конвейер как Запуск сборки
При настройке завершения сборки Запуск сборки, этот новый конвейер будет запущен, когда ваш Испытательный конвейер завершен.
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')
. Так что эта задача будет выполняться только тогда, когда общее время больше.
Надеюсь, что выше помогает!