公司最近要代码覆盖率收集,做了些调研,目前java/kotlin based的服务基本上是通过jacoco on-the-fly方式注入然后获取覆盖率数据,主要包括agent注入和覆盖率数据收集两块,请教两个问题:
- 关于jacoco agent 注入
由于公司目前基本上是通过k8s+argocd来部署各个服务,经过调研可以通过iniContainer共享agent jar文件然后通过添加JAVA OPTIONS环境变量,这样服务启动的时候会自动注入该agent,但会带来一个问题,这个方案需要修改helm charts,而不同的k8s集群使用的helm charts是不同的,这样就需要相同的配置在不同的charts上都需要修改,开发和维护都不方便,是否可以进行动态添加配置呢. (另外直接加到服务的docker image也是很不方便的,不同的服务的docker image构建都是不同的) - 关于数据dump
tcpserver模式获取覆盖率数据需要pod ip,而pod ip在k8S里面不是固定的,所以不能通过ip方式。我在想是不是可以各个k8s 集群都部署一个服务(参考过饿了么的super-jacoco),通过服务名找到pod,通过kubectl exec以及cp来dump覆盖率数据以及上传到ftp服务中,但这个方案可能有个问题,如果pod重启了,数据会丢失,所以另外了解到是否可以通过sidecar容器方式来定期上传覆盖率数据,但是k8s这块不是很熟,不确定是否可行
不知有没有一个经过实践的较成熟的方案来参考,感谢~