Задача: выполнять регулярный бэкап билд-конфигураций TeamCity, получать и хранить файл с бэкапом.
Простейший способ получить резервную копию содержимого сервера TeamCity - это зайти в админке в Administration - Backup, указать, что мы собираемся копировать и нажать Start Backup. В зависимости от количества билд-конфигураций, упаковка файла может занять несколько минут, а результат работы будет сохранен в указанную папку на сервере TeamCity.
К сожалению, этот билд-сервер не предоставляет "из коробки" функциональности по автоматизации снятия бэкапа. Поискав в сети, конечно же я наткнулся на широко известный PowerShell-скрипт от Ivan Leonenko, позволяющий запустить бэкапирование удаленно посредством отправки HTTP POST-запроса.
Вместо того, чтобы складывать бэкапы на той же машине, где развернут TeamCity (что совершенно неправильно) и писать службу по их миграции в надежное хранилище, мы решили сразу получать файл в свое распоряжение. Для получения файла достаточно GET-ом с той же авторизацией обратиться по адресу:
Кстати, скачать файл через PowerShell несложно, достаточно использовать командлет Invoke-WebRequest:
Простейший способ получить резервную копию содержимого сервера TeamCity - это зайти в админке в Administration - Backup, указать, что мы собираемся копировать и нажать Start Backup. В зависимости от количества билд-конфигураций, упаковка файла может занять несколько минут, а результат работы будет сохранен в указанную папку на сервере TeamCity.
К сожалению, этот билд-сервер не предоставляет "из коробки" функциональности по автоматизации снятия бэкапа. Поискав в сети, конечно же я наткнулся на широко известный PowerShell-скрипт от Ivan Leonenko, позволяющий запустить бэкапирование удаленно посредством отправки HTTP POST-запроса.
Вместо того, чтобы складывать бэкапы на той же машине, где развернут TeamCity (что совершенно неправильно) и писать службу по их миграции в надежное хранилище, мы решили сразу получать файл в свое распоряжение. Для получения файла достаточно GET-ом с той же авторизацией обратиться по адресу:
{server}/get/file/backup/{filename}поэтому наша доработка скрипта Ivan'a свелась к периодическому опросу этого URL и скачиванию файла (как подписаться на событие "бэкап готов" даже смотреть не стали).
Готовый скрипт на GitHub. Остается настроить периодический запуск скрипта через любой планировщик задач, и файлы с бэкапами начнут поступать в ваше распоряжение. Если собираетесь делать через SQL Server Agent - прочитайте предыдущую заметку, поскольку у агента свои причуды выполнения PowerShell-скриптов.
function Save-FileFromWeb() | |
{ | |
param( | |
[string] $url, | |
[string] $username, | |
[string] $password, | |
[string] $targetFile | |
) | |
$authInfo = $username + ":" + $password | |
$authInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::Default.GetBytes($authInfo)) | |
$Headers = @{ Authorization = "Basic $authInfo" } | |
Invoke-WebRequest -Uri $url -Headers $Headers -OutFile $targetFile | |
} |
Комментариев нет:
Отправить комментарий