Есть ли способ сохранить конвейерные запуски pullrequests на неопределенный срок?

#azure-devops

#azure-devops

Вопрос:

Наш проект находится в регулируемой области, и нам нужно показать, что результаты PR-тестирования были успешно проверены в случае аудитов даже 1,2 года спустя. Поэтому нам нужно, чтобы сборки PR-конвейера сохранялись и не удалялись.

Мне удалось сохранить сборку конвейера, связанную с основной веткой, используя защищенную политику хранения. Мне удалось сохранить сборку конвейера, связанную с выпуском.

Я не могу найти, как хранить PR-конвейеры дольше, чем на 30 дней:

введите описание изображения здесь

Моя единственная идея — вручную перейти и выбрать «Сохранить» в сборках.

Есть какие-либо подсказки?

Ответ №1:

Вы можете использовать обновление rest API для сборки. Пример PowerShell для сохранения всех сборок из одного определения сборки:

 $user = ""
$token = "<pat>" #https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devopsamp;tabs=preview-page

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$org = "<org_name>"
$teamProject = "<team_project_name>"
$buildDefId = "<build_definition_id>"

$restApiGetBuilds = "https://dev.azure.com/$org/$teamProject/_apis/build/builds?definitions=$buildDefIdamp;api-version=6.0"
$restApiPatchBuildTemplate = "https://dev.azure.com/$org/$teamProject/_apis/build/builds/{buildId}?api-version=6.0"

function InvokeGetRequest ($GetUrl)
{   
    return Invoke-RestMethod -Uri $GetUrl -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
}

function InvokePatchRequest ($GetUrl, $body)
{   
    return Invoke-RestMethod -Uri $GetUrl -Method Patch -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
}


$builds = InvokeGetRequest $restApiGetBuilds

foreach($build in $builds.value)
{
    $restApiPatchBuild = $restApiPatchBuildTemplate -replace "{buildId}", $build.id

    InvokePatchRequest $restApiPatchBuild '{"keepForever":true}'
}
 

Комментарии:

1. большое спасибо! Я бы надеялся, что AZD каким-то образом поддержит эту функциональность, но то, что вы прислали, — потрясающий хак! если никто ничего не добавит за короткое время, я отмечу это как ответ. Еще раз спасибо!

2. Привет @czioutas, если этот ответ полезен, не могли бы вы принять его в качестве ответа? Таким образом, это может помочь другим членам сообщества, у которых возникают те же проблемы, и мы могли бы заархивировать этот поток. Спасибо. Хорошего вам дня. 🙂

3. @VitoLiu-MSFT У меня не было времени протестировать его, но я пометил его сейчас как принятый, потому что я считаю, что основа есть и должна работать.