TeamCity: резервное копирование сервера с помощью утилиты maintainDB

Автор: | 12/02/2013
 

teamcity_logoTeamCity состоит из двух частей — директории/файлы в файловой системе, и база данных.

Рабочая директория сервера:

$ tree -d -L 1 -a .BuildServer/
.BuildServer/
├── config
├── lib
├── plugins
└── system

Располагается, как правило, в домашней директории пользователя, от которого работает сам TeamCity, например:

$ pwd
/home/teamcity/.BuildServer

Подробнее — в статье TeamCity: структура и описание рабочей директории сервера — BuildServer.

База данных (в случае использования базы HSQLDB) представлена скриптами:

$ ls -lh ~/.BuildServer/system/ | grep build
-rw-rw-r--   1 teamcity teamcity  16M Nov 30 15:27 buildserver.data
-rw-rw-r--   1 teamcity teamcity   16 Nov 30 15:57 buildserver.lck
-rw-rw-r--   1 teamcity teamcity  49K Nov 30 15:56 buildserver.log
-rw-rw-r--   1 teamcity teamcity   85 Nov 30 15:29 buildserver.properties
-rw-rw-r--   1 teamcity teamcity  36K Nov 30 15:29 buildserver.script
drwxrwxr-x   2 teamcity teamcity 4.0K Nov 30 15:29 buildserver.tmp

О назначении каждого скриптов можно прочитать тут>>>.

TeamCity поддерживает три способа создания резервной копии:

— из веб-интерфейса;
— с помощью командной строки и утилиты maintainDB;
— полностью ручной.

Мы будем использовать скрипт maintainDB.sh. Располагается он в каталоге /bin директории, в которую был установлен TeamCity.

Для получения справки — выполните:

$ ./TeamCity/bin/maintainDB.sh

без команд и опций.

Для создания архива сервера полезными будут следующие опции команды backup:

-S <source-db-settings> — в случае, если используется база данных не HSQLDB, или используется не стандартный файл настроек — укажите его при помощи этой опции;
-F <backup-archive-file> — путь и имя архива (без расширения), в который мы будем сохраняться наш бекап;
-M — добавить указание времени создания бекапа к его имени;
-C — включить в бекап конфигурации проектов;
-D — включить в бекап базу данных;
--basic — добавить настройки билдов, базу данных и плагины в бекап;
--all — то же самое,  плюс персональные изменения и логи.

Полное описание процесса создания backup-копии сервера TeamCItyтут>>>.

Что НЕ будет сохранено в бекапе по-умолчанию:

— артефакты билдов;
— данные сторонних плагинов;
— все ручные изменения;
— лог-файлы.

Выполним полное копирование в файл.

Находясь в каталоге bin, выполняем:

$ ./maintainDB.sh backup --all -M -F /home/teamcity/backups/TeamCity

В случае ошибки такого вида:

Failed: Unexpected exception SQLException/HsqlException: SQL error when doing: Connecting to HSQL2
SQL query: connect
SQL exception: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@fb91050c[file =/home/teamcity/.BuildServer/system/buildserver.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2013-11-30 13:31:11 heartbeat - read: -2443 ms.

Остановите сервер:

$ ./teamcity-server.sh stop

Ошибка может возникать, если имеются отложенные задания, или задания в очереди.

Так же — лучше остановить и build-агент, если он работает на этом же хосте:

$ ~/TeamCity/buildAgent/bin/agent.sh stop

Снова запускаем:

$ ./maintainDB.sh backup --all -M -F /home/teamcity/backups/TeamCity

TeamCity maintenance tool. Copyright 2013 JetBrains s.r.o. All Rights Reserved.

Command line arguments: backup --all -M -F /home/teamcity/backups/TeamCity
TeamCity Data Directory path is determined using the user home directory
Using TeamCity data directory: /home/teamcity/.BuildServer
Using internal database.
Using source database
database type: HSQLDB2
database driver: <not specified>
connection: jdbc:hsqldb:file:/home/teamcity/.BuildServer/system/buildserver
[...]
Exporting TeamCity data directory: Exporting build logs
Exporting TeamCity data directory: Exporting personal changes
Finalizing export...
Export has completed successfully.
Backup file created: /home/teamcity/backups/TeamCity_20131130_152705.zip
Backup finished
Done.

Проверим наличие архива:

$ file /home/teamcity/backups/TeamCity_20131130_152705.zip
/home/teamcity/backups/TeamCity_20131130_152705.zip: Zip64 archive data, at least v3.0 to extract

Запускаем сервер:

$ ./teamcity-server.sh start

Готово, резервное копирование TeamCity вместе с базой данных завершено.