Заметки консультанта

Шамрай Александр Владимирович

Archive for Февраль 2020

Восстановление Git репозиториев в Azure DevOps через Rest Api и PowerShell

Posted by Shamrai Alexander на 20 февраля, 2020

Удаление репозиториев Git в Azure DevOps не приводит к их полному удалению из командного проекта. Удаленные репозитории перемещаются в корзину проекта, но пока нет никаких инструментов для работы с ней. Однако можно воспользоваться функциями Rest Api для того, чтобы:

  1. Узнать какие репозитории были удалены
  2. Восстановить нужные репозитории
  3. Очистить корзину окончательно

Для работы с Rest Api воспользуемся PowerShell, который позволяет довольно быстро выполнять вызовы и разбирать их результаты. Перед выполнением запросов необходимо знать имя командного проекта и имя организации, а также необходимо сгенерировать Personal Access Token. Эти параметры нужно будет установить в скриптах ниже.

Перед тем как выполнить восстановление репозитория, нужно убедиться, что он находится в корзине проекта. Для этого можно воспользоваться следующим вызовом: Get Recycle Bin Repositories. Далее в результирующем списке можно выполнить поиск необходимого репозитория. Пример просмотра корзины (скрипт GetRecycleBinRepositories.ps1):

$listDeletedRepo = «https://dev.azure.com/$org/$teamProject/_apis/git/recycleBin/repositories?api-version=5.1-preview.1″

$resultDeletedRepo = Invoke-RestMethod -Uri $listDeletedRepo -Method Get -ContentType «application/json» -Headers @{Authorization=(«Basic {0}» -f $base64AuthInfo)}

foreach ($repo in $resultDeletedRepo.value)

{

    Write-Host «=============================================»

    Write-Host «Id :» $repo.id

    Write-Host «Name:» $repo.name

}

Для восстановления репозитория нужно выполнить следующую команду: Restore Repository From Recycle Bin. В этой функции нужно становить признак deleted в значение false. Пример восстановления репозитория (скрипт RestoreRepositoryFromRecycleBin.ps1):

$restoreRepo = «https://dev.azure.com/$org/$teamProject/_apis/git/recycleBin/repositories/» + $repoId + «?api-version=5.1-preview.1»

$restoreBody = «{deleted:false}»

$resultrestoredRepo = Invoke-RestMethod -Uri $restoreRepo -Method Patch -ContentType «application/json» -Headers @{Authorization=(«Basic {0}» -f $base64AuthInfo)} -Body $restoreBody

Write-Host $resultrestoredRepo

Если репозиторий не нужен, то его можно удалить окончательно через: Delete Repository From Recycle Bin. При этом здесь нужно передать идентификатор репозитория, который можно узнать через функцию Get Recycle Bin Repositories. Пример удаления репозитория (скрипт для очистки корзины DeleteRepositoriesFromRecycleBin.ps1)

$hardDeleteRepo = «https://dev.azure.com/$org/$teamProject/_apis/git/recycleBin/repositories/» + $repo.id + «?api-version=5.1-preview.1»

Invoke-RestMethod -Uri $hardDeleteRepo -Method Delete -ContentType «application/json» -Headers @{Authorization=(«Basic {0}» -f $base64AuthInfo)}

Write-Host «Deleted repo:» $repo.name

Posted in azure, devops, Microsoft | Отмечено: , , , | Leave a Comment »