Add gitlab-ci.yml

This commit is contained in:
pashko 2024-06-18 14:20:51 +08:00
commit 9d603036af

118
gitlab-ci.yml Normal file
View File

@ -0,0 +1,118 @@
stages:
- cleanup.views
- diff.tables
- diff.views
# -----------------------------------------------------------------------------------------
.functions: &functions |
function isUpToDateDiffTables() {
status=$(mvn liquibase:status -Denv=diff.tables)
if [[ $status == *'is up to date'* ]]; then
echo "database is already up to date" & exit 0
fi;
}
# -----------------------------------------------------------------------------------------
.ssh_key_job: &ssh_key_job
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- cp "$SSH_KNOWN_HOSTS" ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_rsa
# -----------------------------------------------------------------------------------------
cleanup.views-job:
stage: cleanup.views
before_script:
- *ssh_key_job
script:
- mvn liquibase:diff -Denv=cleanup.views -X > cleanup.views/liquibase_log/liquibase_log_diff.view-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- mvn liquibase:update -Denv=cleanup.views
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: manual
artifacts:
paths:
- cleanup.views/changelog-dir/diff.views.changelog/view-diifChangeLog-${CI_JOB_NAME}_${CI_PIPLINE_ID}.sql
- cleanup.views/liquibase_log/liquibase_log_diff.view-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
expire_in: 4 week
# -----------------------------------------------------------------------------------------
diff.tables-job:
stage: diff.tables
before_script:
- *ssh_key_job
- *functions
script:
- mvn liquibase:diff -Denv=diff.tables -X > diff.tables/liquibase_log/liquibase_log_diff-$(date +%Y%m%d%H%M%S).log
- sed -i 's/JSONB DEFAULT \x7B\x7D/\jsonb DEFAULT \x27\x7B\x7D\x27/g' diff.tables/changelog-dir/diff-changelog/*.sql
- sed -i 's/JSONB DEFAULT \[\]/\jsonb DEFAULT \x27\[\]\x27/g' diff.tables/changelog-dir/diff-changelog/*.sql
- sed -i 's/\x220001-01-01T00:00:00+00:00\x22/\x27\[\x220001-01-01T00:00:00+00:00\x22\]\x27/g' diff.tables/changelog-dir/diff-changelog/*.sql
- sed -i 's/JSONB DEFAULT \x7B\x7D/\jsonb DEFAULT \x27\x7B\x7D\x27\x3A\x3Ajsonb/g' diff.tables/changelog-dir/diff-changelog/*.sql
- sed -i 's/JSONB DEFAULT \[\]/\jsonb DEFAULT \x27\[\]\x27\x3A\x3Ajsonb/g' diff.tables/changelog-dir/diff-changelog/*.sql
- sed -i 's/\x3F/\x3F\x3F/g' diff.tables/changelog-dir/diff-changelog/*.sql
- mv diff.tables/changelog-dir/diff-changelog/*.sql diff.tables/changelog-dir/update-changelog/
- mvn liquibase:update -Denv=diff.tables -X > diff.tables/liquibase_log/liquibase_log_update.tables-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- mvn liquibase:history -Denv=diff.tables > diff.tables/liquibase_log/liquibase_log_history.tables-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: manual
artifacts:
paths:
- diff.tables/changelog-dir/diff.changelog/tables-diffChangeLog-${CI_JOB_NAME}_${CI_PIPLINE_ID}.sql
- diff.tables/liquibase_log/liquibase_log_history.tables-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- diff.tables/liquibase_log/liquibase_log_history.tables-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
expire_in: 4 week
# -----------------------------------------------------------------------------------------
diff.views-job:
stage: diff.views
before_script:
- *ssh_key_job
script:
- mvn liquibase:diff -Denv=diff.views -X > diff.views/liquibase_log/liquibase_log_diff.views-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- mvn liquibase:history -Denv=diff.views > diff.views/liquibase_log/liquibase_log_history.views-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- sed -i 's/JSONB DEFAULT \x7B\x7D/\jsonb DEFAULT \x27\x7B\x7D\x27/g' diff.views/changelog-dir/diff-changelog/*.sql
- sed -i 's/JSONB DEFAULT \[\]/\jsonb DEFAULT \x27\[\]\x27/g' diff.views/changelog-dir/diff-changelog/*.sql
- sed -i 's/\x220001-01-01T00:00:00+00:00\x22/\x27\[\x220001-01-01T00:00:00+00:00\x22\]\x27/g' diff.views/changelog-dir/diff-changelog/*.sql
- sed -i 's/JSONB DEFAULT \x7B\x7D/\jsonb DEFAULT \x27\x7B\x7D\x27\x3A\x3Ajsonb/g' diff.views/changelog-dir/diff-changelog/*.sql
- sed -i 's/JSONB DEFAULT \[\]/\jsonb DEFAULT \x27\[\]\x27\x3A\x3Ajsonb/g' diff.views/changelog-dir/diff-changelog/*.sql
- sed -i 's/\x3F/\x3F\x3F/g' diff.views/changelog-dir/diff-changelog/*.sql
- mv diff.views/changelog-dir/diff-changelog/*.sql diff.views/changelog-dir/update-changelog/
- mvn liquibase:update -Denv=diff.views -X > diff.views/liquibase_log/liquibase_log_update.views-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- mvn liquibase:history -Denv=diff.views > diff.views/liquibase_log/liquibase_log_history.views-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- rm -rf diff.views/changelog-dir/update-changelog/*.sql
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: manual
artifacts:
paths:
- diff.views/liquibase_log/liquibase_log_diff.views-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- diff.views/liquibase_log/liquibase_log_update.views-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
- diff.views/liquibase_log/liquibase_log_history.views-${CI_JOB_NAME}_${CI_PIPLINE_ID}.log
expire_in: 4 week
# -----------------------------------------------------------------------------------------