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 文件,添加插件引入:

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.2</version>
</plugin>

加个题外话,其实我们公司maven项目也能加,因为这堆代码要放到build和plugins里面的,如果pom.xml没有这两个标签,加上去即可。就是下面这个意思:

<!--maven打包插件-->
  <build>
      <plugins>
        上面那坨代码
    </plugins>
 </build>

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再发布。。。

原文地址:https://www.cnblogs.com/windysai/p/15742808.html