Перейти к основному содержимому

Миграции базы данных

Команда 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 использует тот же файл конфигурации (а значит, и ту же базу данных), что и сервер. См. Как находится файл конфигурации.