Bagaimana skala yang tepat Jenkins?

27

Dalam proyek saya, kami memiliki satu server AWS yang menjalankan Jenkins Master + 1 Jenkins slave (2 eksekutor) ... dan kami membutuhkan lebih banyak.
Untuk menambah daya bangun kami, kami memiliki tiga opsi:

  1. Meningkatkan : Membuat AWS menjadi lebih besar dan menambahkan lebih banyak pelaksana.
  2. Meningkatkan : Membuat AWS menjadi lebih besar dan menambahkan proses jenkins slave lainnya.
  3. Skala : Buat instance AWS lain dengan budak jenkins dan hubungkan ke master

Kami ingin melakukan 2. karena kami berada di organisasi besar dan Jenkins Master kami saat ini sudah memiliki akses ke setiap tempat yang ia butuhkan. Opsi 3. "Server baru" rumit karena membutuhkan lebih banyak persetujuan birokrasi yang akan memakan waktu berminggu-minggu.

Jadi pertanyaan saya adalah:

  • Apakah ada masalah teknis di opsi 2? . Mungkin para eksekutor dari setiap budak jenkins tidak mengetahui eksekutor budak lainnya?
  • Secara umum, apa pendekatan terbaik untuk skala Jenkins? Menaikkan atau meningkatkan?
Oscar Foley
sumber
Anda akan mengalami jebakan, mengubah jenis instance bisa menjadi masalah jika Anda pindah ke jenis perangkat keras yang berbeda, karena volume Anda harus didukung dan dipulihkan pada instance baru.
Tensibai
2
Kenapa tidak nomor 3? Cara biasa mengirim pekerjaan ke Jenkins adalah menguasainya. Dan berdasarkan kriteria tertentu, master akan mengirimkannya ke budak yang tepat
Romeo Ninov
FWIW, Anda juga perlu menganalisis struktur build Anda untuk melihat bagaimana ia menggunakan sumber daya mesin build - peningkatan mungkin tidak membantu - Saya menemukan kasus di mana waktu build untuk 2 build paralel pada mesin yang sama lebih lama daripada waktu build gabungan dari 2 build yang sama dieksekusi secara berurutan, tidak tumpang tindih. Dalam kasus seperti itu # 3 akan menjadi satu-satunya pilihan praktis yang tersedia.
Dan Cornilescu
Saya setuju bahwa # 3 lebih baik tetapi saya tidak memiliki argumen untuk itu atau argumen melawan # 1 dan # 2 ...
Oscar Foley
Jika Anda memiliki kesempatan dalam lingkungan Anda, saya akan mencari solusi sementara. Melihat bahwa Anda sudah menggunakan AWS, Anda dapat dengan mudah membawa alat berat naik dan turun sesuai kebutuhan saat menangani beban kerja. wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin
casey vega

Jawaban:

11

Tidak ada masalah teknis mendasar dengan menjalankan beberapa budak jenkins pada mesin yang sama. Sebenarnya Menjalankan Banyak Budak di Mesin yang Sama mencantumkan beberapa alasan bagus untuk melakukannya:

Sementara penggunaan yang benar dari sebagian besar eksekutif menyingkirkan kebutuhan untuk beberapa instance slave pada mesin yang sama, ada beberapa kasus penggunaan yang unik untuk dipertimbangkan:

  • Anda ingin lebih dapat dikonfigurasi antara node yang dikonfigurasi. Katakanlah Anda memiliki satu set simpul yang akan digunakan sebanyak mungkin, dan simpul lainnya hanya digunakan saat dibutuhkan.
  • Anda mungkin memiliki beberapa instalasi master Jenkins yang membangun hal-hal yang berbeda, sehingga konfigurasi ini memungkinkan Anda untuk memiliki budak untuk lebih dari satu master pada kotak yang sama. Itu benar, dengan Jenkins Anda benar-benar dapat melayani dua tuan.
  • Anda mungkin ingin memanfaatkan kemudahan memulai / menghentikan / mengganti mesin virtual, mungkin bersamaan dengan plugin Jenkins seperti Plugin Libvirt Slaves .
  • Anda ingin memaksimalkan investasi dan pemanfaatan perangkat keras Anda, sekaligus meminimalkan biaya operasi (mis., Biaya utilitas untuk menjalankan budak yang tidak bekerja).

Secara umum scaling out lebih disukai, terutama karena kemampuan untuk meningkatkan biasanya dibatasi oleh jenis / ukuran sumber daya fisik yang tersedia.

Khususnya untuk menambah daya bangun, saya akan merekomendasikan analisis bangunan aktual Anda untuk menentukan bagaimana ia menggunakan sumber daya mesin, di mana / di mana kemacetannya dan batasan skalabilitas apa yang ditimbulkan untuk diungkapkan jika peningkatan bahkan membantu.

Sebagai contoh, saya menemukan kasus-kasus di mana waktu pembuatan untuk 2 paralel dibangun pada mesin yang sama lebih lama dari waktu pembangunan gabungan dari 2 build yang sama dieksekusi secara berurutan (non-tumpang tindih) pada mesin yang sama. Dalam kasus seperti itu saya bahkan tidak akan mempertimbangkan untuk meningkatkan karena itu benar-benar akan mengurangi kapasitas bangunan secara keseluruhan.

Dan Cornilescu
sumber
3

Saya pikir Anda tidak harus melakukan keduanya;)

Yah agak. Saya pikir Anda membutuhkan lebih banyak pelaksana, mungkin bangunan Anda benar-benar intensif sumber daya? Saya akan menjalankan setidaknya 4 tetapi kami menjalankan 6 hingga 8 tergantung pada pekerjaan. Saya suka mencocokkan # core dengan exectors. Jadi Anda mungkin ingin meningkatkan node Anda, saya pikir kami menjalankan M4 besar untuk 4-8 ​​eksekutor kami.

Saya juga berpikir Anda harus meningkatkan skala tetapi Anda harus melakukannya dengan cerdas. Jenkins memiliki plugin untuk secara otomatis meningkatkan AWS tergantung pada apa yang ada di antrean build. Pada dasarnya Anda mengatakan berapa banyak pekerjaan dan berapa lama menunggu sebelum berdiri seorang budak dan mengirimkan pekerjaan ke budak baru. Anda juga dapat mengatur jumlah maksimum budak, jumlah minimum, dll.

Retribusi
sumber
2

Saya akan meningkatkan bukannya meningkatkan, memilih opsi 3. Kami telah membuat pengaturan di mana kami memiliki semua agen Jenkins berjalan pada ECS (Jenkins berbasis Docker kustom) dengan grup penskalaan otomatis. Kami memiliki semua master Jenkins kami yang berkomunikasi dengan ECS, dengan demikian berbagi beban kerja pada ECS, dan tidak perlu membuat ulang master Jenkins dalam latihan peningkatan.

Jon Brohauge
sumber