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:
- Meningkatkan : Membuat AWS menjadi lebih besar dan menambahkan lebih banyak pelaksana.
- Meningkatkan : Membuat AWS menjadi lebih besar dan menambahkan proses jenkins slave lainnya.
- 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?
jenkins
continuous-integration
capacity-planning
Oscar Foley
sumber
sumber
Jawaban:
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:
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.
sumber
Gunakan Kubernetes dan Helm.
Saya akan merekomendasikan menggunakan grafik Jenkins Helm. Itu menginstal dengan
helm install stable/jenkins
dan secara otomatis skala.https://github.com/kubernetes/charts/tree/master/stable/jenkins
sumber
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.
sumber
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.
sumber