前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Jenkins结合Soar实现自动化SQL审查

Jenkins结合Soar实现自动化SQL审查

原创
作者头像
浅时光博客
发布于 2022-09-11 03:48:33
发布于 2022-09-11 03:48:33
6510
举报
文章被收录于专栏:云原生K8s云原生K8s

一、 Soar介绍

 Soar是在2018年10月20日的开源先锋日上,由小米公布开源的项目,主要是通过智能检查SQL,并对SQL实现优化和改写的工具。

说明:本文不会详细描述整个过程,只是把大致流程讲一下,将核心的代码贴出来,大家可自行根据自己的项目去改造。相关的 Jenkinsfile文件已经上传至本人的 GitHub仓库,可自行进行克隆下载;如果对您有帮助别忘记点个start

二、功能特点

  • 跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试)
  • 目前只支持 MySQL 语法族协议的 SQL 优化
  • 支持基于启发式算法的语句优化
  • 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)
  • 支持 EXPLAIN 信息丰富解读
  • 支持 SQL 指纹、压缩和美化
  • 支持同一张表多条 ALTER 请求合并
  • 支持自定义规则的 SQL 改写

三、安装部署

  • Soar的安装很简单,只需要将项目下载下来后,执行soar命令即可使用
代码语言:shell
AI代码解释
复制
[root@localhost ~]# wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.linux-amd64 -O soar
 
#或者下载到本机PC再上传至服务器
[root@localhost ~]# mv soar.linux-amd64 soar
[root@localhost ~]# chmod +x soar
[root@localhost ~]# mv soar /usr/local/bin/
[root@localhost ~]# soar --version
Version: 2019-01-21 16:54:09 +0800 0.11.0-16-gc12ae96
Branch: master
Compile: 2019-01-21 16:55:46 +0800 by go version go1.10.7 linux/amd64
GitDirty: 0

四、使用测试

代码语言:shell
AI代码解释
复制
[root@localhost ~]# soar -query "select *  from tb;"
# Query: 09D1F5952A76399F
★ ★ ★ ☆ ☆ 75分
 
``sql
 
SELECT  
  * 
FROM  
  tb
``
 
## 最外层 SELECT 未指定 WHERE 条件
 
* **Item:**  CLA.001
 
* **Severity:**  L4
 
* **Content:**  SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
 
## 不建议使用 SELECT * 类型查询
 
* **Item:**  COL.001
 
* **Severity:**  L1
 
* **Content:**  当表结构变更时,使用 \* 通配符选择所有列将导致查询的含义和行为会发生更改,可能导致查询返回更多的数据。

五、结合 Jenkins

1、安装插件

Jenkins需要安装插件 HTMLResource,这样才可以将报告通过html方式查看,安装Email Extension插件实现邮件通知

image.png
image.png

2、配置插件

image.png
image.png
  • Linux系统上安装Email服务
代码语言:shell
AI代码解释
复制
[root@localhost ~]# yum -y install sendmail
[root@localhost ~]# yum install -y mailx
[root@localhost ~]#  yum -y install jwhois

3、编写代码

代码语言:text
AI代码解释
复制
//解决HTML显示问题
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")
pipeline {
   agent { node {label "master"}}
   stages {
      stage("CreateSQLFile"){
         steps{
            script{
               sh "echo '${SQL};' > migrate.sql && cat migrate.sql"
            }
         }
      }
 
      stage("SoarSQL"){
         steps{
            script{
               sh """
                              #一般jenkins是普通用户运行的,所以把soar命令拷贝到当前jenkins运行用户的家目录下,防止权限问题导致命令无法执行
                   /home/deploy/soar -report-type html -query  v${ProjectName}-migrate.sql   > soarsql.html
                    cat soarsql.html
 
                    """
                publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: '', reportFiles: ' soarsql.html', reportName: 'SQLreport', reportTitles: ''])
            
                Email("SQL审核完成 <a href='http://192.168.66.101:8080/ /view/${JOB_NAME}/job/${JOB_NAME}/SQLreport/'>审核报告</a>","${EmailUser}")  #Job传入email地址
            }
         }
      }
   }
}
 
 
 
