Миграции базы данных
Команда semaphore migrate обновляет или откатывает схему базы данных Semaphore
до состояния, соответствующего заданной версии Semaphore. Используйте её при
обновл ении и понижении версии.
semaphore migrate --help
Запускать migrate вручную требуется редко. semaphore server, semaphore setup
и все остальные команды CLI, работающие с базой данных, автоматически применяют
ожидающие миграции перед выполнением. migrate нужна для применения миграций без
запуска сервера или для отката.
Всегда делайте резервную копию базы данных перед применением или откатом миграций.
Применение миграций
Применить все ожидающие миграции и привести базу данных в актуальное состояние:
semaphore migrate --config /path/to/config.json
Применить миграции только до определённой версии:
semaphore migrate --apply-to 2.15.1
Откат миграций
Отменить миграции до предыдущей версии:
semaphore migrate --undo-to 2.13
Указывайте версию Semaphore, до которой вы понижаетесь. Бинарный файл, которым
вы запускаете migrate, должен знать обо всех отменяемых миграциях, поэтому
запускайте его более новым бинарным файлом до установки старого.
Опции
| Флаг | Описание |
|---|---|
--apply-to <version> | Применить миграции до этой версии включительно (например 2.15 или 2.14.4). |
--undo-to <version> | Откатить миграции до этой версии. |
--apply-to и --undo-to взаимоисключающие; указание обоих — ошибка.
Без этих флагов применяются все ожидающие миграции.
По завершении команда выводит использованное подключение к базе данных.
semaphore migrate по-прежнему принимает --err-log-size, --skip-task-output и
--merge-existing-users для обратной совместимости, но начиная с 2.19 они не
имеют эффекта. Они относились к импорту из BoltDB, описанному ниже.
Миграция с BoltDB на SQLite/MySQL/PostgreSQL
Доступно только в версиях 2.17 и 2.18
BoltDB объявлена устаревшей начиная с версии 2.16, а поддержка удалена в
версии 2.19. Флаг --from-boltdb и переменная окружения
SEMAPHORE_MIGRATE_FROM_BOLTDB больше не существуют в 2.19+, а semaphore setup
отказывается настраивать базу данных BoltDB.
Если вы всё ещё используете BoltDB, выполните миграцию до обновления на 2.19 или новее. Установите Semaphore 2.17 или 2.18, выполните описанную ниже миграцию и только затем обновляйтесь до более новой версии.
Для миграции сначала установите Semaphore версии 2.17 или 2.18, затем настройте
целевую базу данных (SQLite, MySQL или PostgreSQL) в вашем config.json. После
эт ого выполните следующую команду, чтобы импортировать все данные из старого
файла BoltDB в новую базу данных:
semaphore migrate --from-boltdb /path/to/boltdb/file --config /path/to/config.json
Команда читает все проекты, шаблоны, inventory, репозитории, ключи, пользователей и историю задач из BoltDB и записывает их в базу данных, указанную в текущей конфигурации Semaphore. Исходный файл BoltDB не изменяется.
Дополнительные аргументы (только 2.17 и 2.18):
| Флаг | Описание |
|---|---|
--err-log-size <n> | Максимальное количество строк с ошибками, отображаемых в выводе. |
--skip-task-output | Не импортировать вывод задач. |
--merge-existing-users | Переиспользовать существующих пользователей, найденных по имени пользователя, вместо ошибки при конфликте. |
Если вы используете Docker-контейнер Semaphore UI, можно задать переменную
окружения SEMAPHORE_MIGRATE_FROM_BOLTDB, чтобы автоматически импортировать
существующую базу данных BoltDB. Импорт выполняется только один раз, при первом
запуске контейнера. Пример:
docker run --name semaphore \
-p 3000:3000 \
-e SEMAPHORE_DB_DIALECT=sqlite \
-e SEMAPHORE_ADMIN=admin \
-e SEMAPHORE_ADMIN_PASSWORD=changeme \
-e SEMAPHORE_ADMIN_NAME="Admin" \
-e SEMAPHORE_MIGRATE_FROM_BOLTDB=/var/lib/semaphore/database.boltdb \
-e SEMAPHORE_ADMIN_EMAIL=admin@localhost \
-v semaphore_data:/var/lib/semaphore \
-d semaphoreui/semaphore:v2.18.2
Устранение неполадок
- Если миграция завершилась ошибкой, изучите логи и убедитесь, что бинарный файл CLI той же версии, что и сервер Semaphore.
- Убедитесь, что CLI использует тот же файл конфигурации (а значит, и ту же базу данных), что и сервер. См. Как находится файл конфигурации.