jacoco 的覆盖率获得有 file tcpserver tcpclient 三种模式。但是公司的服务器是 docker 动态分配的,有空闲的资源就把服务分布过去,所以服务器的 ip 不确定,不能用 tcpserver 和 file 模式。现在考虑用 tcpclient 的形式来获得,个人不太清楚这种模式下要如何拿到 jacoco.exec?是需要自己写一个 server 么?求各位大神不吝赐教啊!
你用域名不就行了? 另外也可以改造下,反向推送出去。
我试了源码的 ExecutionDataServer 启动了 server,不过每次跑出来的结果都是空的。。
ip 动态没关系,你们有 cmdb 系统么?封装个根据应用取 IP 的接口就行了。
我记得用法是差不多的,只不过你需要先启动一个本地监听的服务器,jacoco 本身有提供,类名是 ExecutionDataServer.java,需要配置远程服务器地址和本地的监听端口。服务器上需要配置启动监听的服务器地址和端口。覆盖率数据会自动上传到你监听服务器设定的路径里,并生成 exec 文件。
没错,这个我试过了,不过一开始 exec 文件一直只有头内容,我把服务器 jvm 停掉后就会触发钩子写进 exec 文件了。不知道是不是 client 这种模式也是要停 jvm 的,还是我哪里做的有问题?
tcpserver 设置动态覆盖率收集,手动调用 dump 出 exec 文件,可以不停 jvm。tcpclient 原理应该差不多吧,没试过。
是需要停服务的,不然数据不上传
我也是同样的问题,应用容器化部署了~用的 tcpsever 模式启动后会有两个不同的 pid,导致覆盖率统计都是 0
容器中使用 0.0.0.0 这个 ip 进行绑定。就可以实际获取的容器 node 的 ip
填 0.0.0.0 然后通过实际容器 ip 就可以访问到