现状分析
- 公司在用的持续集成服务器是Jenkins
- 已设计完成持续交付流水线
- 需要添加对SQL语句的扫描
工具分析
- SonarQube 具有SQL插件但是收费~
- SOAR 开源免费 使用简便
流水线设计
- 开发人员将SQL文件保存在项目代码中/或单独的仓库中
- Jenkins下载项目代码库或数据库脚本仓库中的文件
- 集成SOAR进行此版本SQL语句分析生成HTML报告
- 获取HTML报告在Jenkins首页展示
- 想数据库管理员发布SQL扫描报告
flyway SQL脚本
db migrate v1.1.1-migrate.sql v1.1.2-migrate.sql rollback v1.1.1-rollback.sql
jenkins 项目
- 输入版本分支/版本号
- 检出代码
- 运行分析
- 展示html
- 发送邮件
Jenkins需要安装插件 HTML Publisher
String branchName = "${env.branchName}"pipeline { agent { node {label "master"}} stages { stage('Hello') { steps { echo 'Hello World' } } stage("CreateSQLFile"){ steps{ script{ sh " echo 'select * from users;' > v${branchName}-migrate.sql && ls -l && cat v${branchName}-migrate.sql " } } } stage("SoarSQL"){ steps{ script{ sh """ soar -report-type html -query v${branchName}-migrate.sql > testsql.html cat testsql.html """ publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: '', reportFiles: 'testsql.html', reportName: 'SQLreport', reportTitles: '']) Email("SQL审核完成 审核报告","2560350642@qq.com") } } } }}//定义邮件内容def Email(status,emailUser){ emailext body: """
构建信息
项目名称:${JOB_NAME} 构建编号:${BUILD_ID} 构建信息: ${status} 项目地址:${BUILD_URL} 构建日志:${BUILD_URL}console """, subject: "Jenkins-${JOB_NAME}项目构建信息 ", to: emailUser }
实现效果
剩下的交给DBA大佬了~