Вы можете использовать API построения временной шкалы , чтобы получить время выполнения указанной c задачи.
Я добавляю еще несколько строк сценариев к моему предыдущему ответу. Пожалуйста, проверьте ниже скрипты.
Я добавил скрипт $result.records | where {$_.name -eq "MyTaskName"}
, чтобы отфильтровать записи задачи по его имени. Примечание. Вам необходимо определить уникальное отображаемое имя для задачи PowerShell.
![enter image description here](https://i.stack.imgur.com/w9HU5.png)
$url = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.TriggeredBy.BuildId)/timeline?api-version=5.1"
echo $url
$result = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get
# filter the task's records by name
$taskResult = $result.records | where {$_.name -eq "MyTaskName"}
# calculate the totaltime of the newest build
$time = [datetime]$taskResult.finishTime - [datetime]$taskResult.startTime
$thisTaskTime= $time.TotalMinutes
# get the last build's Id
$lasturl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?definitions=$(Build.TriggeredBy.DefinitionId)&resultFilter=succeeded&`$top=2&api-version=5.1"
$buildResult =Invoke-RestMethod -Uri $lasturl -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get
#extract last buildId
$lastBuildId = $buildResult.value[1].id
#get the timeline of the last build
$timeUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$($lastBuildId)/timeline?api-version=5.1"
$lastResult =Invoke-RestMethod -Uri $timeUrl -Headers @{authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -ContentType "application/json" -Method get
#Caculate the totaltime of the last build task
# filter the task's records by name
$lastTaskResult = $lastResult.records | where {$_.name -eq "TaskName"}
$LastTime = [datetime]$lastTaskResult.finishTime - [datetime]$lastTaskResult.startTime
$lastTaskTime= $LastTime.TotalMinutes
#Store the result to varialbe isLonger
if($thisTaskTime -ge $lastTaskTime){ echo "##vso[task.setvariable variable=isLonger]True" }
Если вы хотите использовать azure уведомление по умолчанию, когда время выполнения задачи больше, чем в предыдущий раз. Вы можете добавить еще одну задачу сценария в конец конвейера, чтобы преднамеренно завершить работу конвейера, если время больше. А затем настроить уведомление о сбое сборки для вашего проекта.
if($(isLonger) -eq "True")
{
exit 1
}
- Боюсь, что по второму вопросу вы не можете просмотреть отчет напрямую в azure devops.
Вы можете использовать задачу копирования файлов , чтобы скопировать сгенерированный отчет, и использовать publi sh задачу сборки артефактов , чтобы загрузить отчет в azure сервер devops, с которого вы можете скачать напрямую из своей истории сборки.
Задание копирования файлов
![enter image description here](https://i.stack.imgur.com/B4MyJ.png)
Publi sh Задача артефакта сборки
![enter image description here](https://i.stack.imgur.com/UpyCP.png)
Затем вы можете загрузить файл отчета из пользовательского интерфейса сборки.
Go до Сборки в Конвейеры -> Выберите ваш конвейер -> Выберите последнюю сборку из История
![enter image description here](https://i.stack.imgur.com/qbduq.png)
Существуют и другие способы загрузки файла отчета в сборку, кроме задачи артефакта сборки Publi sh, с помощью оператора ##vso[task.addattachment]value
, ##vso[task.uploadfile]local file path
. Например, запустите приведенный ниже оператор в задаче сценария, чтобы добавить файл отчета в сборку.
##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]$(System.DefaultWorkingDirectory)\reportTempFolder\index.html
Пожалуйста, проверьте здесь для получения дополнительной информации.