middle
Как использовать Liquibase в CI/CD пайплайне?
Liquibase интегрируется в CI/CD двумя основными способами: автоматический запуск при старте приложения (Spring Boot) или отдельный шаг в пайплайне.
Основные стратегии
1. Миграции при старте приложения (Spring Boot)
Самый простой подход — Liquibase запускается автоматически при старте приложения. Подходит для большинства проектов.
Пример
spring:
liquibase:
enabled: true
change-log: classpath:db/changelog/db.changelog-master.xml
2. Отдельный шаг в пайплайне
Миграции выполняются отдельным шагом до деплоя приложения. Подходит для сложных сценариев и банковских систем.
Пример для GitLab CI
stages:
- validate
- migrate
- deploy
validate-migrations:
stage: validate
script:
- liquibase --changelog-file=db/changelog/db.changelog-master.xml validate
- liquibase --changelog-file=db/changelog/db.changelog-master.xml status
apply-migrations:
stage: migrate
script:
- liquibase --changelog-file=db/changelog/db.changelog-master.xml
--url=$DB_URL
--username=$DB_USER
--password=$DB_PASSWORD
update
only:
- main
deploy-app:
stage: deploy
script:
- ./deploy.sh
only:
- main
Maven-плагин
Конфигурация Maven-плагина
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<configuration>
<changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>
<url>${db.url}</url>
<username>${db.username}</username>
<password>${db.password}</password>
</configuration>
</plugin>
Команды:
Пример
mvn liquibase:update
mvn liquibase:rollback -Dliquibase.rollbackCount=1
mvn liquibase:status
mvn liquibase:diff
Gradle-плагин
Конфигурация Gradle-плагина
plugins {
id 'org.liquibase.gradle' version '2.2.0'
}
liquibase {
activities {
main {
changelogFile 'src/main/resources/db/changelog/db.changelog-master.xml'
url project.ext.dbUrl
username project.ext.dbUser
password project.ext.dbPassword
}
}
}
Рекомендации для CI/CD
- Всегда запускать validate перед применением миграций — это поймает синтаксические ошибки и проблемы с checksum
- Использовать updateSQL для ревью SQL перед применением на production
- Ставить теги перед каждым релизом для возможности быстрого отката
- Отделять миграцию от деплоя — сначала накатить миграции, потом развернуть новую версию приложения
- Использовать отдельного пользователя БД для Liquibase с правами на DDL, а приложение подключать пользователем с ограниченными правами
- Тестировать миграции на чистой БД — в CI запускать полный цикл миграций на пустой базе
На собеседовании: интервьюер хочет понять, как вы деплоите миграции в реальном проекте. Важно обосновать выбор стратегии. Частая ошибка — не упомянуть validate и updateSQL как обязательные шаги перед продакшен-деплоем.