ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具

背景:使用jacoco来统计代码测试覆盖率,并集成到jenkins上。因为我是调研jacoco的,所以自己写了一个很简单的springboot项目,部署到docker,然后使用jacoco来统计测试这个demo的代码覆盖率的。

工具:gitLib 、maven、jenkins、docker

搭建过程

1、创建springboot项目

网上很多搭建springboot项目的案例,我也是百度后照着来的,这里不赘述

可参考:https://www.jianshu.com/p/397929dbc27d

2、本地使用jacoco

本地使用比较简单,不做记录

3、ubuntu16上搭建环境

1)安装配置jdk

执行命令:apt-get install openjdk-8-jdk 还自动将jdk下载到 系统/usr/lib/jvm 路径下;

执行命令:sudo vim /ect/profile ,打开profile文件,在文件末尾添加上环境变量的配置

#set Java environment
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

配置完之后,保存退出,cat /ect/profile ,看一下添加的内容是否添加成功;

执行命令:source /ect/profile , 让文件的变动立即生效,因为有些配置文件修改完之后,并不是立即就能生效的。

做完这些之后,执行命令:java -version ,若能正常显示jdk版本,说明前面的配置成功了。

2)下载安装docker

可参照:https://www.cnblogs.com/jiyang2008/p/9014960.html

  • 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:

sudo apt-get remove docker docker-engine docker-ce docker.io

  • 更新apt包索引:

sudo apt-get update

  • 安装以下包以使apt可以通过HTTPS使用存储库(repository):

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

  • 添加Docker官方的GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  • 使用下面的命令来设置stable存储库:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

  • 再更新一下apt包索引:

sudo apt-get update

  • 安装最新版本的Docker CE:

sudo apt-get install -y docker-ce

  • 检查docker是否安装完成:

docker --version

当提示docker 版本就说明docker安装成功了

3)配置项目镜像

  • 配置项目的pom.xml文件

pom.xml中添加jacoco相关插件


   
      
      
         org.apache.maven.plugins
         maven-surefire-plugin
         2.22.2
         
         
      
      
         org.jacoco
         jacoco-maven-plugin
         0.8.2
         
            
               default-instrument
               
                  instrument
               
            
            
               default-restore-instrumented-classes
               
                  restore-instrumented-classes
               
            
            
               report
               prepare-package
               
                  report
               
            
            
               check
               
                  check
               
            
            
               prepare-agent
               
                  prepare-agent
               
            
         
         
            
            
               
                  BUNDLE
                  
                     
                     
                        METHOD
                        COVEREDRATIO
                        0.80
                     
                     
                     
                        INSTRUCTION
                        COVEREDRATIO
                        0.80
                     
                     
                     
                        LINE
                        COVEREDRATIO
                        0.80
                     
                     
                     
                        CLASS
                        MISSEDCOUNT
                        0
                     

                  
               
            
         
      
   
  • 项目打包

上面第1步骤将springboot项目建完后,自己写一个示例,然后使用maven打成jar包

  • 编写Dockerfile
#Docker image for springboot file run
# 基础镜像使用java
FROM java:8

# APP_NAME设置的是项目打成的jar包名称
ENV APP_NAME=demo-0.0.1-SNAPSHOT
ENV JAVA_OPTS="-server"
ENV PROFILE=docker

# 将本地javaagnet.jar加到镜像中,Dockerfile文件和项目的jar包在同一级目录;
# docker认为Dockerfile所在目录为根目录,所以路径要注意哦!不然会启动不成功的
COPY /jacocoagent.jar jacocoagent.jar
ADD /${APP_NAME}.jar ${APP_NAME}.jar
RUN bash -c 'touch /${APP_NAME}.jar'

#带java agnet参数运行java -jar命令,这里的address要写成127.0.0.1 或 0.0.0.0哦
ENTRYPOINT exec java -javaagent:/jacocoagent.jar=includes=*,output=tcpserver,port=6305,address=127.0.0.1 $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=${PROFILE} -jar /${APP_NAME}.jar

