jenkins流水线使用mysql数据库

4,924 阅读3分钟

jenkins流水线使用mysql数据库

背景

在某些情况下, 我们可能需要通过jenkins连接数据库做一些数据的持久化操作

环境准备

mysql数据库

以往安装mysql数据库都是在网上先找的安装教程,捣鼓半天才能安装上。后来发现通过docker安装mysql好简单,所以本次通过docker来安装mysql。

安装

  1. 安装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
    
  2. 安装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
    
  3. 准备配置了myslq容器的docker-compose.yml 配置文件

     version : '3.7'
     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
    
  4. 启动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方面

虽然jenkins流水线脚本通过groovy编写而且groovy可以使用数据库, 但是如果直接在流水线脚本中通过groovy使用数据库时会面临数据库jdbc驱动加载不到的问题。 经过搜索,发现jenkins已经有了支持数据库的插件: database和MySQL Database Plugin

安装

  1. 在jenkins插件管理页面安装database和MySQL Database Plugin
  2. 在jenkins系统设置界面配置数据库连接

https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/2/24/1707540348225194~tplv-t2oaga2asx-image.image

使用

插件安装好以后就可以通过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
        }

后记:这个database插件里面把数据库连接数写死8个了, 如果数据库连接比较多的话,会一直排队等。然后报错的时候,连接的回收会有点问题,最终可能会导致获取不到连接的情况发生。 后来将方案改为了直接将mysql 驱动的jar包放到了jenkins的lib目录下,自己调用驱动来连接数据库。