2012-05-11 3 views
20

Мы используем профессиональную версию Teamcity 6.5.6, которая дает мне возможность запускать резервную копию, но я не вижу возможности планировать ее в определенное время.Как запланировать автоматическое резервное копирование в teamcity?

Я не уверен, поддерживает ли эта версия teamcity даже запланированные резервные копии. Если это невозможно благодаря графическому интерфейсу teamcity, интересно, есть ли другой вариант?

Не могли бы вы помочь?

Спасибо.

+0

http://stackoverflow.com/questions/15980461/python-rest-teamcity-backup = рабочий Код Python – webwesen

ответ

9

Чтобы запустить резервное копирование, вы можете использовать REST API. Мы фактически используем TeamCity для запуска запланированной сборки в полночь каждый день. Эта сборка делает вызов для остальных api для резервного копирования.

+0

Спасибо. API REST говорит, что я должен сделать запрос POST на сервер teamcity со всеми необходимыми параметрами. Если я настрою сборку для этого в teamcity, какой тип бегуна я должен использовать? – kranthi

+0

@kranthi - мы написали простой скрипт python и использовали runner командной строки. Любой скриптовый язык будет делать. –

+4

Благодаря этому предложению я смог построить решение на основе REST API. Исходный код размещен на github, и вот сообщение в блоге, описывающее, как он работает: http://daniellang.net/how-to-automate-teamcity-backups-using-its-rest-api/ –

17

Я написал Powershell script for TeamCity auto backups, в котором вы можете запланировать и запустить резервное копирование.

Вот код:

function Execute-HTTPPostCommand() { 
    param(
     [string] $url, 
     [string] $username, 
     [string] $password 
    ) 

    $authInfo = $username + ":" + $password 
    $authInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::Default.GetBytes($authInfo)) 

    $webRequest = [System.Net.WebRequest]::Create($url) 
    $webRequest.ContentType = "text/html" 
    $PostStr = [System.Text.Encoding]::Default.GetBytes("") 
    $webrequest.ContentLength = $PostStr.Length 
    $webRequest.Headers["Authorization"] = "Basic " + $authInfo 
    $webRequest.PreAuthenticate = $true 
    $webRequest.Method = "POST" 

    $requestStream = $webRequest.GetRequestStream() 
    $requestStream.Write($PostStr, 0, $PostStr.length) 
    $requestStream.Close() 

    [System.Net.WebResponse] $resp = $webRequest.GetResponse(); 
    $rs = $resp.GetResponseStream(); 
    [System.IO.StreamReader] $sr = New-Object System.IO.StreamReader -argumentList $rs; 
    [string] $results = $sr.ReadToEnd(); 

    return $results; 
} 

function Execute-TeamCityBackup() { 
    param(
     [string] $server, 
     [string] $addTimestamp, 
     [string] $includeConfigs, 
     [string] $includeDatabase, 
     [string] $includeBuildLogs, 
     [string] $includePersonalChanges, 
     [string] $fileName 
    ) 
    $TeamCityURL = [System.String]::Format("{0}/httpAuth/app/rest/server/backup?addTimestamp={1}&includeConfigs={2}&includeDatabase={3}&includeBuildLogs={4}&includePersonalChanges={5}&fileName={6}", 
              $server, 
              $addTimestamp, 
              $includeConfigs, 
              $includeDatabase, 
              $includeBuildLogs, 
              $includePersonalChanges, 
              $fileName); 

    Execute-HTTPPostCommand $TeamCityURL "USER" "PASSWORD" 
} 

$server = "http://YOUR_SERVER" 
$addTimestamp = $true 
$includeConfigs = $true 
$includeDatabase = $true 
$includeBuildLogs = $true 
$includePersonalChanges = $true 
$fileName = "TeamCity_Backup_" 

Execute-TeamCityBackup $server $addTimestamp $includeConfigs $includeDatabase $includeBuildLogs $includePersonalChanges $fileName 
+0

+1 Я используя ваш скрипт. Благодарю. –

+0

Где находится zip-файл? –

+1

@PaulZahra, по умолчанию файлы резервных копий создаются в <Каталог данных TeamCity>/backup. И вот ссылка, как его найти. Https://confluence.jetbrains.com/display/TCD10/TeamCity+Data+Directory –

8

Если вы не хотите писать программы для выполнения вашей задачи, просто запустите эту команду:

wget --user=*** --password=*** "http://localhost:8085/httpAuth/app/rest/server/backup?includeConfigs=true&includeDatabase=true&includeBuildLogs=true&fileName=ScheduledBackup-" --post-data= 

где звезды должны быть заменены вашим логином TeamCity Информация.

В Windows вы можете получить WGET как часть Cygwin пакета

+0

'wget' также включен в [unxutils] (http://unxutils.sourceforge.net/), если вам нужен более легкий вес, чем Cygwin. Получите оба [unxutils.zip] (http://unxutils.sourceforge.net/UnxUtils.zip) и [unxupdates.zip] (http://unxutils.sourceforge.net/UnxUpdates.zip); разархивировать utils, разархивировать обновления, переместить обновления в папку 'usr/local/wbin' для unxutils, а затем зарегистрировать ее на $ PATH. – Damon

+0

Для тех, кто использует UnxUtils: параметры '--user',' --password' и '-post-data' не принимаются WGET (я не знаю, находятся ли они в фактическом WGET Unix или нет) , Попробуйте использовать '--http-user' и' -http-passwd'. Не нашел замену '-post-data' в справке wget от UnxUtils. Кроме того, где происходит результирующий файл? – Brandon

5

Для тех, кто хочет запустить строит из Mac OS (использование «командной строки» бегун на TeamCity):

curl --basic --user user:password -X POST "http://team.city.server:8111/httpAuth/app/rest/server/backup?includeConfigs=true&includeDatabase=true&includeBuildLogs=true&fileName=ScheduledBackup" 
+0

'curl' должен быть опцией для * (примерно?) * Любой ОС. В Windows вы можете получить ith через [msysgit] (http://msysgit.github.io/), который использует MinGW (http://www.mingw.org/), если вы позволите ему установить команды Git для всей команды подсказывает, что делает это кандидатом для всех. Кроме того, согласно руководству, 'curl' по умолчанию используется в базовом режиме auth, поэтому вы можете, возможно, сбросить' -basic', если держать команду простой. YMMV так протестируйте его на своей ОС. – Damon

4

Мы запустите службу поддержкиDB.cmd и планируйте ее с помощью Планировщика задач Windows, это одна строка и не требует дополнительного программного обеспечения. maintainDB полностью задокументирован в документации TeamCity.

+1

maintainDB требует, чтобы служба TeamCity была остановлена ​​для ее использования, но можно остановить и запустить службу из командной строки. – WhiteKnight

+1

Это (imo), безусловно, лучший ответ, главным образом потому, что он не требует хранения пользовательских/пароль, и, поскольку он использует супер простой встроенный инструмент – stijn

1

Вы также можете использовать переменную окружения, чтобы иметь команды городской адрес сервера решительность во время сборки:

curl --basic --user user:pasword -X POST "%teamcity.serverUrl%/httpAuth/app/rest/server/backup?includeConfigs=true&includeDatabase=true&includeBuildLogs=true&fileName=ScheduledBackup" 
Смежные вопросы