docker环境下的代码覆盖率统计
项目后期使用了docker部署,于是尝试了一下在docker环境部署实现代码覆盖率的统计。
一点尝试
参考之前使用jacoco的方法,进入一个已开启的镜像,将jacoco放入镜像中,在镜像内修改启动脚本,配置jacoco路径、dumpdir等项目。
mark其中关于address项,一开始将address设置为127.0.0.1,重启程序时报错,经过几次错误实验后修改为容器ip,即在镜像内通过ifconfig得到的ip。但是如果每次都进入镜像去查看ip的话未免太麻烦,在kube主机上通过kubectl get po -o wide
命令可见所有容器的信息,其中就有容器的ip。
重启程序后ps -ef | grep java,可见jacoco已启动监听。
两点尝试
将jacoco放入基础镜像中,将新的镜像submit并push到镜像库中。使用新的基础镜像制作新的镜像。
启动新的镜像:
docker run -d -p 31000:6300 name bash
修改ant中的build.xml文件,其中端口设置为容器外部端口31000
mark在ant的bin目录执行ant dump,在basedir下可以找到生成的exec文件。
<project name="testCodeCoveage" basedir="/home/jxsw/apache-ant-1.10.1/bin/report" xmlns:jacoco="antlib:org.jacoco.ant" xmlns:sonar="antlib:org.sonar.ant" default="all">
三点尝试
已有的classpath配置:
<property name="revenueClasspath" value="/home/jxsw/apache-ant-1.10.1/bin/report/class/test" />
将已配置在启动文件中的dump class拷贝出来:
docker cp id:/home/classes/ /home/jxsw/apache-ant-1.10.1/bin/report/class/test/
如果需要拷贝cp后路径下的文件夹,路径最后要加"/"。
拷贝后执行ant report,就可以在指定路径下得到report文件啦。
Note
在整个过程中遇到了几个坑:
1、启动文件中的ip问题,一开始写成了容器所在node机器的ip,后来写成了127.0.0.1,最后以尝试一次的想法终于写对了。关键在于没有对jacoco的原理理解透彻,还是需要对原理深入理解。https://testerhome.com/topics/5757
2、docker submit之后在harbor中没有找到镜像,因为没有push…
又一个愚蠢的错误,记录在这里提醒自己。
3、docker和kube的相关知识还是需要补充一下的嗯。
之后大概会更新一些java相关的东西吧,但愿自己执行力上得来唔…