前言
前面我们在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 any
tools{
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/sonar
echo "${JOB_NAME}-第${BUILD_NUMBER}次代码扫描报告" > mail.txt
echo "项目名称 : ${JOB_NAME}" >> mail.txt
echo "构建编号 : 第${BUILD_NUMBER}次构建" >> mail.txt
echo "代码路径 : ${Gitee_Registry_URL}" >> mail.txt
echo "构建日志 : ${BUILD_URL}consoleText" >> mail.txt
echo "构建Url : ${JOB_URL}" >> mail.txt
echo "工作目录 : ${WORKSPACE}" >> mail.txt
cat mail.txt | mail -s "SonarQube 检测报告" -a *.pdf ${RECEIVE_MAILBOX}
"""
}
}
}
stage('代码编译') {
steps {
sh """
mvn xxxx这里是正常编译代码的步骤
"""
}
}
stage('构建并上传到测试仓库') {
steps {
xxxx
xxxx
}
}
//-部署到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.
文章来源:https://www.toymoban.com/news/detail-468252.html
解决方式:
我在本文中已经注释
直接注释掉/etc/mail.rc
配置文件里的"set smtp-use-starttls"
配置即可
文章来源地址https://www.toymoban.com/news/detail-468252.html
到了这里,关于SonarQube 9.x集成Jenkins生成PDF扫描报告并通过邮件附件的方式发送;的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!