Skip to content

Latest commit

 

History

History
123 lines (97 loc) · 5.29 KB

README.md

File metadata and controls

123 lines (97 loc) · 5.29 KB

Build project pre-commit

Database migration

Реализация

  1. Собрать образ liquibase и запускать как initContainer.
  2. При откате использовать последнюю версию и помимо helm rollback <release>, запускать job для отката до тега liquibase rollback --tag=$ROLLBACK_TAG.
$ docker run --rm \
    --network database-migration \
    romanowalex/liquibase-container:latest \
    rollback --tag=v3.0 \
    --url=jdbc:postgresql://postgres:5432/migration \
    --username=program \
    --password=test

Прямые и обратные операции

Операция Revert
CREATE TABLE (VIEW, INDEX, FUNCTION, TRIGGER, SEQUENCE) DROP
ADD COLUMN DROP COLUMN
ALTER COLUMN ALTER COLUMN
ADD CONSTRAINT ... DROP CONSTRAINT
ALTER ... RENAME TO ... ALTER ... RENAME TO ...
DROP TABLE (VIEW, FUNCTION, TRIGGER, SEQUENCE) CREATE
DROP COLUMN (NOT NULL) ADD COLUMN, UPDATE ... SET ..., ALTER COLUMN SET NOT NULL
DROP CONSTRAINT DELETE ... (records, which not meet constraint), CREATE CONSTRAINT
INSERT DELETE (can leave unmodified, if doesn't affect process)
UPDATE UPDATE (can leave unmodified, if doesn't affect process)
DELETE, TRUNCATE INSERT (if possible)

Тестовые данные

Запрос на получение версии сервиса

Request

GET http://localhost:8080/api/v1/version

Response

{
  "version": "${git.build.version}",
  "commit": "${git.commit.id.abbrev}",
  "time": "${git.commit.time}"
}

Запрос на получение данных из БД

Request

GET http://localhost:8080/api/v1/users

Response

[
  {
    "name": "${user.name}",
    "status": "${user.status}",
    "location": "${user.location}"
  }
]

Миграции

  1. Миграция v1.0: Создание таблицы users
  2. Миграция v2.0: Изменение поля id на тип IDENTITY
  3. Миграция v3.0: Создание таблицы address и перенесение данных из поля location
  4. Миграция v4.0: Изменение типа колонки status на enum
  5. Миграция v5.0: Партиционирование таблицы users
  6. Миграция v6.0: Увеличение поля login до 80 символов и добавление новых пользователей

Тестирование в кластере k8s

# create local cluster
$ kind create cluster --config kind.yml
$ kubectl apply -f https://github.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml

# install required repos
$ helm repo add romanow https://romanow.github.io/helm-charts/
$ helm repo update

# install postgres
$ helm install postgres romanow/postgres --values postgres/values.yaml

# install service
$ helm upgrade \
    migration-application \
    romanow/java-service \
    --values=k8s/migration-application/values.yaml \
    --set image.tag="$IMAGE_VERSION" \
    --set ingress.name=k8s \
    --set ingress.domain=romanow-alex.ru \
    --description "$IMAGE_VERSION" \
    --install \
    --wait

# rollback migration
$ helm install \
    --generate-name \
    romanow/common-job \
    --values=k8s/rollback-job/values.yaml \
    --set rollbackTag="$VERSION" \
    --wait

# rollback revision
$ helm rollback migration-application "$REVISION" --wait