Làm thế nào để khởi động lại an toàn Jenkins?


19

Tôi cần thực hiện một số thay đổi cấu hình trên ví dụ Jenkins của chúng tôi sẽ liên quan đến việc khởi động lại Jenkins một vài lần. Tuy nhiên, các nhà phát triển của chúng tôi cam kết thường xuyên đủ để tôi không thấy Jenkins mà không có công việc chạy trong ba ngày.

Có cách nào riêng (thông qua GUI hoặc qua dòng lệnh) để khởi động lại an toàn Jenkins không? IE: đợi các công việc hiện tại kết thúc trước khi đi xuống và theo dõi các công việc được xếp hàng để bắt đầu khi Jenkins trở lại.

Tôi biết có một plugin nhưng để cài đặt nó, tôi cần khởi động lại Jenkins ...


Đoán từ đỉnh đầu của tôi, nhưng không vô hiệu hóa các nô lệ một tùy chọn? (theo như tôi nhớ, nó không dừng các công việc đang diễn ra mà ngăn các công việc bổ sung trong hàng đợi được tung ra)
Tensibai

Về lý thuyết, với một cá thể Jenkins được cấu hình đúng cách đang chạy các công việc Pipeline, bạn có thể khởi động lại các nút chính hoặc nút phụ bất cứ khi nào bạn muốn. Kinh nghiệm của tôi nói khác, tuy nhiên.
jayhendren

Câu trả lời:


14

Nếu bạn điều hướng đến $YOUR_JENKINS_URL/updateCenter/bạn sẽ thấy trang sau:

Ở đây bạn có thể kiểm tra Restart Jenkins when installation is complete and no jobs are runningcái nào khá an toàn.


Theo hiểu biết của tôi, việc khởi động lại chỉ xảy ra nếu các plugin đang trong quá trình cài đặt ... không có cách nào để buộc khởi động lại xảy ra mà không cài đặt các plugin, phải không?
Alex

1
@Alex Tôi chỉ thử nó trên ví dụ của tôi và đối với tôi nó dường như luôn hoạt động, bất kể cài đặt plugin. Theo stackoverflow.com/a/8077830 cũng nên có một /safeRestart/restartđiểm cuối.
Eyalzek

1
Nhưng không phải là câu hỏi về khởi động lại trong khi công việc đang chạy?
Dan Cornilescu

@DanCornilescu câu hỏi nêu : IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up., đây chính xác là những gì xảy ra khi bạn đánh dấu vào ô đó.
Eyalzek

Tôi đã hỏi khi câu hỏi cũng nêu Jenkins without jobs running in three days- điều đó có nghĩa là sẽ có tác động vì một số công việc sẽ bị trì hoãn. Nhưng vẫn tốt hơn là mất việc.
Dan Cornilescu

15

Truy cập https: // youjenkinsdomain / safeRestart sẽ đặt nó ở chế độ khi nó chờ công việc dừng lại và sau đó khởi động lại.


2
Tôi cần sử dụng câu trả lời cụ thể này khi máy chủ Jenkins của chúng tôi bị lỗi và không thể khởi động lại khi plugin yêu cầu.
kayleeFrye_onDeck

8

Bạn có thể thực thi lệnh safeRestart bằng API Jenkins Rest ( [jenkins_url] / safeRestart ) hoặc bạn có thể thực thi lệnh thông qua Jenkins CLI .

sudo /etc/init.d/jenkins safeRestart

Chạy lệnh CLI

Cú pháp chung như sau (thiết kế tương tự như các công cụ như svn / git):

lệnh java -jar jenkins-cli.jar [-s JENKINS_URL] [tùy chọn ...] [đối số ...]

JENKINS_URL có thể được chỉ định thông qua biến môi trường $ JENKINS_URL. Biến môi trường này được đặt tự động khi Jenkins rẽ nhánh một quá trình trong quá trình xây dựng, cho phép bạn sử dụng Jenkins CLI từ bên trong bản dựng mà không cần định cấu hình URL một cách rõ ràng.

LƯU Ý: Khi chạy lệnh safeRestart, mọi công việc được thiết lập để được thực thi trong quá trình khởi động lại sẽ được xếp hàng và thực hiện khi máy chủ trực tuyến trở lại. Hãy chắc chắn rằng điều này không gây ra bất kỳ xung đột nào khi khởi động lại!


1

Tôi nghĩ rằng đây là một vấn đề thực sự mà nhiều người đang cố gắng giải quyết. Đôi khi, nên khởi động lại Jenkins khi cài đặt plugin. Một trong những gợi ý mà tôi có thể cung cấp dựa trên kinh nghiệm của mình là:

  • Hạn chế quyền truy cập vào mô-đun quản trị để không phải mọi nhà phát triển đều có thể cài đặt plugin
  • Hướng dẫn các nhà phát triển về thời gian chết và thông báo cho họ trước thời hạn
  • Cài đặt hàng loạt các plugin cần thiết và khởi động lại Jenkins
  • Thông báo cho các nhà phát triển rằng Jenkins đã sẵn sàng để sử dụng

Tôi hiểu rằng điều này đòi hỏi một nỗ lực và phối hợp thủ công. Nhưng điều này đã làm việc rất tốt trong dự án của chúng tôi, nghĩ rằng không có hại trong việc đề cập.


1

Để khởi động lại Jenkins theo cách thủ công, bạn có thể sử dụng một trong các lệnh sau (bằng cách nhập URL của chúng trong trình duyệt):

(jenkins_url)/safeRestart- Cho phép tất cả các công việc đang chạy để hoàn thành. Các công việc mới sẽ vẫn ở trong hàng đợi để chạy sau khi khởi động lại hoàn tất.

(jenkins_url)/restart - Buộc khởi động lại mà không cần chờ bản dựng hoàn thành.


0

Truy cập " https: // jenkins / safeRestart " không đợi "công việc / bản dựng" hoàn thành trong trường hợp công việc đường ống.

Nó dường như chờ đợi các bước để kết thúc và thực hiện khởi động lại jenkins và tiếp tục đường ống sau khi jenkins đã xuất hiện trở lại.


1
Tôi đoán đây có nghĩa là một nhận xét cho câu trả lời của @Nakilon?
hagello

0

Jenkins được thiết kế để không bị ảnh hưởng bởi khởi động lại. Theo kinh nghiệm của tôi, có thể một bản dựng có thể bị lỗi do khởi động lại, nhưng chúng rất hiếm.

Nơi tôi làm việc, chúng tôi thường phải khởi động lại Jenkins thường xuyên. Chúng tôi có mọi loại công việc bạn có thể tưởng tượng, một số nhỏ, một số lớn. Chỉ một lần chúng ta thấy một bản dựng thất bại trong đó một quả dưa muối không được bù nước.

Sau đó, chúng tôi luôn luôn khởi động lại an toàn ngay bây giờ.

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.