Câu hỏi thường gặp
Những câu hỏi từ đỉnh đầu của tôi kể từ lúc đó tôi phát điên với jacoco.
Máy chủ ứng dụng của tôi (jBoss, Glassfish ..) ở Iraq, Syria, bất cứ điều gì .. Có thể có được phạm vi bảo hiểm đa mô-đun khi chạy thử nghiệm tích hợp trên nó không? Jenkins và Sonar cũng ở trên các máy chủ khác nhau.
Đúng. Bạn phải sử dụng đại lý jacoco chạy trong chế độ output=tcpserver
, jacoco ant lib. Về cơ bản hai jar
s. Điều này sẽ mang lại cho bạn thành công 99%.
Đại lý jacoco hoạt động như thế nào?
Bạn nối một chuỗi
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
đến máy chủ ứng dụng của bạn JAVA_OPTS và khởi động lại nó. Trong chuỗi này chỉ [your_path]
phải được thay thế bằng đường dẫn đến jacocoagent.jar, được lưu trữ (lưu trữ nó!) Trên máy ảo của bạn nơi máy chủ ứng dụng chạy. Kể từ thời điểm bạn khởi động máy chủ ứng dụng, tất cả các ứng dụng được triển khai sẽ được theo dõi động và hoạt động của chúng (có nghĩa là sử dụng mã) sẽ sẵn sàng để bạn có được định dạng jacocos .exec theo yêu cầu tcl.
Tôi có thể đặt lại đại lý jacoco để bắt đầu thu thập dữ liệu thực hiện kể từ khi thử nghiệm bắt đầu không?
Có, với mục đích đó, bạn cần jacocoant.jar và tập lệnh xây dựng kiến nằm trong không gian làm việc của jenkins.
Vì vậy, về cơ bản những gì tôi cần từ http://www.eclemma.org/jacoco/ là jacocoant.jar nằm trong không gian làm việc jenkins của tôi và jacocoagent.jar nằm trên máy chủ ứng dụng VM của tôi?
Đúng rồi.
Tôi không muốn sử dụng kiến, tôi đã nghe nói rằng plugin jacoco maven cũng có thể làm tất cả mọi thứ.
Điều đó không đúng, plugin jacoco maven có thể thu thập dữ liệu thử nghiệm đơn vị và một số dữ liệu thử nghiệm tích hợp (xem Arquillian Jacoco ), nhưng nếu bạn yên tâm thử nghiệm như một bản dựng riêng biệt trong jenkins và muốn hiển thị phạm vi đa mô-đun, tôi có thể Tôi không thấy plugin maven có thể giúp bạn như thế nào.
Chính xác thì đại lý jacoco sản xuất những gì?
Chỉ có dữ liệu bảo hiểm ở .exec
định dạng. Sonar sau đó có thể đọc nó.
Có phải jacoco cần biết các lớp java của tôi nằm ở đâu không?
Không, sonar nào, nhưng không phải jacoco. Khi bạn làm mvn sonar:sonar
đường dẫn đến lớp học đi vào chơi.
Vậy còn đoạn script ant thì sao?
Nó phải được trình bày trong không gian làm việc của jenkins. Kịch bản ant của tôi, tôi gọi nó là jacoco.xml
như thế:
<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>
Hai thông số bắt buộc bạn phải vượt qua khi gọi tập lệnh này
-Dworkspace=$WORKSPACE
sử dụng nó để trỏ đến không gian làm việc và -Djacoco.host=yourappserver.com
máy chủ jenkins của bạn mà không cầnhttp://
Cũng lưu ý rằng tôi đặt jacocoant.jar
$ {workspace} /tools/jacoco/jacocoant.jar
Tôi nên làm gì tiếp theo?
Bạn đã khởi động máy chủ ứng dụng của mình với jacocoagent.jar chưa?
Bạn đã đặt ant script và jacocoant.jar trong không gian làm việc của jenkins chưa?
Nếu có, bước cuối cùng là cấu hình một bản dựng jenkins. Đây là chiến lược:
- Gọi mục tiêu kiến
jacocoReset
để thiết lập lại tất cả dữ liệu được thu thập trước đó.
- Chạy thử nghiệm của bạn
- Gọi mục tiêu kiến
jacocoReport
để nhận báo cáo
Nếu mọi thứ đều đúng, bạn sẽ thấy it-jacoco.exec
trong không gian làm việc xây dựng của mình.
Nhìn vào ảnh chụp màn hình, tôi cũng đã ant
cài đặt trong không gian làm việc của mình trong $WORKSPACE/tools/ant
thư mục, nhưng bạn có thể sử dụng một ảnh được cài đặt trong jenkins của bạn.
Làm thế nào để đẩy báo cáo này trong sonar?
Maven sonar:sonar
sẽ thực hiện công việc (đừng quên cấu hình nó), trỏ nó vào pom.xml chính để nó sẽ chạy qua tất cả các mô-đun. Sử dụng sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
tham số để báo cho sonar nơi báo cáo kiểm tra tích hợp của bạn được đặt. Mỗi lần nó sẽ phân tích các lớp mô-đun mới, nó sẽ tìm kiếm thông tin về phạm vi bảo hiểm it-jacoco.exec
.
Tôi đã có jacoco.exec trong thư mục `target` của tôi,` mvn sonar: sonar` bỏ qua / xóa nó
Theo mặc định mvn sonar:sonar
làm clean
và xóa thư mục mục tiêu của bạn, sử dụng sonar.dynamicAnalysis=reuseReports
để tránh nó.