Bagaimana cara me-restart Jenkins dengan aman?


19

Saya perlu membuat beberapa perubahan konfigurasi pada instance Jenkins kami yang akan melibatkan restart Jenkins beberapa kali. Namun, pengembang kami cukup sering berkomitmen sehingga saya belum melihat Jenkins tanpa pekerjaan berjalan dalam tiga hari.

Apakah ada cara asli (baik melalui GUI atau melalui baris perintah) untuk memulai ulang Jenkins dengan aman? IE: menunggu pekerjaan saat ini selesai sebelum turun, dan melacak pekerjaan yang antri untuk memulai setelah Jenkins kembali.

Saya tahu ada plugin tetapi untuk menginstalnya saya perlu me-restart Jenkins ...


Tebak dari atas kepala saya, tetapi bukankah menonaktifkan budak merupakan pilihan? (Sejauh yang saya ingat itu tidak menghentikan pekerjaan yang sedang berlangsung tetapi mencegah pekerjaan tambahan dalam antrian untuk diluncurkan)
Tensibai

Secara teori, dengan instance Jenkins yang dikonfigurasi dengan benar menjalankan pekerjaan Pipeline, Anda dapat memulai kembali master atau slave kapan pun Anda mau. Namun, pengalaman saya mengatakan sebaliknya.
jayhendren

Jawaban:


14

Jika Anda menavigasi ke $YOUR_JENKINS_URL/updateCenter/Anda harus melihat halaman berikut:

Di sini Anda dapat memeriksa Restart Jenkins when installation is complete and no jobs are runningmana yang seharusnya cukup aman.


Ini pemahaman saya bahwa restart hanya terjadi jika plugin sedang dalam proses menginstal ... tidak ada cara untuk memaksa restart terjadi tanpa menginstal plugins, apakah ada?
Alex

1
@Alex Saya baru saja mengujinya pada contoh saya dan bagi saya sepertinya selalu berfungsi, terlepas dari pemasangan plugin. Menurut stackoverflow.com/a/8077830, harus ada a /safeRestartdan /restarttitik akhir.
eyalzek

1
Tetapi bukankah pertanyaan tentang memulai kembali saat pekerjaan sedang berjalan?
Dan Cornilescu

@DanCornilescu menyatakan pertanyaan:, IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up.ini adalah persis apa yang terjadi ketika Anda mencentang kotak itu.
eyalzek

Saya mengajukan pertanyaan juga menyatakan Jenkins without jobs running in three days- yang berarti akan ada dampak karena beberapa pekerjaan akan tertunda. Tapi tetap saja, lebih baik daripada kehilangan pekerjaan.
Dan Cornilescu


8

Anda dapat menjalankan perintah safeRestart menggunakan Jenkins Rest API ( [jenkins_url] / safeRestart ) atau Anda dapat mengeksekusi perintah melalui Jenkins CLI .

sudo /etc/init.d/jenkins safeRestart

Menjalankan perintah CLI

Sintaks umum adalah sebagai berikut (desainnya mirip dengan alat seperti svn / git):

java -jar jenkins-cli.jar [-s JENKINS_URL] perintah [opsi ...] [argumen ...]

JENKINS_URL dapat ditentukan melalui variabel lingkungan $ JENKINS_URL. Variabel lingkungan ini secara otomatis ditetapkan ketika Jenkins melakukan proses selama proses build, yang memungkinkan Anda untuk menggunakan Jenkins CLI dari dalam build tanpa secara eksplisit mengkonfigurasi URL.

CATATAN: Saat menjalankan perintah safeRestart, setiap pekerjaan yang diatur untuk dieksekusi selama restart akan di-antri dan dieksekusi ketika server kembali online. Pastikan ini tidak menyebabkan konflik saat reboot!


1

Saya pikir ini adalah masalah nyata yang coba dipecahkan oleh banyak orang. Ada saat-saat di mana lebih disukai untuk me-restart Jenkins setelah instalasi plugin. Salah satu saran yang bisa saya berikan berdasarkan pengalaman saya adalah:

  • Batasi akses ke modul admin sehingga tidak setiap pengembang dapat menginstal plugin
  • Instruksikan pengembang tentang waktu henti dan beri tahu mereka sebelumnya
  • Instal semua plugin yang diperlukan secara massal dan mulai ulang Jenkins
  • Beri tahu pengembang bahwa Jenkins siap digunakan

Saya mengerti bahwa ini membutuhkan upaya manual dan koordinasi. Tetapi ini telah berhasil sejauh ini dalam proyek kami, berpikir tidak ada salahnya menyebutkan.


1

Untuk memulai ulang Jenkins secara manual, Anda dapat menggunakan salah satu dari perintah berikut (dengan memasukkan URL mereka di browser):

(jenkins_url)/safeRestart- Mengizinkan semua pekerjaan yang sedang berjalan selesai. Pekerjaan baru akan tetap dalam antrian untuk berjalan setelah restart selesai.

(jenkins_url)/restart - Memaksa restart tanpa menunggu build selesai.


0

Mengunjungi " https: // jenkins / safeRestart " tidak menunggu "pekerjaan / pembangunan" selesai sepenuhnya jika ada pekerjaan pipa.

Tampaknya menunggu langkah-langkah untuk menyelesaikan dan melakukan restart jenkins dan melanjutkan pipa setelah jenkins muncul lagi.


1
Saya kira ini dimaksudkan sebagai komentar atas jawaban @Nakilon?
hagello

0

Jenkins dirancang untuk tidak terpengaruh oleh restart. Dari pengalaman saya, mungkin saja build gagal karena restart, tetapi jarang.

Di tempat saya bekerja dulu kami harus memulai kembali Jenkins secara teratur. Kami memiliki segala jenis pekerjaan yang dapat Anda bayangkan, sebagian kecil, sebagian besar. Hanya sekali kita melihat bangunan gagal di mana acar tidak direhidrasi.

Setelah itu, kami selalu melakukan restart dengan aman sekarang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.