Integrasi berkelanjutan atau Continuous Integration (CI) adalah proses pengembangan perangkat lunak di mana pengembang mengintegrasikan kode baru ke dalam basis kode di seluruh siklus pengembangan.
Saat kode dikirimkan, alat CI memverifikasi setiap integrasi dengan membuat iterasi build dan menjalankan serangkaian pengujian otomatis untuk mendeteksi dan mengatasi kesalahan integrasi dengan lebih cepat.
CI diciptakan sebagai tanggapan terhadap tantangan pengembangan perangkat lunak tradisional, yaitu proses yang berkaitan dengan integrasi dan penerapan. Dalam pengembangan tradisional, setiap pengembang bertanggung jawab untuk mengintegrasikan kode baru secara manual ke dalam iterasi baru aplikasi atau layanan, membuat integrasi menjadi proses yang lambat dan rawan kesalahan, terutama untuk tim pengembangan besar.
Potongan kode yang berbeda tidak selalu bekerja sama dengan baik dan pengembang mengintegrasikan perubahan mereka pada jadwal yang berbeda—dan terkadang pada menit terakhir—sehingga masukan tentang masalah integrasi sering kali tertunda. Penundaan yang terkait dengan integrasi yang tidak konsisten mempersulit tim untuk mengetahui perubahan mana yang menyebabkan bug, sehingga debugging juga menjadi proses yang sulit.
Selain itu, pengujian perangkat lunak jarang dilakukan, dengan pembaruan dalam jumlah besar yang dilakukan sekaligus, sehingga bug dapat lolos dari celah dan terakumulasi dalam basis kode, yang menyebabkan kesalahan dan gangguan bagi pengguna akhir. (Dan pemecahan masalah yang lebih sulit bagi pengembang.)
Alat bantu CI—yang merupakan dasar dari praktik DevOps modern, pipeline integrasi berkelanjutan/penerapan berkelanjutan (CI/CD), dan arsitektur layanan mikro—membantu menyederhanakan proses pembangunan dengan memberikan masukan yang cepat terkait kinerja integrasi.
Dengan sistem CI, kode baru ditambahkan ke repositori pusat (biasanya, beberapa kali sehari), di mana kode tersebut tetap digunakan untuk membangun dan menguji. Jika sistem mendeteksi kesalahan, sistem akan mengirimkan notifikasi, mengoreksi kode, dan mengonfirmasi bahwa kode yang diperbarui sudah benar sebelum menggabungkannya dengan basis kode.
Akibatnya, pendekatan CI memungkinkan tim pengembangan perangkat lunak untuk menangkap dan memperbaiki kesalahan sebelum memengaruhi kinerja perangkat lunak, sehingga menghasilkan perangkat lunak yang lebih berkualitas dan jadwal pengiriman yang lebih dapat diprediksi.
Meskipun konfigurasi yang tepat dari sistem integrasi berkelanjutan bervariasi dari satu tim ke tim lainnya dan bisnis ke bisnis lainnya, setiap sistem CI menggunakan komponen dan proses tertentu untuk mengoptimalkan tugas-tugas integrasi.
CI dimulai dengan repositori pusat tempat semua pengembang menjalankan kode mereka. Repositori pusat berfungsi sebagai landasan praktik CI dan sering kali dikelola oleh sistem kontrol versi (VCS) seperti Git dan Bitbucket. Saat pengembang mengirimkan perubahan, repositori pusat melacaknya, membuat riwayat lengkap perubahan kode yang dapat digunakan tim pengembangan untuk berkolaborasi secara lebih efisien.
Repositori juga menggunakan strategi percabangan, seperti pengembangan berbasis trunk atau GitFlow, untuk memfasilitasi pengembangan paralel. Percabangan memungkinkan pengembang untuk membuat cabang fitur dan cabang berumur pendek untuk mengisolasi pekerjaan mereka sebelum menggabungkannya kembali ke cabang kode utama.
Server CI, yang dapat dikonfigurasi untuk membangun berbagai proyek untuk platform yang berbeda, memusatkan semua operasi CI dan menyediakan platform yang stabil dan dapat diandalkan untuk pengembangan perangkat lunak. Mereka memodelkan dan memvisualisasikan alur kerja (untuk pengiriman berkelanjutan) dan menyediakan antarmuka intuitif untuk membangun pipeline pengiriman berkelanjutan (CD).
Server CI juga menjalankan pembuatan, pengujian, dan rilis otomatis, mengatur protokol kontrol versi, memantau repositori kode, menangani pelaporan status, dan mendukung plug-in yang dapat meningkatkan fungsionalitas sistem.
Sistem CI mendorong pengembang untuk mengirimkan perubahan kode beberapa kali setiap hari, memprioritaskan perubahan kecil dan terfokus pada tugas atau fitur tertentu. Dengan menggunakan alat bantu seperti tarik permintaan (pull request) (deskripsi) dan gabungkan permintaan (merge request), tim dapat memulai tinjauan kode dan mendiskusikan masalah sebelum menggabungkan kode baru, sehingga kesalahan dapat diketahui sejak dini.
Server dan alat integrasi berkelanjutan (termasuk alat CI sumber terbuka populer seperti Jenkins, CircleCI, GitHub, AWS CodePipeline, dan GitLab CI) memantau repositori pusat untuk perubahan kode. Ketika mereka mendeteksi perubahan baru, server build memicu proses pembangunan dan menjalankan alur kerja yang telah ditentukan dan membangun skrip, mengompilasi dan mengemas kode sebagai persiapan untuk pengujian dan pada akhirnya, penerapan.
Alat CI menjalankan berbagai pengujian untuk memvalidasi kode sebelum bergabung dengan basis kode. Pengujian unit memvalidasi komponen atau fungsi individu, yang memberikan masukan langsung tentang perilaku kode. Pengujian integrasi menilai interaksi antara komponen dan modul perangkat lunak untuk memastikan semuanya bekerja sama dengan benar dan untuk menangkap masalah yang mungkin terlewatkan oleh pengujian unit.
Dalam beberapa alur kerja CI, pengujian menyeluruh memvalidasi perangkat lunak dengan mensimulasikan interaksi pengguna untuk memverifikasi bahwa perangkat lunak berperilaku dengan benar dari sudut pandang pengguna. Tim juga dapat menjalankan tes kualitas kode dan analisis statis untuk memeriksa respons dan stabilitas aplikasi di bawah beban serta mengidentifikasi pelanggaran standar pengkodean dan kerentanan keamanan.
Server CI segera memberi tahu pengembang jika build atau pengujian gagal. Jika terjadi kegagalan, pengembang memprioritaskan perbaikan kode untuk memastikan cabang utama tetap dapat digunakan.
Jika pembangunan berhasil, server menghasilkan artefak (seperti biner yang dikompilasi, gambar Docker, dan penginstal) yang diberi versi dan disimpan dalam repositori artefak untuk pengujian dan penerapan di masa mendatang. Terlepas dari hasilnya, sistem CI terbaik akan merekam upaya integrasi, tingkat keberhasilan, dan metrik lainnya agar anggota tim selalu dapat mengakses dokumentasi versi yang komprehensif.
Pengujian adalah komponen penting dari proses integrasi berkelanjutan. Setidaknya, pengujian merupakan sepertiga dari aktivitas CI, tetapi itu hanya berlaku ketika tim menjalankan satu tahap pengujian. Pada kenyataannya, kegiatan pengujian dapat membentuk sebagian besar beban kerja untuk alat CI.Â
Pengujian berkelanjutan di lingkungan CI dimulai ketika pengembang menghasilkan build dan paket (juga dikenal sebagai entitas yang dapat diinstal atau entitas yang dikemas) dan berakhir ketika paket masuk ke produksi. Setiap langkah, secara keseluruhan, terdiri atas rangkaian tes.
Sebagai bagian dari proses pengujian otomatis di CI, pengembangan berbasis uji coba secara iteratif membangun kode dan menguji satu contoh penggunaan dalam sekali waktu; kemudian memberi tahu tim tentang bagaimana kinerja kode di seluruh area fungsional aplikasi.
Namun, penting bagi pengembang untuk menjalankan semua pengujian—dan subset pengujian—di lingkungan lokal mereka untuk memastikan bahwa mereka hanya menjalankan kode sumber ke kontrol versi setelah perubahan kode baru lulus pengujian. Pendekatan ini memaksimalkan cakupan pengujian, mencegah regresi kode, dan meletakkan dasar untuk pengiriman berkelanjutan.
Pada kerangka kerja DevOps, integrasi berkelanjutan berada di awal proses pengembangan perangkat lunak. Pipeline DevOps mempercepat pengiriman perangkat lunak berkualitas tinggi dengan mengotomatiskan dan menggabungkan upaya tim pengembangan dan operasi TI, yang secara tradisional berada dalam silo mereka sendiri.
Proses dan budaya DevOps terbaik melampaui pengembangan dan operasi hingga mencakup rekayasa platform dan infrastruktur, keamanan, kepatuhan, tata kelola, manajemen risiko, lini bisnis, pengguna akhir, dan pelanggan. Dengan kata lain, DevOps yang baik harus menggabungkan input dari semua pemangku kepentingan aplikasi ke dalam siklus hidup pengembangan perangkat lunak.
Sebagai bagian dari DevOps, CI memungkinkan pengembang untuk memeriksa kode mereka setidaknya sekali sehari untuk menjaga agar salinan lokal tidak melayang terlalu jauh dari cabang utama pembuatan kode. Pendekatan ini membantu tim mencegah konflik penggabungan yang dapat "merusak" build dalam tahap pengiriman dan penggunaan.
Integrasi berkelanjutan adalah pemberhentian pertama dalam pipeline CI/CD dan biasanya diikuti oleh proses pengiriman berkelanjutan dan penerapan berkelanjutan.
Pengiriman berkelanjutan (CD) dimulai di mana integrasi berkelanjutan berhenti, mengotomatiskan pengiriman aplikasi dan perubahan basis kode yang divalidasi (pembaruan, perbaikan bug, dan bahkan fitur baru) ke semua lingkungan yang diperlukan untuk pengembangan, pengujian, dan akhirnya, pengiriman ke pengguna akhir. Proses CD menjaga fase pembuatan tetap “hijau,” sehingga artefak siap diterapkan kapan saja.
Dengan penerapan berkelanjutan (fase akhir DevOps), perubahan kode secara otomatis dirilis ke lingkungan produksi dan didistribusikan ke pengguna akhir. Pada titik ini, modifikasi kode telah melewati semua protokol pengujian dan oleh karena itu aman dan siap untuk digunakan untuk umum. Skrip atau alat bantu CI selanjutnya memindahkan artefak perangkat lunak ke server publik atau platform distribusi (seperti toko aplikasi) dan mendorong pembaruan ke pengguna akhir.
Integrasi berkelanjutan dan pengembangan tangkas memiliki banyak fitur yang sama, termasuk otomatisasi pengujian, sehingga berguna untuk membahas bagaimana keduanya berinteraksi.
Tangkas adalah praktik yang mengatur proses pengembangan ke dalam kelompok-kelompok kerja yang lebih kecil, atau "lompatan/sprint", untuk meminimalkan hambatan, memungkinkan kolaborasi pengembang, dan mempercepat pengiriman perangkat lunak. Metodologi tangkas menyadari bahwa praktik pengembangan perangkat lunak dan kebutuhan pelanggan bersifat dinamis, yang membuatnya cenderung berubah seiring waktu.
Dengan demikian, agile menyediakan pendekatan berulang untuk pengembangan yang memungkinkan tim dan bisnis beradaptasi dengan lebih mudah terhadap perubahan dan meningkatkan serta mengembangkan solusi perangkat lunak dari waktu ke waktu. Dan karena CI mendorong pembaruan dan validasi kode yang sering, CI juga memungkinkan tim yang tangkas untuk mendorong produk berkualitas tinggi lebih cepat lagi, menjadikannya praktik yang secara inheren tangkas.
Integrasi berkelanjutan membantu tim DevOps mengandalkan repositori bersama untuk pengodean, pengujian, penerapan, dan dukungan perangkat lunak, tetapi ada beberapa langkah tambahan yang dapat diambil bisnis untuk mengoptimalkan proses. Praktik terbaik CI yang diterapkan secara umum meliputi:
Basis kode terpusat yang terkonsolidasi dapat menyederhanakan distribusi dan visibilitas. Banyak organisasi menggunakan manajemen kontrol sumber untuk memelihara satu repositori yang melacak dan mengontrol semua file yang terkait dengan build produk.
Organisasi dapat menciptakan budaya konsistensi dengan mengharuskan pengembang untuk melakukan perubahan mereka ke aliran pengembangan utama setidaknya sekali sehari. Hal ini juga memungkinkan pengembang untuk memverifikasi bahwa salinan pekerjaan mereka konsisten dengan aliran pengembangan utama.
Mengoptimalkan skrip pembangunan, paralelisasi tugas, dan menggunakan mekanisme caching dapat mengurangi waktu pembuatan. Tim juga dapat mengonfigurasi saluran CI sehingga integrasi baru yang bermasalah akan gagal di awal proses. Ini memungkinkan pengembang untuk mengatasi masalah dengan cepat dan menghabiskan lebih sedikit waktu debugging.
Membuat lingkungan pengujian semirip mungkin dengan lingkungan produksi akhir dapat memastikan hasil pengujian memberikan representasi yang akurat tentang bagaimana kinerja perangkat lunak di dunia nyata.
Menerapkan bendera fitur untuk mengontrol rilis fitur baru memungkinkan sistem CI untuk menggabungkan fitur yang tidak lengkap atau eksperimental ke dalam cabang utama tanpa memengaruhi produksi secara keseluruhan.
Meninjau dan memperbarui pipeline CI secara berkala untuk memasukkan alat, teknologi, dan praktik terbaik baru memungkinkan pipeline untuk berevolusi sesuai dengan kebutuhan proyek.
Menyiapkan pipeline CI yang kuat—terutama sebagai bagian dari DevOps dan pengembangan yang tangkas—membutuhkan perencanaan dan konfigurasi yang cermat, termasuk memilih alat bantu yang tepat, mendefinisikan alur kerja pembangunan dan pengujian, serta mengonfigurasi infrastruktur. Pipeline CI juga memerlukan pemeliharaan rutin untuk mengakomodasi perubahan dalam basis kode, dependensi (seperti API) dan infrastruktur.
Namun, menerapkan CI dapat menawarkan tim pengembangan perangkat lunak berbagai manfaat, termasuk:
Proses CI memungkinkan tim untuk mengatasi kesalahan lebih awal—terkadang dalam beberapa menit setelah check-in.
Setiap orang dalam tim dapat mengubah kode, mengintegrasikan perubahan kode, dan mengidentifikasi ketidaksesuaian kode serta kesalahan integrasi, menyederhanakan berbagi pengetahuan dan meningkatkan kualitas kode dan perangkat lunak melalui masukan dari rekan kerja.
Karena kode baru terintegrasi terus menerus, tim menghabiskan lebih sedikit waktu untuk mengintegrasikan dan menguji sejumlah besar kode. Dan alat bantu CI loop masukan yang dipercepat yang ditawarkan membantu pengembang mengulang dan memberikan pembaruan perangkat lunak dan produk baru kepada pengguna akhir dengan lebih cepat.
Perubahan kode yang sering dilakukan berarti perubahan yang lebih kecil dan lebih bertahap yang lebih mudah dipahami, ditinjau, dan diuji. Ini mengurangi risiko memperkenalkan masalah signifikan ke dalam basis kode selama pengembangan.
Otomatiskan pengiriman perangkat lunak untuk aplikasi apa pun di lingkungan on premises, cloud, atau mainframe.
Gunakan perangkat lunak dan alat bantu DevOps untuk membangun, menerapkan, dan mengelola aplikasi cloud native di berbagai perangkat dan lingkungan.
Dapatkan kemampuan baru dan dorong ketangkasan bisnis dengan layanan konsultasi cloud IBM. Temukan cara berkolaborasi dalam menciptakan solusi, mempercepat transformasi digital, dan mengoptimalkan kinerja melalui strategi hybrid cloud dan kemitraan pakar.