SonarQube 9.x集成Jenkins生成PDF扫描报告并通过邮件附件的方式发送;
文章目录
- 前言
- 一、配置SonQube生成PDF扫描报告
- 1.下载gitee开源PDF插件到SonarQube的plugins目录下
- 2.重启SonarQube载入PDF插件
- 3.配置SonarQubePDF插件的用户名密码
- 4.删除sonarqube里的项目重新扫描
- 二、jenkins的服务器上安装mailx
- 1.yum方式安装mailx
- 2.编辑mailx的主配置文件,添加mailx发邮件的参数
- 2.配置SSL来发邮件
- 3.测试发送邮件
- 三、jenkins调用本地的mailx服务发送含有扫描报告附件的邮件到指定邮箱
- 1.思路
- 2.编写jenkinsfile
- 3.jenkins重新发起构建,测试是否会发送以PDF附件的扫描报告到我们的邮箱
- 遇到的问题:
- 解决方式:
前言
前面我们在Kubernetes中部署了SonarQube并与Jenkins集成扫描了前后端代码;
部署SonarQube链接
SonarQube与Jenkins集成扫描前后端代码链接
接下来记录一下如何将扫描报告通过邮件附件的形式推送到相应人的邮箱;
一、配置SonQube生成PDF扫描报告
1.下载gitee开源PDF插件到SonarQube的plugins目录下
https://gitee.com/zzulj/sonar-pdf-plugin/releases
https://gitee.com/zzulj/sonar-pdf-plugin/releases/download/v4.0.0/sonar-pdfreport-plugin-4.0.0.jar
[root@iZbp188o3jng3gjlcx8nzsZ plugins]# pwd
/hqtbj/hqtwww/NFS/kubernetes/sonar-sonar-extensions-pvc-fd77d0df-11fe-4338-a4d9-bc5f948a90de/plugins
[root@iZbp188o3jng3gjlcx8nzsZ plugins]# wget https://gitee.com/zzulj/sonar-pdf-plugin/releases/download/v4.0.0/sonar-pdfreport-plugin-4.0.0.jar
[root@iZbp188o3jng3gjlcx8nzsZ plugins]# ll
total 12932
-rwx------ 1 sonarqub sonarqub 64076 Nov 30 11:54 sonar-l10n-zh-plugin-9.0.jar
-rwxr-xr-x 1 sonarqub sonarqub 13175122 Dec 1 14:01 sonar-pdfreport-plugin-4.0.0.jar
因为前面我们是将SonarQube部署在kubernetes里,然后使用pv的方式将sonar的plugin挂在到了nfs的sonar-extensions里,所以这里就直接将这个插件下载到了nfs的sonar-extensions/plugins下
如果不是将SonQube部署在kubernetes里的话那就下载到sonarqube安装目录下的plugins里即可;
2.重启SonarQube载入PDF插件
3.配置SonarQubePDF插件的用户名密码
这里设置成sonar登录的用户名密码就行
【菜单栏】➡【配置】➡【PDF Report】
4.删除sonarqube里的项目重新扫描
添加PDF插件后jenkins执行扫描步骤日志如下
重新扫描完成后点击进入项目,然后点击【更多】里面就能以PDF的方式下载本次的扫描报告
二、jenkins的服务器上安装mailx
1.yum方式安装mailx
[root@iZbp140uu4029bydn7ax4fZ ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@iZbp140uu4029bydn7ax4fZ ~]# yum -y install mailx
[root@iZbp140uu4029bydn7ax4fZ ~]# mail --help
mail: illegal option -- -
Usage: mail -eiIUdEFntBDNHRVv~ -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE -f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users
2.编辑mailx的主配置文件,添加mailx发邮件的参数
在最后一行添加
[root@iZbp140uu4029bydn7ax4fZ ~]# vim /etc/mail.rc#发件人
set from=zhangsan@xxxx.com
#这是企业微信的stmp地址
set smtp=smtps://smtp.exmail.qq.com:465
#邮箱账户
set smtp-auth-user=zhangsan@xxxx.com
#邮箱密码(企业邮箱的话就是邮箱账户的密码,如果是qq/163邮箱的话就是smtp的授权码)
set smtp-auth-password=xxxxxx
set smtp-auth=login
#set smtp-use-starttls
set ssl-verify=ignore
#设置ssl目录
set nss-config-dir=/root/.certs
2.配置SSL来发邮件
这一步可以省略,有的话更好;不配置的话发送邮件时容易报错"Error in certificate: Peer’s certificate issuer is not recognized"
[root@iZbp140uu4029bydn7ax4fZ ~]# mkdir ~/.certs
[root@iZbp140uu4029bydn7ax4fZ ~]# echo -n | openssl s_client -connect smtps://smtp.exmail.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qywx.crt
[root@iZbp140uu4029bydn7ax4fZ ~]# echo -n | openssl s_client -connect smtp.exmail.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qywx.crt
[root@iZbp140uu4029bydn7ax4fZ ~]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qywx.crt
[root@iZbp140uu4029bydn7ax4fZ ~]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qywx.crt
[root@iZbp140uu4029bydn7ax4fZ ~]# certutil -L -d /root/.certs
[root@iZbp140uu4029bydn7ax4fZ ~]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qywx.crt
[root@iZbp140uu4029bydn7ax4fZ ~]# ll .certs/
total 100
-rw------- 1 root root 65536 Dec 1 11:52 cert8.db
-rw------- 1 root root 16384 Dec 1 11:52 key3.db
-rw-r--r-- 1 root root 2338 Dec 1 11:51 qywx.crt
-rw------- 1 root root 16384 Dec 1 11:52 secmod.db
3.测试发送邮件
[root@iZbp140uu4029bydn7ax4fZ ~]# echo "111" | mail -s "test标题" zhangsan@xxxx.com
测试发送邮件并添加附件
[root@iZbp140uu4029bydn7ax4fZ ~]# touch a.txt
[root@iZbp140uu4029bydn7ax4fZ ~]# echo "111" | mail -s "test标题" -a *.txt zhangsan@xxxx.com
三、jenkins调用本地的mailx服务发送含有扫描报告附件的邮件到指定邮箱
1.思路
我们可以在jenkins的构建日志里看到sonar代码检测时的工作目录为项目job的$WORKSPACE下面的target/sonar
目录,所以生成的PDF也会在这个目录下,所以我们可以直接在生成PDF文件之后调用mail命令发送到我们指定的邮箱就可以了
2.编写jenkinsfile
设置构建时选择的参数
在sonar检测步骤添加发送邮件配置
完整pipeline如下:
pipeline {agent anytools{maven 'mvn-3.6.3'}//全局变量environment { //Harbor仓库地址以及以及镜像所在Harbor项目Harbor_Registry_URL= 'xxxx'Harbor_Registry_Cert= 'xxxx'Fat_Harbor_Registry_Project= 'xxxx'Pro_Harbor_Registry_Project= 'xxxx'//gitee代码仓库地址以及项目名称Gitee_Registry_URL= 'xxxx'Gitee_Code_Project= 'gotone-dw-api'//-SonqrQube信息SonarQube_URL= 'http://internal.sonarqube.com'SonarQube_Secret= '7231ab346d6bf1875e7a6da5353a872aab25afa0'//项目所在kubernetes命名空间(环境)Kubernetes_Project_Namespace_fat= 'xxx' }parameters {gitParameter branch: '', branchFilter: 'origin/(.*)', defaultValue: 'master', description: '选择拉取代码的分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'GitParameterDefinition'booleanParam description: '是否进行代码质量检测;', name: 'IS_CODE_DETECTION'choice choices: ['zhangsan@xxxxx.com', 'lisi@xxxx.com', 'wangwu@xxxx.com', 'zhaoliu@xxxx.com', 'xxx@xxxx.com', 'xxx@xxxx.com', 'xxx@xxxx.com'], description: '''********************************************
* 请在下方选择接收检测报告的邮箱 *
* 请在下方选择接收检测报告的邮箱 *
********************************************''', name: 'RECEIVE_MAILBOX'booleanParam description: '是否部署到fat环境;', name: 'IS_DEPLOY_FAT'booleanParam description: '是否部署到fat1环境;', name: 'IS_DEPLOY_FAT1'booleanParam description: '是否将本次构建镜像推送到pro线上仓库;', name: 'Push_Image_To_Pro_Registry'choice(name:'Replicase', choices:'1\n3\n5', description:'请选择副本数(如果对此参数不清楚的话,默认即可);' )}stages {stage('拉取代码') {steps {xxxx}}stage('质量检测') {when { expression { return params.IS_CODE_DETECTION } }steps {withSonarQubeEnv('SonarQube') {sh """mvn sonar:sonar \-Dsonar.projectKey=${Gitee_Code_Project} \-Dsonar.host.url=${SonarQube_URL} \-Dsonar.login=${SonarQube_Secret}cd $WORKSPACE/target/sonarecho "${JOB_NAME}-第${BUILD_NUMBER}次代码扫描报告" > mail.txtecho "项目名称 : ${JOB_NAME}" >> mail.txtecho "构建编号 : 第${BUILD_NUMBER}次构建" >> mail.txtecho "代码路径 : ${Gitee_Registry_URL}" >> mail.txtecho "构建日志 : ${BUILD_URL}consoleText" >> mail.txtecho "构建Url : ${JOB_URL}" >> mail.txtecho "工作目录 : ${WORKSPACE}" >> mail.txtcat mail.txt | mail -s "SonarQube 检测报告" -a *.pdf ${RECEIVE_MAILBOX}"""}}}stage('代码编译') {steps {sh """mvn xxxx这里是正常编译代码的步骤"""}}stage('构建并上传到测试仓库') {steps {xxxxxxxx}}//-部署到fat环境stage('部署到测试环境') {when { expression { return params.IS_DEPLOY_FAT } }steps {xxx}}stage('将本次构建的镜像传到pro仓库') {when { expression { return params.Push_Image_To_Pro_Registry } }steps {xxx }}stage('清除本地镜像') {steps {xxx}}}
}
我这里是后端java的pipeline里加的配置,前端vue一样 加到质量检测步骤后面就可以,pipeline可以参考SonarQube与Jenkins集成篇
3.jenkins重新发起构建,测试是否会发送以PDF附件的扫描报告到我们的邮箱
构建时需要指定的参数如下:
构建完成后指定的收件人会收到如下邮件:
至此SonarQube与jenkins集成并发送扫描报告到邮箱就完成了;
遇到的问题:
错误信息如下:
这是在测试发送邮件时遇到的错误
[root@iZbp140uu4029bydn7ax4fZ ~]# echo "111" | mail -s "test标题" fandaoshuai@cngotone.com
[root@iZbp140uu4029bydn7ax4fZ ~]# SSL/TLS handshake failed: SSL received a malformed Alert record.
"/root/dead.letter" 11/338
. . . message not sent.
解决方式:
我在本文中已经注释
直接注释掉/etc/mail.rc
配置文件里的"set smtp-use-starttls"
配置即可
SonarQube 9.x集成Jenkins生成PDF扫描报告并通过邮件附件的方式发送;相关推荐
- ABAP-如何发用邮件附件的方式发送订单打印的PDF
在工作中,我们常常会遇到以邮件附件的方式发送SAP的订单,出库单或者发票等信息给客户.我这里将实现摘抄下来,供大家参考: 1.设计订单打印smarfform(这就不累述了) 2.设计订单打印程序:几个 ...
- 【DevOps】总结下容器方式构建Grafana-reporter生成PDF格式报告
目录 Grafana-reporter 1.编写Dockerfile 2.构建镜像 3.运行Grafana-reporter 4.在Grafana配置Link 即文章:[DevOps]Promethe ...
- 图文并茂,Python轻松生成PDF数据分析报告
reportlab是Python的一个标准库,可以画图.画表格.编辑文字,最后可以输出PDF格式.它的逻辑和编辑一个word文档或者PPT很像.有两种方法: 1)建立一个空白文档,然后在上面写文字.画 ...
- jenkins生成的HTML报告中expand与collapse问题
1.打开jenkins中脚本命令执行页面 2.在脚本命令页面的,输入框中粘贴 System.setProperty("hudson.model.DirectoryBrowserSupport ...
- iText和flying saucer结合生成pdf的技术
原博文地址 http://blog.csdn.net/shanliangliuxing/article/details/6833471 下面是我自己利用flying saucer技术生成pdf文档的实 ...
- 前端实现生成pdf文件并下载
前端实现生成pdf文件并下载 思路 下载依赖 使用方式 备注 参考 思路 通过 html2canvas 将 HTML 页面转换成图片,然后再通过 jspdf 将图片的 base64 生成为 pdf 文 ...
- php mpdf例子,yii2使用mpdf生成PDF文件
yii2里面带有生成PDF的插件,我们通过安装就可以使用. 参考地址:(https://github.com/mpdf/mpdf) https://mpdf.github.io/ 通过comp ...
- Jenkins+Gitlab+SonarQube 代码质量管理集成
Jenkins+Gitlab+SonarQube 代码质量管理集成 一.环境准备 1.1.JDK11环境安装 1.2.Docker环境下搭建SonarQube所需的PostgreSQL数据库 1.2. ...
- 【再也不怕pdf转换了】使用Python实现PDF扫描件生成DOCX或EXCEL
1.问题描述 应项目需求需要获取PDF扫描文件的内容,但寻遍整个网络能达到这种功能的产品,都要会员充值.苦于囊中羞涩也只好编写功能代码来实现了. 如PDF中表格图片图-1效果生成图-2 图-1 图-2 ...
最新文章
- java 并发任务_java 并发 - 运行多个任务并执行第一个结果
- GitHub 标星 17 万:打破程序员“中年危机”的「编程面试大学」!
- ubuntu下解决Ruby安装后缺少openssl的问题
- 导入Flex/Flash项目后的一个简单错误:无法创建 HTML 包装器
- Docker容器的使用方法
- linux设备驱动归纳总结(五):4.写个简单的LED驱动
- electron sqlite3_electron集成sqlite3,win10上折腾了2天
- android 自定义xml属性
- visual studio 2005 sp1 安装错误解决
- 大数据学情分析_多分学情大数据分析
- 将你一张表的值覆盖_精准度可达亚米级,山东“北斗一张网”向社会免费开放...
- python非零返回怎么解决_Python:从命令行获取输出,该命令行以非零退出代码退出...
- mysql数据库汉字乱码解决方案
- vue.js 事件的案例以及 v-model 的学习
- Java程序员如何写好一份个人求职简历
- 2017第34届广州国际特许连锁加盟展览会会刊(参展商名录)
- python 画出决策边界_决策边界用python实现
- 学习笔记之Qt从入门到精通(二)
- wps斜杠日期格式_wps表格,怎样将输入的日期间隔斜线改为横线?
- c语言 dct变换,DCT, IDCT变换--C语言实现
热门文章
- 1.8tft彩屏测试代码(stm32f407ve)
- DNS域名解析命令 —— nslookup
- amd超频软件LINUX,amd锐龙超频软件2020下载
- Acrobat Pro DC 教程:如何从 PDF 中提取页面?
- 新浪博客个人域名升级奖励
- Python构造代理IP池提高访问量
- Windows环境下的ELK——logstash输出apche日志到控制台(2)
- java 采集 cms_开源 java CMS - FreeCMS2.6 数据库信息采集
- 布林通道参数用20还是26_布林线参数13好还是20好
- Android下音频tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)--------mark详细