Devops学习实践(五)jenkins 与 ant 、findbugs 配合使用

      之前jenkins里面介绍用findbugs主要是采用maven方式,但是很多情况下,工程项目采用的ant进行编译和打包的,通过jenkins ant  findbugs结合的方式也是可以进行持续集成的。 jenkins 的特点就是能将这些工具方便的集成起来,为了与工程本身的耦合减少,所以思路是 ant 编译工程 与ant 调用findbugs 通过jenkins分2步进行,这样方便灵活性更高。

    这里介绍一下ant 的安装和配置

 一、目标和环境

      准备在centos6.5 上安装ant ,配合jenkins 使用,安装环境如下:  192.168.136.144     centos 6.5 

      通过jenkins 调用 ant 和findbugs 进行工程的jar包或者class 检查

 二、ant 的安装和配置

 1、下载ant

      去ant 官网下载所需要的ant 包,URL为:http://ant.apache.org/bindownload.cgi

      因为是在centos上安装,所以选择的包是:      

 2、部署和配置

       将下载的包上传到目标服务器,使用tar 进行解压:       

    tar  -vxf  apache-ant-1.10.1-bin.tar.gz 
       解压后的目录:/home/nmc/dev/apache-ant-1.10.1  有些同学喜欢放到  /opt 目录下,有些喜欢放到   /usr 目录,放哪里看个人喜好。 我是放到 /usr/ant ,所以执行:
    mv  /home/nmc/dev/apache-ant-1.10.1  /usr/ant
       下一步进行配置:       

    vi /etc/profile 
       在这个配置文件中,进行如下配置:

export  ANT_HOME=/usr/ant 
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH 
       保存后,退出文件编辑,然后执行:   

source /etc/profile
       执行这句命令的目的是不启动,立刻生效

       
       最后,验证一下ant 命令是否成功,我们可以执行一下ant ,如果提示没有build.xml 说明ant 本身已经安装配置好了,也可以用ant -version 来查看是否能正确返回版本信息。

[root@cwqsolo apache-ant-1.10.1]# ant
Buildfile: build.xml does not exist!
Build failed
[root@cwqsolo apache-ant-1.10.1]# ant -version 
Apache Ant(TM) version 1.10.1 compiled on February 2 2017

