在某些情况下, 我们可能需要通过jenkins连接数据库做一些数据的持久化操作
以往安装mysql数据库都是在网上先找的安装教程,捣鼓半天才能安装上。后来发现通过docker安装mysql好简单,所以本次通过docker来安装mysql。
安装docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo sudo yum-config-manager --enable docker-ce-test sudo yum-config-manager --disable docker-ce-edge sudo yum makecache fast sudo yum install docker-ce-18.09.9 #开机启动docker sudo systemctl enable docker #启动docker sudo systemctl start docker #创建docker组 sudo groupadd docker #将当前用户加入docker组 sudo usermod -aG docker $USER #如果安装失败了,想卸载重装, 可通过下面命令来卸载 yum remove docker-ce 复制代码
安装docker compose
虽然通过Dockerfile就可以定义一个docker容器, 但是如果我们有多个容器需要配合使用时就不是很方便了,因此此处采用了docker compose。 docker compose 是一个像Dockerfile定义 docker 容器一样能够定义容器集群的编排和部署工具,可以很方便地帮助我们实现容器管理。
docker compse的安装:
# 安装 ---二进制包。 如果curl下载不了, 则去此地址手动下载:https://github.com/docker/compose/releases curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose # 给下载的docker compose授予可执行权限 sudo chmod +x /usr/local/bin/docker-compose #链接到usr/bin下,然后就可以通过docker-compsoe命令调用了 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 复制代码
准备配置了myslq容器的docker-compose.yml 配置文件
version : '2' services: mysql: container_name: mydb image: docker.io/mysql:5.7 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=128M --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO" ports: - "3306:3306" volumes: - ./data:/var/lib/mysql environment: MYSQL_DATABASE: devops MYSQL_ROOT_PASSWORD: root MYSQL_ROOT_HOST: '%' restart: always 复制代码
启动mysql容器
在有docker-compose.yml文件的路径下执行下面命令即可启动容器。
ps: 示例中将使用的docker-compose.yml 文件放在了 /home/docker/devops/compose下。可自行修改
cd /home/docker/devops/compose #检查yml文件是否配置正确, 如果docker-compose.yml有错误,则下面命令会报错 docker-compose config # 后台方式启动容器 docker-compose up -d #查看运行中的容器 docker ps #进入运行中的容器 进入容器后,即可通过 myslq -u root -p的方式登陆myslq数据库了 # mysql的root密码在docker-compose.yml里面的MYSQL_ROOT_PASSWORD项已经配置了 docker exec -ti mydb sh 复制代码
由于我们已经在docker-compse.yml里面暴露了3306端口,因此就可以通过 宿主机ip+端口方式访问mysql
。 如: jdbc:mysql://ip:3306/数据库名称
虽然jenkins流水线脚本通过groovy编写而且groovy可以使用数据库, 但是如果直接在流水线脚本中通过groovy使用数据库时会面临数据库jdbc驱动加载不到的问题。 经过搜索,发现jenkins已经有了支持数据库的插件: database和MySQL Database Plugin
插件安装好以后就可以通过getDatabaseConnection 和 sql 这两个方法来连接数据库进行操作了.
将sql语句和参数分开是为了避免sql注入,如果不介意这个, 那么就直接把参数写到sql语句里面去吧
getDatabaseConnection(type: 'GLOBAL') { def sqlString="select id from test_table where job_name= ? and build_number= ?" def params=['test',11] sql sql:sqlString,parameters:params }复制代码