- Собрать образ liquibase и запускать как
initContainer
. - При откате использовать последнюю версию и помимо
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}"
}
]
- Миграция v1.0: Создание таблицы users
- Миграция v2.0: Изменение поля id на тип IDENTITY
- Миграция v3.0: Создание таблицы address и перенесение данных из поля location
- Миграция v4.0: Изменение типа колонки status на enum
- Миграция v5.0: Партиционирование таблицы users
- Миграция v6.0: Увеличение поля login до 80 символов и добавление новых пользователей
# create local cluster
$ kind create cluster --config kind.yml
$ kubectl apply -f https://raw.githubusercontent.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