#开放一个端口供客户端dump数据使用,用来监听jacoco的,不要和项目的启动端口一致
EXPOSE 6305

ps : dockerfile中设置的端口是jacoco监控程序的端口,要使用未被使用的端口哦!千万不要和项目端口设置成一样哦!

Dockerfile文件说明:

FROM :指定基础镜像,如果不以任何镜像为基础,那可以写成FROM:java ;Dockerfile文件必须以FROM 开头。

EVN :设置环境变量

COPY:复制命令

ADD:把文件复制到镜像中

RUN:运行指令

ENTRYPOINT:docker容器启动时运行的启动命令

EXPORT:暴露端口

  • 服务器上部署项目

在服务器上新建一个目录,将项目jar包和Dockerfile上传到该目录;我的目录如下:

 

  • 打镜像

在Dockefile所在目录执行命令:docker build -t adademo:1.1 .

上述命令最后有一个点要注意哦!表示在当前目录。执行完之后,检查是否成功打成了镜像

查看镜像命令:docker images

列出了你的镜像说明打成功了

 

  • 启动docker容器

执行命令:docker run -d --net=host adademo:1.1

ps : 我这里没有映射端口是因为后面有个坑,这里映射端口的话,jenkins构建的时候一直dump不了数据

至此项目启动成功了。可以查看项目的日志,查看步骤:

查看所有启动的容器:docker ps

 

查看项目日志:docker logs -f --tail=1000 容器id

当项目启动失败,同通过命令:docker ps -a # 查看启动失败的容器

 

坑!!!

  • docker build打镜像的时候,报错:ADD failed :stat **** : no such file or directory

 

原因1:dockerfile中需要ADD到镜像中的jar路径不对,原先我使用的是绝对路径。

ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具_第1张图片

其实dockerfile文件中的命令是以dockerfile所在目录为根目录,所以调整路径如下:

ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具_第2张图片

如果还是报错,那尝试一下在镜像中创建这个jar包,如上图标出的第二行

 

4、jenkins上集成gitLib

1)ubuntu16上安装jenkins

可参照:https://www.cnblogs.com/youcong/p/8710025.html

2)jenkins上安装插件

在jenkins管理 -- 插件管理 -- 可选插件 -- 搜索JaCoCo plugin 和 Docker Pipeline ,然后选中安装即可;安装完在已安装下可搜索到

ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具_第3张图片

3)新建pipeline任务

new item -- 选择流水线 -- 流水线定义处选择:pipeline script,然后将脚本复制进去即可

ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具_第4张图片

 

 

ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具_第5张图片

pipeline的脚本文件中credentialsId是jenkins中配置的凭证id , url是gitlab上项目的地址;-Djacoco.port是上面dockerfile中暴露的接口

pipeline {
    agent any
    tools {
        jdk 'JDK1.8'
    }
    stages {
        stage('Checkout'){
            steps{
                git branch: 'master', credentialsId: '17d50c1e-91b0-4db2-b147-********', url: 'git@git.******/jacoco-test.git'
            }
        }
        stage('Build') {
            steps{
                withMaven(maven: 'maven'){
                      sh "mvn clean package -Dmaven.test.skip=true"
                }
            }
        }
        stage('DumpFromServer'){
            steps {
                withMaven(maven: 'maven'){
                    sh 'mvn  -X  org.jacoco:jacoco-maven-plugin:0.8.2:dump -Djacoco.address=127.0.0.1 -Djacoco.port=6305'
                }
            }
        }
        stage('JacocoPublisher') {
            steps {
                 jacoco()
            }
        }
    }
}

 

ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具_第6张图片

构建任务,就可以生成测试报告了

 

ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具_第7张图片

 

 

gitlib配置jenkins凭证后面更新

你可能感兴趣的:(ubuntu16上搭建jacoco测试代码覆盖率工具ubuntu16上搭建jacoco测试代码覆盖率工具)