Một câu trả lời khác với một số lời khuyên, có thể hữu ích cho ai đó:
nhớ tách các lệnh của bạn theo quy tắc sau :
lệnh1 && lệnh2 - có nghĩa là, lệnh2 sẽ được thực thi, chỉ khi lệnh1 thành công
lệnh1 ; lệnh2 - có nghĩa là, lệnh 2 đó sẽ được thực thi mặc dù kết quả của lệnh1
ví dụ:
String run_tests = sh(script: "set +e && cd ~/development/tests/ && gmake test ;set -e;echo 0 ", returnStdout: true).trim()
println run_tests
sẽ được thực hiện thành công với set -e
và echo 0
các lệnh nếu gmake test
thất bại (các thử nghiệm của bạn không thành công), trong khi đoạn mã sau bị cắt:
String run_tests = sh(script: "set +e && cd ~/development/tests/ && gmake test && set -e && echo 0 ", returnStdout: true).trim()
println run_tests
một chút sai và các lệnh set -e
và echo 0
in && gmake test && set -e && echo 0
sẽ bị bỏ qua, với println run_tests
câu lệnh, bởi vì thất bại gmake test
sẽ hủy bỏ việc xây dựng jenkins. Giải pháp thay thế bạn có thể chuyển sang returnStatus:true
, nhưng sau đó bạn sẽ bỏ lỡ đầu ra từ lệnh của bạn.