자주하는 질문
그때부터 머릿속에서 나오는 질문은 자 코코에 미쳐 버렸다.
이라크, 시리아에있는 내 애플리케이션 서버 (jBoss, Glassfish ..)는 무엇이든 .. 통합 테스트를 실행할 때 다중 모듈 커버리지를 얻을 수 있습니까? Jenkins와 Sonar도 다른 서버에 있습니다.
예. 당신은 사용할 필요가 jacoco 에이전트를 해당 모드에서 실행 output=tcpserver
, jacoco 개미 LIB. 기본적으로 두 jar
s. 이것은 당신에게 99 %의 성공을 줄 것입니다.
jacoco 에이전트는 어떻게 작동합니까?
문자열을 추가합니다.
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
애플리케이션 서버 JAVA_OPTS에 연결하고 다시 시작하십시오. 이 문자열 [your_path]
에서 앱 서버가 실행되는 VM에 저장된 (저장!) jacocoagent.jar의 경로 로만 교체하면됩니다. 그 이후로 앱 서버를 시작하면 배포 된 모든 애플리케이션이 동적으로 모니터링되고 해당 활동 (코드 사용을 의미)이 tcl 요청에 의해 jacocos .exec 형식으로 가져올 준비가됩니다.
테스트 시작 이후에만 실행 데이터 수집을 시작하도록 jacoco 에이전트를 재설정 할 수 있습니까?
예,이를 위해서는 jenkins 작업 공간에있는 jacocoant.jar 및 ant 빌드 스크립트가 필요합니다.
그래서 기본적으로 http://www.eclemma.org/jacoco/에서 필요한 것은 내 jenkins 작업 공간에있는 jacocoant.jar이고 내 앱 서버 VM에있는 jacocoagent.jar입니까?
맞습니다.
나는 개미를 사용하고 싶지 않다. 나는 jacoco maven 플러그인이 모든 것을 할 수 있다고 들었다.
맞지 않습니다. jacoco maven 플러그인은 단위 테스트 데이터와 일부 통합 테스트 데이터 ( Arquillian Jacoco 참조 )를 수집 할 수 있지만, 예를 들어 젠킨스에서 별도의 빌드로 안심하고 테스트 할 수 있고 다중 모듈 적용 범위를 표시하려면 다음을 수행 할 수 있습니다. maven 플러그인이 어떻게 당신을 도울 수 있는지 보지 못합니다.
jacoco 에이전트는 정확히 무엇을 생산합니까?
.exec
형식의 커버리지 데이터 만 . 그러면 Sonar는이를 읽을 수 있습니다.
jacoco는 내 Java 클래스가 어디에 있는지 알아야합니까?
아니, 소나는 있지만 jacoco는 아닙니다. mvn sonar:sonar
수업 을 할 때 경로가 작용합니다.
그렇다면 개미 스크립트는 어떻습니까?
그것은 당신의 젠킨스 작업 공간에 제시되어야합니다. 내 개미 스크립트, 나는 jacoco.xml
다음과 같이 불렀다 .
<project name="Jacoco library to collect code coverage remotely" xmlns:jacoco="antlib:org.jacoco.ant">
<property name="jacoco.port" value="6300"/>
<property name="jacocoReportFile" location="${workspace}/it-jacoco.exec"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${workspace}/tools/jacoco/jacocoant.jar"/>
</taskdef>
<target name="jacocoReport">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" dump="true" reset="true" destfile="${jacocoReportFile}" append="false"/>
</target>
<target name="jacocoReset">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" reset="true" destfile="${jacocoReportFile}" append="false"/>
<delete file="${jacocoReportFile}"/>
</target>
</project>
이 스크립트를 호출 할 때 전달해야하는 두 개의 필수 매개 변수는이를
-Dworkspace=$WORKSPACE
사용하여 jenkins 작업 공간을 가리키고 -Djacoco.host=yourappserver.com
호스트없이http://
또한 jacocoant.jar
$ {workspace} /tools/jacoco/jacocoant.jar에 넣었습니다.
다음에 무엇을해야합니까?
jacocoagent.jar로 앱 서버를 시작 했습니까?
젠킨스 작업 공간에 ant 스크립트와 jacocoant.jar를 넣었습니까?
그렇다면 마지막 단계는 젠킨스 빌드를 구성하는 것입니다. 전략은 다음과 같습니다.
- ant target
jacocoReset
을 호출 하여 이전에 수집 된 모든 데이터를 재설정합니다.
- 테스트 실행
- ant target
jacocoReport
을 호출 하여 보고서를받습니다.
모든 것이 맞으면 it-jacoco.exec
빌드 작업 공간에 표시됩니다.
스크린 샷을보세요. 저는 또한 dir의 ant
내 작업 공간에 설치 $WORKSPACE/tools/ant
했지만 젠킨스에 설치된 것을 사용할 수 있습니다.
이 보고서를 소나로 푸시하는 방법은 무엇입니까?
Maven sonar:sonar
이 작업을 수행하고 (구성하는 것을 잊지 마십시오) 모든 모듈을 통해 실행되도록 main pom.xml을 가리 킵니다. sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
매개 변수를 사용 하여 통합 테스트 보고서의 위치를 소나에 알립니다. 새 모듈 클래스를 분석 할 때마다 it-jacoco.exec
.
이미`target` 디렉토리에 jacoco.exec가 있습니다.`mvn sonar : sonar`는이를 무시 / 제거합니다.
기본으로 mvn sonar:sonar
수행 clean
하고 대상 디렉토리를 삭제, 사용 sonar.dynamicAnalysis=reuseReports
을 방지하기 위해.