从 GitLab-CI 中的 docker 容器中提取测试覆盖率
Extract test coverage from the docker container in GitLab-CI
我正在使用 GitLab-CI 和 运行 在 Gradle 的帮助下构建的 java 应用程序。
Docker 容器中有一个应用程序 运行。同时,作业 automation 与 java 应用程序一起运行 ApiTestSuite 测试套件。
问题是: ApiTestSuite 套件结束后,如何从运行 应用程序中获取测试覆盖率?
这是 GitLab 作业的简化版本:
automation:
stage: validate
tags:
- dind
variables:
PROFILE: some-profile
services:
- docker:stable-dind
- redis:5-alpine
- webcenter/activemq
before_script:
- docker run --detach --name MY_APPLICATION
script:
- ./gradlew ApiTestSuite
我可以在 运行 个单元测试用例时获取代码覆盖率,但在理解如何为上面的示例实施它时遇到一些问题。
提前谢谢你:)
- 告诉java使用JaCoCo代理,而运行容器内的应用程序
-javaagent:/home/java/jacoco.jar=destfile=folder_inside_contrainer/jacoco-it.exec,append=true
- 配置代理将结果写入folder_inside_contrainer
replace *folder_inside_contrainer* with the one you will share with the host later on
- 在容器和主机之间共享文件夹 folder_inside_contrainer(在本例中为 GitLab 作业)
docker run -d -v gitlab_folder:folder_inside_contrainer
- 通过 JaCoCo-cli.jar
将 .exec 格式的结果导出为 .html 格式
java -jar jacococli.jar report gitlab_folder/jacoco-it.exec --classfiles path_to_app_compiled_classes --html coverage/api-coverage-html
- 从 HTML 中获取覆盖范围并为该作业显示它
api-coverage:
stage: release
script:
- 'apt-get install -y unzip'
- 'curl -L "https://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.6/jacoco-0.8.6.zip" -o jacoco.zip'
- 'unzip jacoco'
- 'java -jar lib/jacococli.jar report gitlab_folder/jacoco-it.exec --classfiles path_to_app_compiled_classes --html coverage/api-coverage-html'
- grep -oP "Total.*?([0-9]{1,3})%" coverage/api-coverage-html/index.html
coverage: "/Total.*?([0-9]{1,3})%/"
artifacts:
paths:
- coverage/
我正在使用 GitLab-CI 和 运行 在 Gradle 的帮助下构建的 java 应用程序。
Docker 容器中有一个应用程序 运行。同时,作业 automation 与 java 应用程序一起运行 ApiTestSuite 测试套件。
问题是: ApiTestSuite 套件结束后,如何从运行 应用程序中获取测试覆盖率?
这是 GitLab 作业的简化版本:
automation:
stage: validate
tags:
- dind
variables:
PROFILE: some-profile
services:
- docker:stable-dind
- redis:5-alpine
- webcenter/activemq
before_script:
- docker run --detach --name MY_APPLICATION
script:
- ./gradlew ApiTestSuite
我可以在 运行 个单元测试用例时获取代码覆盖率,但在理解如何为上面的示例实施它时遇到一些问题。
提前谢谢你:)
- 告诉java使用JaCoCo代理,而运行容器内的应用程序
-javaagent:/home/java/jacoco.jar=destfile=folder_inside_contrainer/jacoco-it.exec,append=true
- 配置代理将结果写入folder_inside_contrainer
replace *folder_inside_contrainer* with the one you will share with the host later on
- 在容器和主机之间共享文件夹 folder_inside_contrainer(在本例中为 GitLab 作业)
docker run -d -v gitlab_folder:folder_inside_contrainer
- 通过 JaCoCo-cli.jar 将 .exec 格式的结果导出为 .html 格式
java -jar jacococli.jar report gitlab_folder/jacoco-it.exec --classfiles path_to_app_compiled_classes --html coverage/api-coverage-html
- 从 HTML 中获取覆盖范围并为该作业显示它
api-coverage:
stage: release
script:
- 'apt-get install -y unzip'
- 'curl -L "https://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.6/jacoco-0.8.6.zip" -o jacoco.zip'
- 'unzip jacoco'
- 'java -jar lib/jacococli.jar report gitlab_folder/jacoco-it.exec --classfiles path_to_app_compiled_classes --html coverage/api-coverage-html'
- grep -oP "Total.*?([0-9]{1,3})%" coverage/api-coverage-html/index.html
coverage: "/Total.*?([0-9]{1,3})%/"
artifacts:
paths:
- coverage/