2012-05-11 13 views
20

Stiamo usando la versione professionale di Teamcity 6.5.6, che mi dà la possibilità di eseguire un backup ma non vedo alcuna opzione per programmarlo in un momento particolare.Come pianificare i backup automatici in teamcity?

Non sono sicuro che questa versione di teamcity supporti anche i backup pianificati. Se non è possibile attraverso la GUI di Teamcity, mi chiedo se ci sono altre opzioni?

Qualcuno potrebbe aiutarmi?

Grazie.

+0

http://stackoverflow.com/questions/15980461/python-rest-teamcity-backup = lavoro Codice Python – webwesen

risposta

9

È possibile utilizzare REST API per eseguire il backup. In realtà utilizziamo TeamCity per eseguire una build pianificata a mezzanotte ogni giorno. Quella build chiama al resto api per fare il backup.

+0

Grazie. L'API REST dice che dovrei fare una richiesta POST al mio server teamcity con tutti i parametri richiesti. Se creo una build per questo in teamcity, che tipo di build runner dovrei usare? – kranthi

+0

@kranthi - abbiamo scritto un semplice script python e usato il runner della riga di comando. Qualunque linguaggio di scripting lo farà. –

+4

Grazie a questo suggerimento sono riuscito a creare una soluzione basata sull'API REST. Il codice sorgente è ospitato su github e qui c'è un post sul blog che descrive come funziona: http://daniellang.net/how-to-automate-teamcity-backups-using-its-rest-api/ –

17

Ho scritto Powershell script for TeamCity auto backups, che è possibile pianificare ed eseguire il backup.

Ecco il codice:

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 I am usando il tuo script. Grazie. –

+0

Dove va il file zip? –

+1

@PaulZahra, per impostazione predefinita i file di backup sono creati in /backup Ed ecco un collegamento come trovarlo https://confluence.jetbrains.com/display/TCD10/TeamCity+Data+Directory –

8

Se non si desidera scrivere programmi per svolgere il vostro compito, è sufficiente eseguire questo comando:

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

dove le stelle dovrebbero essere sostituiti con i dati di accesso TeamCity informazione.

In Windows, è possibile ottenere WGET come una parte del pacchetto Cygwin

+0

'wget' è anche incluso in [unxutils] (http://unxutils.sourceforge.net/) se si desidera un'opzione più leggera di Cygwin. Prendi entrambi [unxutils.zip] (http://unxutils.sourceforge.net/UnxUtils.zip) e [unxupdates.zip] (http://unxutils.sourceforge.net/UnxUpdates.zip); decomprimere i programmi di utilità, decomprimere gli aggiornamenti, spostare gli aggiornamenti nella cartella 'usr/local/wbin' per unxutils e quindi registrarlo sul proprio $ PATH. – Damon

+0

Per chiunque usi UnxUtils: i parametri '--user',' --password' e '--post-data' non sono accettati da WGET (non so se sono nel vero WGET Unix o no) . Prova a usare '--http-user' e' --http-passwd'. Non ho trovato un sostituto per '--post-data' nella guida di wget di UnxUtils. Inoltre, dove va il file risultante? – Brandon

5

Per chi vuole innescare costruisce da Mac OS (uso corridore "linea di comando" a 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

'arricciatura 'dovrebbe essere un'opzione per * (solo circa?) * Qualsiasi sistema operativo. Su Windows, è possibile ottenere ith tramite [msysgit] (http://msysgit.github.io/) che utilizza MinGW (http://www.mingw.org/), se si lascia che installi i comandi Git per tutti i comandi richiede, rendendo questo un candidato per tutti. Inoltre, secondo il manuale, 'arricciato 'imposta automaticamente la modalità di autenticazione di base, quindi è possibile eliminare' --basic' se si mantiene il comando semplice. YMMV quindi provalo sul tuo sistema operativo. – Damon

4

Noi eseguire maintainDB.cmd e pianificarlo con l'Utilità di pianificazione di Windows, è un comando a una riga e non richiede software aggiuntivo. maintainDB è completamente documentato nella documentazione di TeamCity.

+1

maintainDB richiede che il servizio TeamCity sia arrestato per poterlo utilizzare, ma è possibile arrestare e avviare il servizio dalla riga di comando – WhiteKnight

+1

Questa è (imo) di gran lunga la migliore risposta, principalmente perché non richiede il mantenimento dell'utente/password e perché utilizza uno strumento integrato super semplice – stijn

1

È inoltre possibile utilizzare la variabile d'ambiente per avere l'indirizzo del server volontà squadra della città al tempo di costruzione:

curl --basic --user user:pasword -X POST "%teamcity.serverUrl%/httpAuth/app/rest/server/backup?includeConfigs=true&includeDatabase=true&includeBuildLogs=true&fileName=ScheduledBackup" 
Problemi correlati