背景:使用jacoco来统计代码测试覆盖率,并集成到jenkins上。因为我是调研jacoco的,所以自己写了一个很简单的springboot项目,部署到docker,然后使用jacoco来统计测试这个demo的代码覆盖率的。
工具:gitLib 、maven、jenkins、docker
搭建过程
网上很多搭建springboot项目的案例,我也是百度后照着来的,这里不赘述
可参考:https://www.jianshu.com/p/397929dbc27d
本地使用比较简单,不做记录
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
sudo apt-get remove docker docker-engine docker-ce docker.io
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
docker --version
当提示docker 版本就说明docker安装成功了
3)配置项目镜像
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包
#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 run -d --net=host adademo:1.1
ps : 我这里没有映射端口是因为后面有个坑,这里映射端口的话,jenkins构建的时候一直dump不了数据
至此项目启动成功了。可以查看项目的日志,查看步骤:
查看所有启动的容器:docker ps
查看项目日志:docker logs -f --tail=1000 容器id
当项目启动失败,同通过命令:docker ps -a # 查看启动失败的容器
原因1:dockerfile中需要ADD到镜像中的jar路径不对,原先我使用的是绝对路径。
其实dockerfile文件中的命令是以dockerfile所在目录为根目录,所以调整路径如下:
如果还是报错,那尝试一下在镜像中创建这个jar包,如上图标出的第二行
1)ubuntu16上安装jenkins
可参照:https://www.cnblogs.com/youcong/p/8710025.html
2)jenkins上安装插件
在jenkins管理 -- 插件管理 -- 可选插件 -- 搜索JaCoCo plugin 和 Docker Pipeline ,然后选中安装即可;安装完在已安装下可搜索到
3)新建pipeline任务
new item -- 选择流水线 -- 流水线定义处选择:pipeline script,然后将脚本复制进去即可
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()
}
}
}
}
构建任务,就可以生成测试报告了
gitlib配置jenkins凭证后面更新