Apa perbedaan antara Jenkins dan CI lainnya seperti GitLab CI, drone.io datang dengan distribusi Git. Pada beberapa penelitian saya hanya bisa menemukan bahwa edisi komunitas GitLab tidak memungkinkan Jenkins untuk ditambahkan, tetapi edisi perusahaan GitLab melakukannya. Apakah ada perbedaan signifikan lainnya?
129
Jawaban:
Ini pengalaman saya:
Di tempat kerja saya, kami mengelola repositori kami dengan GitLab EE dan kami memiliki server Jenkins (1.6) yang berjalan.
Pada dasarnya mereka melakukan hampir sama. Mereka akan menjalankan beberapa skrip pada gambar server / Docker.
TL; DR;
Sebagian besar server CI cukup lurus ke depan ( concourse.ci ), gitlab-ci , circle-ci , travis-ci , drone.io , gocd dan apa lagi yang Anda miliki). Mereka memungkinkan Anda untuk mengeksekusi skrip shell / bat dari definisi file YAML. Jenkins jauh lebih pluggable, dan dilengkapi dengan UI. Ini bisa menjadi keuntungan atau kerugian, tergantung pada kebutuhan Anda.
Jenkins sangat dapat dikonfigurasi karena semua plugin yang tersedia. Kelemahan dari ini adalah bahwa server CI Anda dapat menjadi spageti plugin.
Menurut pendapat saya chaining dan mengatur pekerjaan di Jenkins jauh lebih sederhana (karena UI) daripada melalui YAML (memanggil perintah curl). Selain itu Jenkins mendukung plugin yang akan menginstal binari tertentu ketika mereka tidak tersedia di server Anda (tidak tahu tentang itu untuk yang lain).
Saat ini ( Jenkins 2 juga mendukung lebih "ci tepat" dengan
Jenkinsfile
dan pipline Plugin yang datang default seperti dari Jenkins 2), tetapi digunakan untuk kurang digabungkan ke repositori dari yaitu GitLab CI.Menggunakan file YAML untuk mendefinisikan pipa bangunan Anda (dan pada akhirnya menjalankan shell / bat murni) lebih bersih.
Plug-in yang tersedia untuk Jenkins memungkinkan Anda memvisualisasikan semua jenis pelaporan, seperti hasil pengujian, cakupan, dan analisis statis lainnya. Tentu saja, Anda selalu dapat menulis atau menggunakan alat untuk melakukan ini untuk Anda, tetapi jelas merupakan nilai tambah bagi Jenkins (terutama bagi manajer yang cenderung menilai laporan ini terlalu banyak).
Akhir-akhir ini saya semakin sering bekerja dengan GitLab CI. Di GitLab mereka melakukan pekerjaan yang benar-benar hebat yang membuat seluruh pengalaman menjadi menyenangkan. Saya mengerti bahwa orang menggunakan Jenkins, tetapi ketika Anda memiliki GitLab berjalan dan tersedia, sangat mudah untuk memulai dengan GitLab CI. Tidak akan ada apa pun yang akan diintegrasikan dengan mulus seperti GitLab CI, meskipun mereka melakukan beberapa upaya dalam integrasi pihak ketiga.
Beberapa tunjangan pada saat penulisan:
sumber
Saya setuju dengan sebagian besar catatan Rik, tetapi pendapat saya tentang yang lebih sederhana adalah kebalikannya : GitLab terbukti menjadi alat yang luar biasa untuk bekerja dengannya.
Sebagian besar daya berasal dari menjadi mandiri dan mengintegrasikan segala sesuatu dalam produk yang sama di bawah tab browser yang sama: dari browser repositori, papan masalah atau membangun sejarah hingga alat penyebaran dan pemantauan .
Saya menggunakannya sekarang untuk mengotomatisasi dan menguji bagaimana suatu aplikasi menginstal pada distribusi Linux yang berbeda, dan itu hanya sangat cepat untuk mengkonfigurasi (mencoba untuk membuka konfigurasi pekerjaan Jenkins yang kompleks di Firefox dan menunggu skrip non-responsif muncul vs seberapa ringan untuk mengedit
.gitlab-ci.yml
).Waktu yang dihabiskan untuk mengonfigurasi / menskalakan budak jauh lebih sedikit berkat binari pelari ; ditambah fakta bahwa di GitLab.com Anda mendapatkan pelari bersama yang cukup baik dan gratis.
Jenkins merasa lebih manual setelah beberapa minggu menjadi pengguna kuat GitLab CI, misalnya menduplikasi pekerjaan per cabang, memasang plugin untuk melakukan hal-hal sederhana seperti mengunggah SCP. Satu-satunya use case yang saya hadapi di mana saya melewatkannya seperti hari ini adalah ketika lebih dari satu repositori terlibat; yang perlu dipecahkan dengan baik.
BTW, saya saat ini sedang menulis seri pada GitLab CI untuk menunjukkan bagaimana tidak sulit untuk mengkonfigurasi infrastruktur CI repositori Anda dengannya. Diterbitkan minggu lalu, karya pertama memperkenalkan dasar-dasar, pro dan kontra dan perbedaan dengan alat-alat lain: Integrasi Berkelanjutan yang cepat dan alami dengan GitLab CI
sumber
Jenkinsfile
. Anda benar bahwa di AndaJenkinsfile
Anda memiliki groovy (+ lib java tambahan) yang tersedia untuk menjalankan kode, di mana.gitlab-ci.yaml
file tersebut terutama akan mendukung shell, tetapi (tergantung pada lokasi pelari). Di sisi lain Anda dapat memanggil semua ini dari skrip shell juga, tetapi downside adalah bahwa Anda membuat dependensi mesin (yang menurut saya tidak terlalu transparan).Pertama-tama, pada hari ini, Edisi Komunitas GitLab dapat sepenuhnya dioperasikan dengan Jenkins. Tidak ada pertanyaan.
Berikut ini, saya memberikan umpan balik tentang pengalaman sukses menggabungkan Jenkins dan GitLab CI. Saya juga akan membahas apakah Anda harus menggunakan keduanya atau hanya salah satunya, dan untuk alasan apa.
Saya harap ini akan memberi Anda informasi berkualitas tentang proyek Anda sendiri.
Kekuatan GitLab CI dan Jenkins
GitLab CI
GitLab CI secara alami terintegrasi dalam GitLab SCM. Anda dapat membuat saluran pipa menggunakan
gitlab-ci.yml
file dan memanipulasinya melalui antarmuka grafis.Pipa-pipa ini sebagai kode jelas dapat disimpan dalam basis kode, menegakkan praktik "semuanya sebagai kode" (akses, versi, reproduksibilitas, penggunaan kembali, dll.).
GitLab CI adalah alat manajemen visual yang hebat:
Jenkins
Jenkins adalah alat membangun yang bagus. Kekuatannya ada di banyak pluginnya. Terutama, saya sangat beruntung menggunakan plugin antarmuka antara Jenkins dan alat CI atau CD lainnya. Ini selalu merupakan pilihan yang lebih baik daripada membangun kembali (mungkin buruk) antarmuka dialog antara dua komponen.
Pipeline sebagai kode juga tersedia menggunakan
groovy
skrip.Menggunakan GitLab CI dan Jenkins bersama-sama
Mungkin terdengar agak berlebihan pada awalnya, tetapi menggabungkan GitLab CI dan Jenkins cukup kuat.
Manfaat lain dari desain ini adalah memiliki kopling longgar di antara alat-alat:
Trade-off
Yah, tentu saja, ada harga yang harus dibayar untuk desain ini: pengaturan awal rumit dan Anda harus memiliki tingkat minimal pemahaman banyak alat.
Untuk alasan ini, saya tidak merekomendasikan pengaturan seperti itu kecuali
Jika Anda tidak berada dalam kedua situasi ini, Anda mungkin lebih baik hanya dengan satu dari keduanya, tetapi tidak keduanya.
Jika saya harus memilih satu
Baik GitLab CI dan Jenkins memiliki pro dan kontra. Keduanya adalah alat yang ampuh. Jadi yang mana yang harus dipilih?
jawaban 1
Pilih salah satu yang tim Anda (atau seseorang yang dekat) sudah memiliki tingkat keahlian tertentu.
Jawaban 2
Jika Anda semua mahasiswa baru dalam teknologi CI, pilih satu dan mulai saja.
Anda yang menggunakan GitLab dan tidak yakin mereka akan tetap melakukannya, harus diingat bahwa, dengan memilih GitLab CI akan menyiratkan untuk membuang semua saluran pipa CI / CD Anda.
Kata terakhirnya adalah: keseimbangan sedikit condong ke arah Jenkins karena banyak pluginnya, tetapi kemungkinan GitLab CI akan dengan cepat mengisi kekosongan tersebut.
sumber
Saya ingin menambahkan beberapa temuan dari percobaan saya baru-baru ini dengan GitLab CI. Fitur yang datang dengan 11.6 dan 11.7 sungguh luar biasa!
Secara khusus saya suka
only
kondisi yang pada dasarnya memungkinkan Anda membangun saluran pipa terpisah untukmerge_request
ataupush
(daftar lengkapnya ada di sini )Juga, saya sangat suka tidak adanya plugin. Ketika saya membutuhkan beberapa fungsionalitas yang lebih kompleks, saya hanya menulis gambar Docker khusus yang menangani fungsionalitas yang diperlukan (itu konsep yang sama seperti yang Anda lihat di drone.io ).
Jika Anda bertanya-tanya tentang KERING , itu benar-benar mungkin saat ini! Anda dapat menulis "templat,"
Masukkan mereka ke beberapa repositori publik, sertakan dalam saluran pipa utama:
Dan gunakan untuk memperpanjang pekerjaan:
Saya sangat menyukai GitLab CI! Ya, itu (sejauh ini) tidak dapat menggambar grafik yang bagus dengan cakupan dan sebagainya, tetapi secara keseluruhan itu adalah alat yang sangat rapi!
Sunting (2019-02-23): inilah posting saya tentang hal - hal yang saya sukai di GitLab CI. Itu ditulis dalam 11,7 "era" sehingga ketika Anda membaca jawaban ini, GitLab CI mungkin memiliki lebih banyak fitur.
Sunting (2019-07-10): Gitlab CI sekarang mendukung banyak
extends
misPeriksa dokumentasi resmi untuk mendapatkan info lebih lanjut tentang beberapa ekstensi
sumber
jika build / publish / deploy dan pekerjaan pengujian Anda tidak terlalu rumit maka menggunakan gitlab ci memiliki keuntungan alami.
Karena gitlab-ci.yml ada di samping kode Anda di setiap cabang, Anda dapat memodifikasi langkah-langkah ci / cd Anda terutama tes (yang berbeda di seluruh lingkungan) lebih efektif.
Sebagai contoh, Anda ingin melakukan pengujian unit untuk setiap checkin ke cabang dev sedangkan Anda mungkin ingin melakukan pengujian fungsional lengkap pada cabang QA dan terbatas hanya mendapatkan jenis tes pada produksi ini dapat dicapai dengan mudah menggunakan gitlab ci.
Keuntungan kedua selain UI yang hebat adalah kemampuannya untuk menggunakan gambar buruh pelabuhan untuk menjalankan setiap tahap menjaga host runner tetap utuh dan dengan demikian lebih sedikit kesalahan.
apalagi gitlab ci akan secara otomatis checkin untuk Anda dan Anda tidak perlu mengelola master jenkins secara terpisah
sumber