当前位置 博文首页 > 文章内容

    Jenkins+Sonar质量门禁【实践篇-maven版】

    作者:shunshunshun18 栏目:未分类 时间:2021-12-28 22:29:30

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



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

    bkbky