Apa itu CI/CD? Integrasi Berkelanjutan dan Pengiriman Berkelanjutan
โก Ringkasan Cerdas
Integrasi Berkelanjutan adalah praktik pengembangan perangkat lunak di mana anggota tim menggabungkan pekerjaan mereka ke dalam repositori bersama setidaknya setiap hari, dan setiap commit memicu build dan pengujian otomatis untuk mendeteksi kesalahan integrasi sejak dini.

Apa itu Integrasi Berkelanjutan (CI)?
Integrasi berkelanjutan adalah metode pengembangan perangkat lunak di mana anggota tim mengintegrasikan pekerjaan mereka setidaknya sekali sehari. Setiap integrasi diverifikasi oleh build otomatis yang mendeteksi kesalahan. Konsep ini diperkenalkan lebih dari dua dekade lalu untuk menghindari "neraka integrasi," yang terjadi ketika integrasi ditunda hingga akhir proyek.
Setelah kode di-commit, perangkat lunak langsung dibangun dan diuji. Dalam proyek besar dengan banyak pengembang, commit terjadi berkali-kali dalam sehari. Dengan setiap commit, kode dibangun dan diuji; jika pengujian berhasil, build diperiksa untuk deployment; dan jika deployment berhasil, kode diunggah ke produksi. Siklus commit, build, test, dan deploy ini berlangsung terus-menerus, yang memberi nama pada praktik ini.
Apa itu Pengiriman Berkelanjutan (CD)?
Pengiriman terus menerus adalah metode rekayasa perangkat lunak di mana sebuah tim mengembangkan perangkat lunak dalam siklus pendek dan memastikan perangkat lunak tersebut dapat dirilis dengan andal kapan saja. Tujuannya adalah untuk membangun, menguji, dan merilis perangkat lunak dengan kecepatan dan frekuensi yang baik, mengurangi biaya, waktu, dan risiko pengiriman perubahan melalui pembaruan produksi yang sering.
Perbedaan Antara CI dan CD
Integrasi berkelanjutan adalah pendekatan untuk menguji setiap perubahan pada basis kode secara otomatis, sedangkan Continuous Delivery adalah pendekatan untuk memasukkan perubahan seperti fitur baru, konfigurasi, dan perbaikan bug ke dalam produksi dengan aman dan cepat.
Pengembangan Tanpa CI vs. Pengembangan Dengan CI
| Pembangunan tanpa CI | Pengembangan dengan CI |
|---|---|
| Banyak sekali bug | Lebih sedikit bug |
| Komitmen yang jarang | Komitmen reguler |
| Rilis yang jarang dan lambat | Rilis kerja reguler |
| Integrasi yang sulit | Integrasi yang mudah dan efektif |
| Pengujian terjadi terlambat | Pengujian dilakukan sejak dini dan secara berkala. |
| Masalah-masalah tersebut lebih sulit untuk diperbaiki. | Masalah ditemukan dan diperbaiki lebih cepat. |
| Visibilitas proyek yang buruk | Visibilitas proyek yang lebih baik |
Perbedaan Antara Kompilasi dan Integrasi Berkelanjutan
Sementara kompilasi hanya mengubah kode menjadi bahasa mesin, CI melakukan beberapa aktivitas yang lebih luas:
- Integrasi basis data: Menjaga agar basis data dan kode tetap sinkron dan mengotomatiskan pembuatan basis data dan data pengujian.
- Code inspeksi: Memastikan basis kode yang sehat, mengidentifikasi masalah sejak dini, dan menerapkan praktik terbaik.
- Penyebaran otomatis: Memungkinkan Anda merilis produk kapan saja dan menjaganya dalam kondisi yang selalu siap untuk didemonstrasikan.
- Pembuatan dokumen: Memastikan dokumentasi selalu terkini dan menghasilkan laporan serta metrik pembangunan.
- Kompilasi: Mengonversi kode tingkat tinggi ke dalam bahasa mesin dan memastikan kode tersebut dapat dikompilasi di setiap platform target.
Idealnya, proses build dijalankan dari baris perintah dan tidak bergantung pada IDE, berlangsung terus menerus di server CI khusus (bukan cron job), dipicu setiap kali ada check-in, dan memberikan umpan balik langsung tanpa upaya dari pengembang.
Apa yang Anda Butuhkan untuk Melakukan Proses Peningkatan Berkelanjutan (CI)?
- Sistem Kontrol Versi (VCS): Metode yang andal untuk memusatkan dan menyimpan perubahan yang dilakukan pada proyek Anda dari waktu ke waktu.
- Mesin virtual: Server cadangan atau setidaknya satu mesin virtual untuk membangun sistem Anda.
- Solusi alat CI yang dihosting: Untuk menghindari pengelolaan server, solusi hosting mengelola seluruh proses dan menawarkan skalabilitas yang lebih mudah.
- Alat: Jika Anda memilih varian yang dihosting sendiri, instal alat CI seperti Jenkins, TeamCity, Bambooatau GitLab.
Bagaimana Cara Kerja Integrasi Berkelanjutan?
Contoh lama adalah Nokia, yang pernah menggunakan prosedur yang disebut nightly build. Setelah banyak commit dari berbagai pengembang sepanjang hari, perangkat lunak tersebut dibangun setiap malam. Karena hanya dibangun sekali sehari, mengisolasi, mengidentifikasi, dan memperbaiki kesalahan dalam basis kode yang besar sangatlah sulit.
Later Tim tersebut menerapkan Integrasi Berkelanjutan. Perangkat lunak dibangun dan diuji segera setelah pengembang melakukan commit kode, sehingga setiap kesalahan terdeteksi dengan segera dan pengembang yang bertanggung jawab dapat memperbaiki cacat tersebut dengan cepat.
Fitur CI
- Memungkinkan Anda untuk memelihara repositori sumber tunggal.
- Memungkinkan Anda untuk menguji klon lingkungan produksi, yang disimpan berdekatan dengan lingkungan produksi.
- Menyediakan ketersediaan build terbaru secara terus-menerus.
- Membuat seluruh proses pembuatan, pengujian, dan penerapan terlihat jelas bagi semua pemangku kepentingan.
Mengapa Menggunakan CI?
- Membantu Anda membangun perangkat lunak berkualitas lebih baik dan melakukan pengujian yang berulang.
- Meningkatkan efisiensi hasil kerja tim teknik dan memungkinkan pengembang untuk mengerjakan fitur secara paralel.
- Meningkatkan visibilitas dan komunikasi di seluruh tim.
- Memberikan umpan balik langsung ketika masalah muncul dan mengurangi risiko dengan membuat penerapan lebih cepat dan lebih mudah diprediksi.
- Menghindari kebingungan di menit-menit terakhir saat waktu rilis.
Praktik Terbaik Penggunaan Sistem CI
- Lakukan commit sedini mungkin dan sesering mungkin, dan jangan pernah melakukan commit kode yang rusak.
- Perbaiki kegagalan build dengan segera dan tindak lanjuti berdasarkan metrik.
- Lakukan build di setiap lingkungan target dan buat artefak dari setiap build.
- Otomatiskan proses build agar tidak bergantung pada IDE.
- Bangun dan uji semuanya ketika ada perubahan, termasuk skema basis data.
- Jaga agar proses build tetap cepat dan gunakan deployment otomatis.
Kekurangan CI
- Waktu penyiapan awal dan pelatihan diperlukan untuk membiasakan diri dengan server CI.
- Prosedur pengujian yang sesuai harus dikembangkan, dan rangkaian pengujian yang dibangun dengan baik membutuhkan sumber daya yang signifikan.
- Proses yang sudah familiar harus dikonversi, dan server serta lingkungan tambahan diperlukan.
- Waktu tunggu dapat terjadi ketika beberapa pengembang ingin mengintegrasikan kode mereka secara bersamaan.
Alat untuk Proses CI
Jenkins
Jenkins adalah alat integrasi berkelanjutan sumber terbuka yang ditulis dalam JavaIni memfasilitasi pengujian dan pelaporan secara real-time pada perubahan terisolasi dalam basis kode yang lebih besar dan membantu pengembang menemukan dan menyelesaikan cacat dengan cepat sambil mengotomatiskan pengujian build.
Bamboo
Bamboo adalah server build integrasi berkelanjutan yang melakukan build, pengujian, dan rilis otomatis di satu tempat. Ia bekerja dengan lancar dengan Jira dan Bitbucket dan mendukung banyak teknologi seperti Docker, Git, SVN, Mercurial, dan AWS.
TeamCity
TeamCity adalah server integrasi berkelanjutan dengan banyak fitur canggih. Server ini menjaga server CI tetap sehat dan stabil bahkan ketika tidak ada build yang berjalan dan memberikan kualitas kode yang lebih baik untuk proyek apa pun.
