Làm cách nào để thiết lập `killSoftly` cho một công việc Jenkins cụ thể?


11

Bản dựng Jenkins của tôi bị treo giữa các bước xây dựng và hậu xây dựng.

Đầu ra giao diện điều khiển cho thấy có thời gian chờ 6 phút (nhưng tôi đã thấy thời gian chờ lên tới một giờ):

10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0

Tôi tìm thấy nàynày câu hỏi mà có vấn đề tương tự, và họ nói là giải pháp được thiết lập -DSoftKillWaitSeconds=0trong jenkins.xml.

Tuy nhiên, tôi cần một cách để chỉ đặt tùy chọn cho các công việc cụ thể, mà không gây rối với cài đặt Jenkins toàn cầu (tôi sẽ không muốn gây rối với các dự án khác).

BIÊN TẬP:

Khi tôi hủy bỏ thủ công công việc, trước bước [CucumberReport], báo cáo Cucumber vẫn được tạo.

Tôi cũng đã kiểm tra Hủy bỏ bản dựng nếu hộp kiểm bị kẹt trong tùy chọn Môi trường xây dựng, với chiến lược No ActivityHết giờ được đặt thành (Hết giờ = 2).

Khi tôi xây dựng dự án với các cài đặt này, bản dựng sẽ thất bại với "Đã hủy sau 0 giây" được hiển thị trong Lịch sử xây dựng, như trước đây, nhưng đầu ra của giao diện điều khiển sẽ giống nhau. (Không có gì thay đổi, Báo cáo dưa chuột sẽ được tạo nhưng sau một khoảng thời gian chờ nhất định).


Bạn muốn đạt được gì với tham số? Có lẽ có một giải pháp dễ dàng hơn cho việc này.
Michael Kemmerzell

Tôi muốn cắt giảm thời gian chờ đợi sau giai đoạn xây dựng. Như bạn có thể thấy từ đầu ra của giao diện điều khiển, có 6 phút chờ đợi giữa các bước xây dựng và hậu xây dựng.
Mate Mrše

Bạn có thể cung cấp một số phần của đường ống của bạn? Tôi nghi ngờ jenkins chỉ đơn giản là bị mắc kẹt - một cái gì đó phải xảy ra ở đây.
Michael Kemmerzell

Bạn có thể cụ thể hơn về những phần nào của đường ống sẽ được quan tâm để tôi có thể chỉnh sửa và chia sẻ một số vì tôi không thể chia sẻ mã thực tế?
Mate Mrše

Bạn có thể chỉ cần đặt một timeouttùy chọn trong đường ống của bạn? Bạn chắc chắn nên đăng một phiên bản đơn giản hóa của đường ống của bạn. Thật khó để "đoán" những gì có thể sai. Ngoài ra, câu hỏi này có lẽ phù hợp hơn để có mặt tại devops.stackexchange.com
tftd

Câu trả lời:


4

Không thể chọn giá trị dành riêng cho công việcSoftKillWaitSeconds (giá trị được lấy từ lõi Jenkins tại điểm không biết tên công việc).

Đề nghị của tôi là khắc phục việc xử lý hủy bỏ trong chính công việc của bạn , vì vậy nó sẽ không phụ thuộc vào "thời gian chờ tiêu diệt mềm". Nếu bạn đang chạy trên hệ thống Unix-ish, bạn có thể đảm bảo điều này bằng cách chạy công việc của bạn trong một nhóm quy trình mới ( set -mtrong bash) và (ví dụ) thiết lập một bẫy thoát thích hợp.


Vì tôi là người mới với Jenkins, bạn có thể mở rộng "điều hành công việc của mình trong một nhóm quy trình mới (đặt -m in bash) và (ví dụ) thiết lập bẫy thoát thích hợp" không?
Mate Mrše

Điều này không liên quan đến Jenkins per-se. Bạn có thể sử dụng phương pháp này nếu công việc của bạn liên quan đến bước xây dựng "Thực thi trình bao" (hoặc nếu bạn có thể thay đổi nó để thực hiện). Sau đó sử dụng "set -m" để tạo nhóm quy trình mới và sử dụng bẫy như hiển thị ở đây để đảm bảo rằng tất cả các quy trình trong nhóm sẽ bị giết.
Alex O

3

Chúng tôi đang sử dụng plugin Build-timeout để tiêu diệt các công việc bị kẹt với chiến lược hết thời gian được đặt thành No Activityhoặc Absolute. Đối với tôi, đây là một cách tiếp cận tốt khi bạn đang sử dụng các dự án tự do. Lý do tại sao bản dựng của bạn bị "Hủy bỏ sau 0 giây" là vì rất có thể có các quy trình con chưa hoàn thành. Từ tài liệu :

Vì Java chỉ cho phép các luồng bị gián đoạn tại một tập hợp các vị trí cố định, tùy thuộc vào cách xây dựng bị treo, hoạt động hủy bỏ có thể không có hiệu lực. Ví dụ,

  • nếu Jenkins đang chờ các quá trình con hoàn thành, nó có thể hủy bỏ ngay lập tức.
  • nếu Jenkins bị mắc kẹt trong một vòng lặp vô hạn, nó không bao giờ có thể bị hủy bỏ.
  • nếu Jenkins đang thực hiện I / O mạng hoặc tệp trong máy ảo Java (chẳng hạn như sao chép tệp dài hoặc cập nhật SVN), thì nó không thể bị hủy bỏ.

Bạn có thể thử chiến lược thời gian chờ tuyệt đối. Bạn có thể xác định một biến toàn cục, để bạn không lặp lại giá trị thời gian chờ trong các công việc:

  1. Chuyển đến "Quản lý Jenkins"> "Cấu hình hệ thống".
  2. Kiểm tra "Biến môi trường" trong "Thuộc tính toàn cầu".
  3. Thêm một tên biến môi trường = "GLOBAL_TIMEOUT_MINUTES" value = "20".
  4. Đi đến một trang cấu hình của một dự án.
  5. Kiểm tra "Hủy bỏ bản dựng nếu nó bị kẹt" trong "Môi trường xây dựng".
  6. Chọn "Tuyệt đối" cho "Chiến lược hết thời gian". Tất nhiên, cũng áp dụng cho các chiến lược khác.
  7. Đặt "$ {GLOBAL_TIMEOUT_MINUTES}" cho "Hết giờ".
  8. Đặt hành động hết thời gian "Hủy bỏ bản dựng".

Nếu điều này không hoạt động, bạn có thể thử tìm trong nhật ký https: // your-jenkins-server / log hoặc trong một kết xuất luồng.
Việc treo có thể do phiên bản mới / cũ của plugin. Cố gắng tìm các quá trình con chưa hoàn thành. Cố gắng vô hiệu hóa từng hành động sau khi xây dựng để tìm ra hành động có thể là nguyên nhân của vấn đề. Bạn có thể xem /superuser/1401879/debugging-what-happens-when-a-jenkins-build-unazedly-pauses-or-hangs


Nâng cấp cho thông tin hữu ích, tuy nhiên, không giải quyết vấn đề của tôi. Tôi đã thử xây dựng plugin hết thời gian nhưng không thành công.
Mate Mrše
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.