三、findbugs的安装和配置

       由于findbugs 3.0 需要java 1.7配合,考虑到我们实际工作中,工程项目众多,存在java 1.6 ,1.7,  1.8 并存的情况,所以就采用findbugs 2.0.2(后续证明这是个错误选择,因为2.0.2对1.8 不支持,权衡利弊,所以最后所有工程都需要是用java 1.7 及以上版本。

1、下载fingbugs

       通过下面URL: https://sourceforge.net/projects/findbugs/files/findbugs/2.0.2/  选择 findbugs-2.0.2.tar.gz 下载,下载传到centos服务器144上,并解压

2、部署

       将解压后的目录,通过mv的方式 放置到你想要的目录,本例中为 : /home/nmc/dev/devops/findbugs

       其实findbugs目录下,只需要留有lib 目录,其他目录和文件都可以删除(特指在用ant 调用的情况),另外,还需要有一个ant 调用的build 文件,本例子中findbugsbuild.xml

        

<?xml version="1.0" ?>
<project name="check" default="default" basedir=".">

	<property name="src.dir" value="${basedir}/src" />
	<property name="class.dir" value="${basedir}/WebRoot/WEB-INF/classes" />
	<property name="dist.dir" value="${basedir}/dist" />
  <property name="findbugs.dir" value="/home/nmc/dev/devops/findbugs"/>
  
  <path id="findbugs.path">
        <fileset dir="${findbugs.dir}">
            <include name="**/*.jar" />
        </fileset>
  </path>
   

  <!-- =================================================================== -->  
  <!-- Findbugs build -->  
  <!-- =================================================================== -->  
  <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpathref="findbugs.path" />  
  
  <target name="findbugs" >  
      <mkdir dir="${basedir}/findbugs" /> 
      <findbugs home="${findbugs.dir}" output="xml" outputFile="${basedir}/findbugs/findbugs_errors.xml">  
          <sourcePath path="${src.dir}" />  
          <class location="${class.di\r}" />  
      </findbugs>  
  </target>    
    
  <target name="default" depends="findbugs">
	</target>

</project>
          findbugs 目录情况如下:
[root@cwqsolo findbugs]# ls
findbugsBuid.xml  lib
[root@cwqsolo findbugs]# 

3、手工验证findbugs正常工作

进入测试检查的工程,拷贝findbugsBuid.xml

        到工程目录,执行  ant  -file  findbugsBuid.xml

        

[root@cwqsolo cwq_testproject1]# ant  -f  findbugsBuid.xml
Buildfile: /home/nmc/dev/devops/jenkins/workspace/cwq_testproject1/findbugsBuid.xml

findbugs:
 [findbugs] Executing findbugs FindBugsTask from ant task
 [findbugs] Running FindBugs...
 [findbugs] The following classes needed for analysis were missing:
 [findbugs]   kafka.consumer.ConsumerConfig
 [findbugs]   kafka.javaapi.consumer.ConsumerConnector
 [findbugs]   kafka.consumer.KafkaStream
 [findbugs]   kafka.consumer.ConsumerIterator
 [findbugs]   kafka.message.MessageAndMetadata
 [findbugs]   kafka.consumer.Consumer
 [findbugs]   kafka.producer.ProducerConfig
 [findbugs]   kafka.producer.KeyedMessage
 [findbugs]   kafka.javaapi.producer.Producer
 [findbugs]   kafka.serializer.StringEncoder
 [findbugs] Warnings generated: 1
 [findbugs] Missing classes: 9
 [findbugs] Calculating exit code...
 [findbugs] Setting 'missing class' flag (2)
 [findbugs] Setting 'bugs found' flag (1)
 [findbugs] Exit code set to: 3
 [findbugs] Java Result: 3
 [findbugs] Classes needed for analysis were missing
 [findbugs] Output saved to /home/nmc/dev/devops/jenkins/workspace/cwq_testproject1/findbugs/findbugs_errors.xml

default:

BUILD SUCCESSFUL
Total time: 4 seconds
[root@cwqsolo cwq_testproject1]# 

        执行后,出现BUILD SUCCESSFUL 就表示成功了。

四、jenkins中配置

jenkins 中构件工程这块就不细说了,只描述一下工程构件基本配置后,如何加入findbugs

1、 添加构建

在原来的构建ant build 动作里面添加一个 拷贝动作,目的是在ant 编译工程后,拷贝代码走查的配置文件,到本工程中

        在这个构件动作下,新增一个ant 构建动作,某种程度上,jenkins 就是一个提供界面进行各种动作串联的工具。

       

    然后,在构建后的动作里面,发布一下findbugs的结果(事先要在jenkins中安装findbugs插件,具体看前面的资料)

    

     这些配置好后,就可以保存,进行构建了。

     注意findbugs的趋势图,需要构建2次后才会出来,如果一切顺利,大家看到构建趋势图和findbugs的链接,点击链接可以查看具体的bugs项

五:补充:

 1、      findbugs 2.0.2报错

 [findbugs]   Unable to get XClass for java/lang/Class
 [findbugs]     java.lang.ArrayIndexOutOfBoundsException
 [findbugs] Jul 27, 2017 8:17:35 PM edu.umd.cs.findbugs.TextUIBugReporter reportAnalysisError
 [findbugs] SEVERE: Couldn't get class info for java/util/concurrent/ConcurrentMap
 [findbugs] java.lang.ArrayIndexOutOfBoundsException: 28526

 ----解决:这个是因为工程是用java 1.8 编译的,选择findbugs 3.0 以上版本


2、 如果你的工程要求jdk 1.7 那么请把ant 降低到 1.9  我用1.9.3  没有问题,否则会出现 jdk版本错误,错误码:52


猜你喜欢

转载自blog.csdn.net/csolo/article/details/76223630
今日推荐