Jenkins+Sonar质量门禁【实践篇-maven版】
Jenkins+Sonar质量门禁【实践篇-maven运行版】
配置文档百度挺多的,就不展开来了,找类似这种参考文档:
https://www.tpisoftware.com/tpu/articleDetails/563
首先很遗憾的告诉大家,maven版做不了质量门禁!只能扫描!!!
效果撑死,只能做到这样(只扫描,不中断):
就我们公司项目里,jenkins建的maven任务是最多的,所以我也首选用maven项目测试,然而11月尾叫了解,各种测试下来没有进展。那时还特意去官网注册,生成SonarQube token,配置到jenkins凭证上,以便在jenkins发布中使用token代替账号密码的方式去操作sonarqube,还下载中文汉化包进行汉化。
然而配置任务发布报错:Exception in thread "main" java.lang.NoClassDefFoundError: org/sonar/batch/bootstrapper/IssueListener,SonarQube scanner exited with non-zero code
搞了1~2天,从此被抓去干别的活了。。。没错,就是去搞虚拟机迁移,因为公司买了新服务器,需要把伪服务器(家用台式机改造的linux系统,装了个virtualbox)的虚拟机迁移到新服务器上(2网段)。而这台测试机器刚好也要挪走,话说当时想直接把jenkins装在系统上,而不是docker上,因为想着以后一直用。
安装过程有个诡异的问题,不知道是不是2网段跟默认0网段有什么冲突,各种方式装jenkins(java -jar war包、tomcat跑war包,甚至yum 直接装),无一不遇到首次安装jenkins,插件安装失败问题:
不要告诉我这个方法:
1 sed -i 's#http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g;s#http://www.google.com#https://www.baidu.com#g' default.json
2
3 http://jenkins访问ip/jenkins/pluginManager/advanced
4 上面的 Update Site url 改成 mirrors.tuna.tsinghua.edu.cn 。。。
试过很多遍,无解。竟然改完之后,重启jenkins,修改过的配置文件还是没改过前的。且考虑到,装完之后还要配置很多东西,什么git、java、maven,还要根据报错信息装缺漏的插件。。。
无奈只能搞回docker版的jenkins,话说docker恢复安装环境确实快。
1、恢复镜像:原服务器上docker save,新服务器docker load
2、数据恢复:各种映射到宿主机的数据目录拷贝复制
3、恢复服务:docker run -v 跑起来即可
上面都是流水文,交代下背景,下面干货来了!
话说我在jenkins建的maven项目里,报错信息看不到解决办法。所以干脆模拟整个过程:进去docker jenkins里面,git 拉项目,然后手动运行sonar扫描。
因为公司项目不敢在pom.xml 添加东西,所以借来了小俊子给的helloworld java 项目。然后扫描成功了。
首先贴上maven配置
为啥要贴上这个Build图,到时pipeline篇会提到
Post Steps加上Analysis properties配置,如下:
sonar.login=admin sonar.password=admin # 项目key 保证唯一 sonar.projectKey=java # 项目名字 sonar.projectName=xxxx-test-maven sonar.projectVersion=1.0 sonar.language=java sonar.sourceEncoding=UTF-8 # sonar.sources是源文件所在的目录 sonar.sources=src/main/java sonar.projectBaseDir=. # 指定class目录 从sonarQube 4.12开始,sonar将会进行程序的动态检查,不配置sonar.java.binaries属性将会出错 sonar.java.binaries=target/classes
1、进去jenkins容器
docker exec -it xxxx bash
2、进入jenkins worksapce目录
3、克隆hello-world.git项目
(趁某俊把这个项目还是设置公开,大家有需要赶紧下下来,哈哈哈,我已经粘到我gitee上了,下一篇会说到)
git clone https://gitee.com/xie-zijun/hello-world.git
4、修改pom.xml 文件,添加插件引入:
org.sonarsource.scanner.maven sonar-maven-plugin 3.2
加个题外话,其实我们公司maven项目也能加,因为这堆代码要放到build和plugins里面的,如果pom.xml没有这两个标签,加上去即可。就是下面这个意思:
参考:https://blog.csdn.net/zwk_sys/article/details/105103691上面那坨代码
4、手动运行扫描
bash-5.1# /usr/local/maven/bin/mvn install sonar:sonar -Dsonar.host.url=http://192.168.2.170:9090
5、浏览器进去sonar页面看:
其实上面手动扫描运行成功之后,基本已经没啥大问题,配置到jenkins上的maven项目里,发布就行了。(特别注意要在pom.xml添加插件引入代码,因为要借用jenkins容器里面的sonar scaner工具去扫描)
当我欢喜地给我领导看效果时候,他不是要这种效果(我还欢喜地想把这个sonar客户端装到一台windows虚拟机上,让开发他们为所欲为,装到一半的时候才说不是要这种效果 = =)
他要检测到代码bug之后,不让进行下一步发布操作,让开发改好bug再发布。。。