2012-01-14 19 views
7

Przeniosłem swoją pracę z pojedynczej maszyny Hudson do wielo-niewolniczego środowiska Jenkins, a teraz zasięg JaCoCo już nie działa."Pokrycie projektu ustawione jest na 0%" - JaCoCo i Sonar w Jenkins z Ant

robocza (stary): Hudson 2.0.1, Jenkins Sonar Plugin 1.7.1, Sonar 2.1.2

BROKEN (nowy): Jenkins 1,446, Jenkins Sonar Plugin 1.7.2, Sonar 2.1.2

Moja praca w Hudson nosi nazwę Pinnacle i była używana na jednym serwerze Hudson z Sonarem na tej samej maszynie. Ustawiłem moją (NIE MAVEN) kompilację wykonując następujące czynności.

1) Dodano Ant cel mojego build.xml zwanego test-with-coverage

2) skonfigurowane zadanie Pinnacle w Hudson, aby "wywołać autonomiczny Sonar Analysis" z tych właściwości:

sonar.projectKey=com.skyboximaging:pinnacle 
sonar.projectName="Pinnacle" 
sonar.projectVersion=1.0 
sources=Pinnacle/src/java 
tests=Pinnacle/test/java 
binaries=Pinnacle/classes 
sonar.jacoco.reportPath=Pinnacle/jacoco.exec 
sonar.jacoco.antTargets=test-with-coverage 

(Należy pamiętać, że kod jest wyrejestrowany w katalogu Pinnacle w obszarze roboczym pracy Jenkins.)

3) skonfigurowanego Sonar „Ogólne ustawienia”, by użyć JaCoCo dla pokrycia kodu

Wszystko działało pięknie!

Ale w nowym środowisku Jenkins, widzę ten błąd w Jenkins zbudować wyjście:

23:15:17.863 INFO Sensor JaCoCoSensor... 
23:15:17.868 INFO Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/workspace/Pinnacle/Pinnacle/jacoco.exec 

Ten plik nie istnieje na niewolnika gdzie budować biegł. (Katalog/var/lib/jenkins/workspace/Pinnacle/Pinnacle istnieje istnieje.)

Wygląda na to, że wszystkie inne czujniki (FindBugs, PMD itp.) Działają poprawnie. Po prostu JaCoCo jest zepsute.

Czy Sonar/JaCoCo działają nawet w środowisku multi-slave Jenkins?

Podejrzewam, że zadanie AN test-with-coverage nie jest uruchamiane. W jaki sposób Sonar lokalizuje plik build.xml? Czym różnią się stare i nowe instalacje?

Odpowiedz

9

Niedawno skonfigurowałem i pomyślnie uruchomiłem Sonar i Jacoco. Ponieważ jestem ostatnio w temacie, pomyślałem, że sprawdziłbym stackoverflow dla podobnych problemów i pomógłbym. Ja dostaję wyniki od Jacoco, ale okazało się, trzeba było jednoznacznie określić następujące parametry oprócz właściwości już wymienionych w poście:

sonar.core.codeCoveragePlugin=jacoco 
sonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec 
sonar.dynamicAnalysis=reuseReports 
sonar.surefire.reportsPath=tests/test-reports 

trzeba ustawić sonar.core.codeCoveragePlugin = jacoco jeśli chcesz móc korzystać z właściwości sonar.jacoco.reportPath. W przeciwnym razie będziesz musiał użyć właściwości sonar.jacoco.itReportPath. Zalecam jednak po prostu ustawienie właściwości codeCoveragePlugin i reportPath. W przeciwnym razie nie będzie wyświetlany pod domyślnym widgetem zasięgu w sonarze. Proszę zanotować, nie można używać domyślnego narzędzia zasięgu i jacoco razem. To musi być jeden lub drugi. Postanowiłem użyć Jacoco.

Twój mrowisko musi być skonfigurowane do generowania jacoco.Wyniki exec przed uruchomieniem sonaru zadania:

<jacoco:coverage enabled="${tests.code.coverage}" destfile="${jacoco.exec.dest}"> 
    <junit fork="yes" printsummary="withOutAndErr" dir="${tests.working.dir}"> 
    ... 

należy poinformować sonar do ponownego wykorzystania raportów i żadnych raportów Sunfire Jeśli używasz JUnit przed sonar, czyli jeśli używasz JUnit poza sonar:

sonar.dynamicAnalysis=reuseReports 
sonar.jacoco.reportPath=tests/jacoco-exec/jacoco.exec 
sonar.surefire.reportsPath=tests/test-reports 

z jakiegoś powodu, jeśli potrzebujesz dokładniejszych informacji debugowania, należy użyć następującą właściwość:

sonar.verbose = true

+0

dzięki! Wskaźnik do ustawienia sonar.jacoco.reportPath był ostatnim elementem, który potrzebowałem, aby uzyskać mój sonar z wieloma projektami, aby poprawnie załadować dane dotyczące zasięgu. –

+0

@Jason: jeśli używam raportów sahi zamiast junit, czy mogę używać raportów sahi (które są w html) w sonar.surefire.reportsPath – vinod