//定义邮件内容
def Email(status,emailUser){
    emailext body: """
            <!DOCTYPE html> 
            <html> 
            <head> 
            <meta charset="UTF-8"> 
            </head> 
            <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> 
                <img src="http://192.168.66.112/jenkins.jpg"> //logo地址
                <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">   
                    <tr> 
                        <td><br /> 
                            <b><font color="#0B610B">构建信息</font></b> 
                        </td> 
                    </tr> 
                    <tr> 
                        <td> 
                            <ul> 
                                <li>项目名称:${JOB_NAME}</li>         
                                <li>构建编号:${BUILD_ID}</li> 
                                <li>构建信息: ${status} </li>                         
                                <li>项目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    
                                <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li> 
                            </ul> 
                        </td> 
                    </tr> 
                    <tr>  
                </table> 
            </body> 
            </html>  """,
            subject: "Jenkins-${JOB_NAME}项目构建信息 ",
            to: emailUser    
}

4、创建任务

  • 现在我们创建一个流水线任务,配置如下
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

5、执行构建

5.1:查看分析结果

image.png
image.png
image.png
image.png

5.2:查看邮箱消息

image.png
image.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
打造企业级自动化运维平台系列(五):Jenkis 基本使用介绍
这篇主要系统的介绍一下 jenkins 的使用,这里jenkins是搭建在 windows上。
民工哥
2024/01/18
6280
打造企业级自动化运维平台系列(五):Jenkis 基本使用介绍
Java自动化测试(jenkins 21)
Extended E-mail Notification->SMTP server
zx钟
2020/08/21
4360
Java自动化测试(jenkins 21)
基于jenkins的Allure报告输出以及实现自动化可视化操作
最近在做基于桌面应用程序的自动化测试,选择的框架是python+pytest+allure+jenkins,实现在jenkins下一键构建,自动化过程可视化操作,期间也遇到不少坑,特别是配置在jenkins中配置allure可视化报告(网上资料都是大体上一句话带过,没有说到重点),这里记录下过程,也方便后续小伙伴们避免入坑。
用户6367961
2020/04/07
1K0
Jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱
个人其实一直的不太喜欢用邮箱发送报告,测试报告用邮件通知这都是五六年前的事情了,但有部分小伙伴依然执着于发邮件报告通知。 这里整理了下发邮箱通知的教程。
上海-悠悠
2023/12/18
3450
Jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱
jenkins学习9-测试报告发邮件(Email Extension Plugin)
前面已经实现在jenkins上展示html的测试报告,接下来只差最后一步,把报告发给你的领导,展示你的劳动成果了。
上海-悠悠
2020/01/13
9860
jenkins学习9-测试报告发邮件(Email Extension Plugin)
jenkins在windows上自动化部署.Net(.Net Core)项目
  什么是持续集成呢?Continuous integration(CI)。持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
