Đầu tiên, hãy di chuột qua vùng màu xám bên dưới. Không phải là một phần của câu trả lời, nhưng hoàn toàn phải nói:
Nếu bạn có một tập lệnh shell tự nó "kiểm tra, xây dựng, triển khai", thì tại sao bạn lại sử dụng Jenkins? Bạn đang bỏ qua tất cả các tính năng của Jenkins làm cho nó như thế nào. Bạn cũng có thể có một cron hoặc một hook sau cam kết SVN gọi script trực tiếp. Jenkins thực hiện kiểm tra SVN chính nó là rất quan trọng. Nó cho phép các bản dựng chỉ được kích hoạt khi có thay đổi (hoặc hẹn giờ, hoặc thủ công, nếu bạn muốn). Nó theo dõi các thay đổi giữa các bản dựng. Nó hiển thị những thay đổi đó, vì vậy bạn có thể xem bản dựng nào dành cho tập hợp thay đổi nào. Nó gửi email cho những người cam kết khi các thay đổi của họ gây ra việc xây dựng thành công hoặc không thành công (một lần nữa, như được định cấu hình theo ý bạn). Nó sẽ gửi email cho những người cam kết khi bản sửa lỗi của họ đã khắc phục được bản dựng không thành công. Và nhiều hơn nữa. Jenkins lưu trữ các hiện vật cũng làm cho chúng có sẵn, mỗi bản dựng, ngay lập tức Jenkins. Mặc dù không quan trọng như thanh toán SVN, nhưng đây một lần nữa là một phần không thể thiếu làm nên Jenkins. Tương tự với triển khai. Trừ khi bạn có một môi trường duy nhất, việc triển khai thường xảy ra với nhiều môi trường. Jenkins có thể theo dõi môi trường nào mà một bản dựng cụ thể (với tập hợp các thay đổi SVN cụ thể) được triển khai nó, thông qua việc sử dụng Chương trình khuyến mãi. Bạn đang nói trước tất cả những điều này. Nghe có vẻ như bạn được nói rằng "bạn phải sử dụng Jenkins" nhưng bạn không thực sự muốn và bạn đang làm điều đó chỉ để khiến các ông chủ của bạn không ủng hộ bạn, chỉ để đánh dấu chọn "vâng, tôi đã sử dụng Jenkins"
Câu trả lời ngắn gọn là: mã thoát của lệnh cuối cùng của bước xây dựng Jenkin's Execute Shell là yếu tố quyết định sự thành công / thất bại của Bước xây dựng . 0
- thành công, anything else
- thất bại. Lưu ý, điều này quyết định sự thành công / thất bại của bước xây dựng , không phải toàn bộ quá trình chạy . Sự thành công / thất bại của toàn bộ quá trình chạy công việc có thể bị ảnh hưởng thêm bởi nhiều bước xây dựng, các hành động và plugin sau xây dựng.
Bạn đã đề cập Build step 'Execute shell' marked build as failure
, vì vậy chúng tôi sẽ chỉ tập trung vào một bước xây dựng duy nhất. Nếu bước xây dựng shell Execute của bạn chỉ có một dòng duy nhất gọi shell script của bạn, thì mã thoát của shell script của bạn sẽ xác định sự thành công / thất bại của bước xây dựng. Nếu bạn có nhiều dòng hơn, sau khi thực hiện shell script, hãy xem xét cẩn thận chúng, vì chúng là những dòng có thể gây ra lỗi.
Cuối cùng, hãy đọc ở đây Jenkins Build Script thoát sau khi thực thi Google Test . Nó không liên quan trực tiếp đến câu hỏi của bạn, nhưng lưu ý rằng một phần về việc Jenkins khởi chạy bước xây dựng Execute Shell , như một tập lệnh shell với/bin/sh -xe
Điều -e
đó có nghĩa là shell script sẽ thoát ra khi bị lỗi, ngay cả khi chỉ 1 lệnh bị lỗi, ngay cả khi bạn thực hiện kiểm tra lỗi cho lệnh đó (vì script thoát ra trước khi nó được kiểm tra lỗi của bạn). Điều này trái với việc thực thi bình thường của các tập lệnh shell, thường in thông báo lỗi cho lệnh bị lỗi (hoặc chuyển hướng nó thành null và xử lý nó bằng cách khác) và tiếp tục.
Để tránh điều này, hãy thêm set +e
vào đầu tập lệnh shell của bạn.
Vì bạn nói rằng tập lệnh của bạn làm tất cả những gì nó phải làm, rất có thể lệnh thất bại nằm ở đâu đó ở cuối tập lệnh. Có thể là một tiếng vọng cuối cùng? Hay bản sao hiện vật ở đâu đó? Không nhìn thấy đầu ra đầy đủ của bảng điều khiển, chúng tôi chỉ phỏng đoán.
Vui lòng đăng đầu ra bảng điều khiển của lệnh chạy công việc và tốt nhất là bản thân tập lệnh shell, và sau đó chúng tôi có thể cho bạn biết chính xác dòng nào bị lỗi.