2009-09-03 31 views
31

Tôi đang viết một tập lệnh bash để tự động hóa quá trình xây dựng. có hai khối xây dựng chính, một là một nhiệm vụ kiến ​​và một là một đồng bằng cũ "mvn sạch cài đặt". tôi muốn làm một cái gì đó khi có lỗi xây dựng đến từ một trong hai quá trình xây dựng này.cách phát hiện lỗi xây dựng từ kiến ​​/ maven thông qua tập lệnh bash?

và sự cố là, các bản dựng này sẽ chứa lỗi hoặc lỗi kiểm tra theo thời gian, nhưng kết quả cuối cùng thành công. và tôi tin rằng mã trạng thái ($?) trả về bởi các quá trình này nên là 0 cho dù xây dựng thất bại hay thành công, tôi có thể sai.

vậy cách tốt nhất để tập lệnh của tôi phát hiện kết quả cuối cùng là gì (xây dựng không thành công/thành công) mà không bắt gặp thông tin sai lệch trong quá trình xây dựng giữa (lỗi kiểm tra, v.v ...)?

+2

Công cụ phải trả về trạng thái thoát thích hợp. – derobert

+0

Tôi thực sự không chắc chắn về trạng thái thoát đối với kiến ​​/ maven là gì, tôi chỉ giả định rằng chúng sẽ trả về 0 ngay cả khi không thành công. vì vậy bạn có nói rằng họ sẽ trả về giá trị khác không khi xây dựng thất bại? điều đó sẽ làm cho cuộc sống của tôi dễ dàng hơn nhiều. – fei

+0

Nếu các bài kiểm tra của bạn đôi khi vượt qua và đôi khi không thành công và bạn không quan tâm theo cách nào, tại sao bạn phải bận tâm đến chúng như một phần của bản dựng? –

Trả lời

4

Theo Ant manual:

các kiến ​​bắt đầu lên kịch bản (trong Windows và Unix phiên bản của họ) trả về mã trở lại của chương trình java. Vì vậy, một xây dựng thành công trả về 0, không xây dựng trả về các giá trị khác.

Maven cũng trả về mã thoát không phải do lỗi. Dưới đây là a link cho biết cách thẩm vấn trạng thái này bằng API yêu cầu Maven.

Vì vậy, có vẻ như với tôi rằng bạn sẽ có thể xử lý rõ ràng mã trả lại trong tập lệnh của mình. Có lẽ bạn có thể bỏ qua các mã lỗi liên quan đến các bài kiểm tra, v.v. nếu đó không phải là mối quan tâm của bạn.

exec mã lỗi trong Ant là hệ điều hành cụ thể. Đây có thể giúp bạn:

3

Đây là chính xác những gì tôi làm để có được kết quả bạn muốn.

11

Có một số vấn đề với Maven 2 trả về mã trả về không chính xác (nghĩa là luôn trả về 0). Đáng chú ý là MNG-3651 đã được sửa trong Maven 2.0.9.

Trong phiên bản cũ, mvn.bat kết thúc với dòng này:

exit /B %ERROR_CODE% 

Từ Maven 2.0.9 trở đi, dòng cuối cùng đã được thay đổi như sau:

cmd /C exit /B %ERROR_CODE% 

Vì vậy, một tổ chức phi-0 mã trả lại được trả lại nếu quá trình tạo không thành công. Trong trường hợp của một ERROR xây dựng mã trả về là 1. Nếu bạn không thể nâng cấp lên 2.0.9+, bạn có thể xem xét sửa đổi mvn.bat như trên để trả về mã đúng.

36
mvn clean test 
rc=$? 
if [[ $rc -ne 0 ]] ; then 
    echo 'could not perform tests'; exit $rc 
fi 
+4

Sẽ tốt hơn nếu bạn có thể giải thích thêm về câu trả lời này. Làm thế nào và tại sao điều này trả lời câu hỏi tốt hơn so với các câu trả lời khác? – nietonfir

+1

Tôi thích câu trả lời này tốt nhất. Tôi googled làm thế nào để xử lý các mã lỗi từ mvn trong một kịch bản bash và câu trả lời của Renaud phù hợp với các hóa đơn hoàn hảo. Tôi nghi ngờ Fei đã kết thúc bằng cách sử dụng một kỹ thuật giống như thế này sau khi phát hiện ra rằng mvn sẽ trả về một mã không khác để kiểm tra thất bại. –

+0

Hầu như hoàn hảo - nhưng tôi sẽ sử dụng dấu ngoặc kép, nếu bạn thực sự muốn so sánh chuỗi đó (xem https://www.gnu.org/software/bash/manual/bashref.html/search for "=="), hoặc "-ne", là toán tử so sánh cho các số nguyên (unquoted). – cslotty

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