小世界的野孩子
2019/09/29
1.8K0
jenkins在windows上自动化部署.Net(.Net Core)项目
【干货】Jenkins 持续集成实现系统自动化构建、测试及部署
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。本文以 CentOS7 环境为例,总结了 Jenkins 的安装与配置、邮件功能使用,并接入阿里巴巴的著名开源项目 fastjson,以此演示 Java 项目(SVN+Maven)中 FindBugs/CheckStyle/PMD 等常用插件的使用、单元测试及其覆盖率报告等,力求实战性强。
IT技术小咖
2019/06/26
3.4K0
【干货】Jenkins 持续集成实现系统自动化构建、测试及部署
Jenkins使用介绍
小编百度到的链接:https://www.cnblogs.com/MarlonGuo/p/9935176.html
清菡
2020/12/02
8450
Jenkins使用介绍
Jenkins添加html报告并发送到邮箱
1、插件安装 1、Manage Jenkins ---> Manage Plugins ---> Available 搜索框输入下面几款插件 2、插件安装以及插件的说明: 1) HTML Publisher plugin # 推送生成的html报告到jenkins 2) Email Extension Plugin # jenkins配置email的插件 3) Groovy # 让jenkins可以识别css样式 PS:无法安装插件请点
cywhat
2022/12/08
1.2K0
Jenkins添加html报告并发送到邮箱
1.Jenkins入门基础介绍与持续化集成部署
Tips :个人理解 Jenkins 是一个调度平台,本身不需要处理任何事情,而是通过众多的插件来完成所有的工作;
全栈工程师修炼指南
2022/09/29
6.4K0
1.Jenkins入门基础介绍与持续化集成部署
Hey, man, you break the build!Jenkins邮件你收到了吗?
可能会发现有两个E-mail Notification,一个是Extended E-mail Notification另一个是E-mail Notification。前者是安装Jenkins时顺便安装的插件,后者是自带的。自带的E-mail Notification功能较弱。
DevOps在路上
2024/06/17
1620
Hey, man, you break the build!Jenkins邮件你收到了吗?
开源推荐 - soar-PHP - SQL 语句优化器和重写器的 PHP 扩展包、 方便框架应用中 SQL 调优
soar-php 是一个基于小米公司开源的 soar 开发的 PHP 扩展包,方便框架中 SQL 语句调优。
猿哥
2019/07/15
8460
开源推荐 - soar-PHP - SQL 语句优化器和重写器的 PHP 扩展包、 方便框架应用中 SQL 调优
基于Jenkins和Argocd实现CI/CD
CI/CD并不是陌生的东西,大部分企业都有自己的CI/CD,不过今天我要介绍的是使用Jenkins和GitOps实现CI/CD。
没有故事的陈师傅
2020/12/02
2.4K0
基于Jenkins和Argocd实现CI/CD
干货!Jenkins下配置findbugs、pmd及checkstyle实现代码自动检测
对于maven项目来说,需要在pom.xml文件的<build><plugins>添加配置</plugins></build>
翎野君
2023/05/12
6050
干货!Jenkins下配置findbugs、pmd及checkstyle实现代码自动检测
Jenkins发送邮件、定时执行、持续部署
集成Allure报告只需要配置构建后操作即可。但如果是web自动化,或是用HTMLTestRunner生成报告,构建后操作要选择Publish HTML reports,而构建中还要添加Execute system Groovy script插件,内容:
孟船长
2022/04/12
6370
Jenkins发送邮件、定时执行、持续部署
Jenkins配置邮件通知
完成基于Jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员,如果网站项目很多,人工去查看状态就变得不可取,可以借助Jenkins Email插件实现网站构建完成,自动发送邮件给相应的开发人员、运维人员或者测试人员。Jenkins发送邮件,需安装Email邮件插件,Email-ext、Token-macro和Email-template,Jenkins Email邮件配置常见参数:
子润先生
2021/07/09
1.1K0
Jenkins流水线执行完成后发送邮件通知
Jenkins需要配置邮件通知,安装插件Email Extension,然后进入系统管理-> 系统设置 ->Extended E-email Notification。这里我使用的是QQ邮箱,填写SMTP服务器地址smtp.qq.com 和端口 465注意要开启SSL,密码为授权码。
DevOps云学堂
2020/03/15
2.2K0
jenkins 邮件_测试报告的基本内容
前面已经实现在jenkins上展示html的测试报告,接下来只差最后一步,把报告发给你的领导,展示你的劳动成果了。
全栈程序员站长
2022/09/19
3100
jenkins 邮件_测试报告的基本内容
Docker+Jenkins+Gitlab+Django应用部署实践
在互联网应用快速更新迭代的大背景下,传统的人工手动或简单脚本已经不能适应此变化,此时Devops为我们提供了良好的解决方案,应用好CI/CD可以大大的方便我们的日常工作,自动化快速的持续集成/持续交付为我们带来了应用开放的更快速度、更好的稳定性和更强的可靠性。
KaliArch
2019/01/01
1.5K0
Docker+Jenkins+Gitlab+Django应用部署实践
jenkins构建邮件通知
开启邮箱的SMTP服务,复制授权码 下载插件 然后点击Jenkins的设置,注意密码是填我们上面复制的授权码 e44f883aaca356d9 然后在我们的项目目录下编写email模板 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head> <body leftmargin="8" ma
阿超
2022/08/16
8750
jenkins构建邮件通知
推荐阅读
相关推荐
打造企业级自动化运维平台系列(五):Jenkis 基本使用介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档