jenkins集成liquibase

一、前言

liquibase的功能非常强大,只需要按规则编写sql文件,就可以实现自动化的数据库更新,发布的时候就不用依赖人工去操作更新数据库,而且liquibase还具有数据库版本回滚功能,一旦发现新版本有问题,就可以进行回滚到老版本的操作,下面就将liquibase集成到jenkins的cicd中,实现全自动化的发布

二、部署

在github下载liquibase安装包:https://github.com/liquibase/liquibase/releases

在mysql官网下载连接器:https://dev.mysql.com/downloads/connector/j/

我这里分别下载的是liquibase-4.32.0.tar.gz和mysql-connector-j-8.0.33.tar.gz

放到部署jenkins的主机中解压

bash 复制代码
mkdir /opt/liquibase && cd /opt/liquibase
tar -zxvf liquibase-4.32.0.tar.gz
tar -zxvf mysql-connector-j-8.0.33.tar.gz
ls /opt/liquibase

配置变量

bash 复制代码
vi /etc/profile
#在末尾添加以下内容
PATH=$PATH:/opt/liquibase/liquibase

执行命令生效
source /etc/profile

验证是否有效
liquibase --help

编写liquibase配置文件

bash 复制代码
vi liquibase.properties
#在文件中添加以下内容

#连接器类型
driver=com.mysql.cj.jdbc.Driver
#mysql连接器压缩包解压后路径下的可执行jar包路径
classpath=/opt/liquibase/mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar
#数据库用户名
username=xxxx
#数据库密码
password=xxxx

将配置文件上传到jenkins的凭证配置中

Manage Jenkins>Credentials>Global(全局)>Add Credentials

选择secret file类型并上传刚刚编辑的liquibase配置文件

在jenkins pipeline中加入liquibase更新数据库的步骤

bash 复制代码
pipeline {
  agent any
  environment {
    database_name= "demeter_foundation"
    prd_mysql_url= "10.1.60.8:6033"
    test_mysql_url= "10.1.60.5:6033"
  }
  stages {
    stage('change mysql') {
      parallel {
        stage('change test mysql') {
          when {
            expression {params.status == 'deploy' && env.gitlabBranch != null }
          }
          steps {   #使用withCredentials调用凭证中的liquibase配置
            withCredentials([file(credentialsId: 'liquibase_conf', variable: 'LIQUIBASE_CONF')]) {
                sh '''   #以下liquibase命令指定了配置文件,数据库连接,还有变更的sql文件路径
                  /opt/liquibase/liquibase --defaultsFile=${LIQUIBASE_CONF} --url=jdbc:mysql://${test_mysql_url}/${database_name} --changeLogFile=db/${database_name}/update/change_mysql.sql update
                '''
            }
          }
        }
        stage('change prd mysql') {
          when {
            expression {params.status == 'deploy' && env.gitlabBranch == null }
          }
          steps {
            withCredentials([file(credentialsId: 'liquibase_conf', variable: 'LIQUIBASE_CONF')]) {
                sh '''
                  /opt/liquibase/liquibase --defaultsFile=${LIQUIBASE_CONF} --url=jdbc:mysql://${prd_mysql_url}/${database_name} --changeLogFile=db/${database_name}/update/change_mysql.sql update
                '''
            }
          }
        }
      }
    }
  }

有一个注意点是使用了proxysql+mysql mgr集群会导致出现报错,报错的原因是找不到主键,需要在liquibase创建的两张表中设置主键即可解决

以上的sql文件包含在代码仓库中由开发提交,只需在执行liquibase命令时使用--changeLogFile指定sql文件路径即可

以上配置没有包含回滚命令,回滚需要开发特殊配置sql文件,并且搭配回滚命令rollback命令

更多命令参考:Rollback Commands

相关推荐
九皇叔叔2 小时前
Ubuntu 22.04 版本常用设置
linux·运维·ubuntu
杨云龙UP3 小时前
ODA登录ODA Web管理界面时提示Password Expired的处理方法_20260423
linux·运维·服务器·数据库·oracle
songx_994 小时前
Linux基础2
linux·运维·服务器
陈皮糖..5 小时前
27 届运维实习笔记|第三、四周:从流程熟练到故障排查,企业运维实战深化
运维·笔记·sql·nginx·ci/cd·云计算·jenkins
莫白媛5 小时前
Linux在限制敏感命令下的修改用户密码小白版
linux·运维·服务器
hhb_6186 小时前
C Shell 基础语法与高阶运维实战指南
运维·c语言·chrome
爱学习的小囧7 小时前
VMware vCenter Server 9.0.2.0 资源详解+完整部署教程+下载指南+常见问题
运维·服务器·esxi·vmware·虚拟化·esxi9.0.2.0
贾斯汀玛尔斯8 小时前
每天学一个算法--单调栈(Monotonic Stack)
运维·服务器·算法
hhb_6188 小时前
Linux底层运维自动化挂载与磁盘分区实战指南
linux·运维·自动化
SpikeKing8 小时前
Server - 配置 SQLBot 智能问数项目
运维·server·sqlbot