2012-01-14 37 views
7

Tôi chuyển công việc của mình từ một máy Hudson sang môi trường Jenkins đa nô lệ và bây giờ bảo hiểm JaCoCo không còn hoạt động nữa."Phạm vi dự án được đặt thành 0%" - JaCoCo và Sonar ở Jenkins với Ant

LÀM VIỆC (cũ): Hudson 2.0.1, Jenkins Sonar Plugin 1.7.1, Sonar 2.1.2

GÃY (mới): Jenkins 1,446, Jenkins Sonar Plugin 1.7.2, Sonar 2.1.2

Công việc Hudson của tôi được gọi là Pinnacle và nó được sử dụng để chạy trên một máy chủ Hudson với Sonar trên cùng một máy. Tôi đã thiết lập bản dựng (KHÔNG MAVEN) của tôi bằng cách làm như sau.

1) Thêm một mục tiêu Ant build.xml tôi gọi test-with-coverage

2) Cấu hình công việc Pinnacle tại Hudson để "gọi Phân tích Sonar độc lập" với các đặc tính này:

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 

(Lưu ý rằng mã được kiểm tra vào thư mục Pinnacle trong không gian làm việc Jenkins.)

3) Cấu hình Sonar "cài đặt chung" để sử dụng JaCoCo cho phạm vi mã

Mọi thứ hoạt động tốt đẹp!

Nhưng trong môi trường Jenkins mới, tôi thấy lỗi này trong Jenkins xây dựng đầu ra:

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 

Đó tập tin không tồn tại trên các nô lệ nơi xây dựng chạy. (Thư mục/var/lib/jenkins/không gian làm việc/Pinnacle/Pinnacle hiện tồn tại.)

Tất cả các cảm biến khác (FindBugs, PMD, v.v ...) có vẻ hoạt động OK. Chỉ cần JaCoCo bị hỏng.

Sonar/JaCoCo có hoạt động trong môi trường Jenkins đa nô lệ không?

Tôi nghi ngờ rằng nhiệm vụ Ant test-with-coverage không hoạt động. Sonar định vị tệp build.xml như thế nào? Và những gì là khác nhau giữa cài đặt cũ và mới?

Trả lời

9

Gần đây tôi đã thiết lập và thành công với Sonar và Jacoco đang chạy cùng nhau. Vì gần đây tôi đã có chủ đề, tôi đã tìm ra tôi sẽ kiểm tra stackoverflow cho các vấn đề tương tự và giúp đỡ. Tôi nhận được kết quả từ Jacoco, nhưng thấy bạn phải thiết lập một cách rõ ràng các thông số sau, thêm vào các thuộc tính bạn đã liệt kê trong bài viết của bạn:

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

Bạn phải thiết lập sonar.core.codeCoveragePlugin = jacoco nếu bạn muốn có thể sử dụng thuộc tính sonar.jacoco.reportPath. Nếu không, bạn sẽ phải sử dụng thuộc tính sonar.jacoco.itReportPath. Tuy nhiên, tôi khuyên bạn chỉ nên đặt thuộc tính codeCoveragePlugin và reportPath. Nếu không, nó sẽ không hiển thị dưới tiện ích phủ sóng mặc định trong sonar. Xin lưu ý, bạn không thể sử dụng công cụ bảo hiểm mặc định và jacoco cùng nhau. Nó phải là cái này hay cái kia. Tôi quyết định sử dụng Jacoco.

Mục tiêu kiến ​​của bạn phải được định cấu hình để tạo ra các câu đố.kết quả exec trước khi chạy các nhiệm vụ sonar:

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

Hãy chắc chắn để nói với sonar để tái sử dụng các báo cáo và bất kỳ báo cáo Sunfire nếu bạn đang chạy junit trước sonar, có nghĩa là nếu bạn đang chạy junit ngoài sonar:

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

Đối với bất cứ lý do nào, nếu bạn cần gỡ lỗi tiết hơn, sử dụng các tài sản sau đây:

sonar.verbose = true

+0

Cảm ơn! Con trỏ để thiết lập sonar.jacoco.reportPath là bit cuối cùng tôi cần để có được sonar ant đa dự án của tôi để tải dữ liệu vùng phủ sóng một cách chính xác. –

+0

@ Jason: nếu tôi đang sử dụng sahi thay vì báo cáo junit thì tôi có thể sử dụng báo cáo sahi (có trong html) trong sonar.surefire.reportsPath không – vinod

Các vấn đề liên quan