Gymterview
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 как обязательные шаги перед продакшен-деплоем.