Untuk mengantisipasi dimulainya kursus "CI / CD di AWS, Azure dan Gitlab", kami telah menyiapkan terjemahan materi yang berguna untuk Anda.
Continuous Integration (CI) dan Continuous Delivery (CD) adalah budaya, serangkaian prinsip dan praktik yang memungkinkan pengembang menerapkan perubahan perangkat lunak lebih sering dan lebih andal.
CI / CD adalah salah satu praktik DevOps . Ini juga berlaku untuk praktik agile : Otomatisasi penerapan memungkinkan pengembang untuk fokus pada pemenuhan persyaratan bisnis, kualitas kode, dan keamanan.
Definisi CI / CD
Continuous Integration adalah metodologi pengembangan dan serangkaian praktik di mana perubahan kecil dilakukan pada kode dengan komitmen yang sering. Dan karena sebagian besar aplikasi modern dikembangkan menggunakan berbagai platform dan alat, ada kebutuhan akan mekanisme integrasi dan pengujian perubahan yang diperkenalkan.
Secara teknis, tujuan CI adalah menyediakan cara yang konsisten dan otomatis untuk membangun, mengemas, dan menguji aplikasi. Dengan proses integrasi berkelanjutan yang efisien, pengembang lebih cenderung membuat komitmen yang sering, yang pada gilirannya akan membantu meningkatkan komunikasi dan meningkatkan kualitas perangkat lunak.
Pengiriman berkelanjutan dimulai saat integrasi berkelanjutan berakhir. Ini mengotomatiskan penerapan aplikasi ke lingkungan yang berbeda: sebagian besar pengembang bekerja dengan lingkungan produksi dan dengan lingkungan pengembangan dan pengujian.
Alat CI / CD membantu menyesuaikan pengaturan lingkungan tertentu yang dikonfigurasi selama penerapan. Dan juga CI / CD-automation melakukan permintaan yang diperlukan ke server web, database, dan layanan lain yang mungkin perlu direstart atau melakukan beberapa tindakan tambahan saat menerapkan aplikasi.
Integrasi berkelanjutan dan pengiriman berkelanjutan membutuhkan pengujian berkelanjutankarena tujuan akhirnya adalah mengembangkan aplikasi yang berkualitas. Pengujian berkelanjutan sering kali diterapkan sebagai rangkaian berbagai pengujian otomatis (regresi, performa, dan lainnya) yang dijalankan di pipeline CI / CD.
Praktik CI / CD yang matang memungkinkan penerapan berkelanjutan: ketika kode berhasil melewati pipeline CI / CD, rakitan secara otomatis diterapkan ke lingkungan produksi. Tim yang mempraktikkan pengiriman berkelanjutan dapat melakukan penerapan harian atau bahkan per jam. Perlu diperhatikan di sini, bahwa pengiriman berkelanjutan tidak cocok untuk semua aplikasi bisnis .
Integrasi berkelanjutan meningkatkan komunikasi dan kualitas
Continuous Integration adalah metodologi pengembangan yang didasarkan pada proses dan otomatisasi yang diatur. Dengan implementasi integrasi berkelanjutan, pengembang sering memasukkan kode mereka ke repositori kode sumber. Dan sebagian besar tim mengikuti aturan berkomitmen setidaknya sekali sehari. Perubahan kecil lebih mudah untuk menemukan cacat dan masalah lain-lain daripada perubahan besar yang telah dikerjakan dalam jangka waktu yang lama. Selain itu, bekerja dengan siklus komit pendek mengurangi kemungkinan beberapa pengembang mengubah bagian kode yang sama, yang dapat menyebabkan konflik penggabungan.
Tim yang menerapkan integrasi berkelanjutan sering kali memulai dengan menyiapkan sistem kontrol versi dan menentukan alur kerja. Terlepas dari kenyataan bahwa komit sering dibuat, penerapan fitur dan perbaikan bug bisa memakan waktu lama. Ada beberapa pendekatan untuk mengontrol fitur dan kode mana yang siap.
Banyak orang menggunakan tanda fitur - mekanisme untuk mengaktifkan dan menonaktifkan fungsionalitas saat waktu proses. Fungsionalitas yang masih dalam pengembangan dibungkus dengan tanda fitur dan diterapkan dari cabang master ke produksi, tetapi dinonaktifkan hingga siap sepenuhnya untuk digunakan. Menurut penelitian terbaru63 persen tim yang menggunakan laporan fitur bendera meningkatkan kemampuan pengujian dan meningkatkan kualitas perangkat lunak. Ada alat khusus untuk bekerja dengan tanda fitur, seperti CloudBees Rollout , Optimizely Rollouts, dan LaunchDarkly , yang terintegrasi ke CI / CD dan memungkinkan konfigurasi di tingkat fitur.
Cara lain untuk bekerja dengan fitur adalah dengan menggunakan cabang di sistem kontrol versi. Dalam kasus ini, Anda perlu mendefinisikan model percabangan (misalnya, seperti Gitflow) dan menjelaskan bagaimana kode masuk ke cabang pengembangan, pengujian, dan produksi. Untuk fitur dengan siklus pengembangan yang panjang, cabang fitur terpisah dibuat. Setelah menyelesaikan pekerjaan pada sebuah fitur, pengembang menggabungkan perubahan dari cabang fitur menjadi cabang pengembangan utama. Pendekatan ini berfungsi dengan baik, tetapi bisa merepotkan jika banyak fitur sedang dikembangkan pada saat yang bersamaan.
Fase build adalah mengotomatiskan pengemasan perangkat lunak, database, dan komponen lain yang diperlukan. Misalnya, jika Anda mengembangkan aplikasi Java, CI akan mengemas semua file statis seperti HTML, CSS, dan JavaScript bersama dengan aplikasi Java dan skrip database.
CI tidak hanya akan mengemas semua komponen perangkat lunak dan database, tetapi juga akan secara otomatis melakukan pengujian unit dan jenis pengujian lainnya. Pengujian ini memungkinkan pengembang mendapatkan umpan balik bahwa perubahan yang mereka lakukan tidak merusak apa pun.
Sebagian besar alat CI / CD memungkinkan Anda memulai build secara manual, sesuai komitmen, atau jadwal. Tim perlu mendiskusikan jadwal build yang sesuai dengan mereka berdasarkan ukuran tim, komitmen harian yang diharapkan, dan kriteria lainnya. Komit dan build harus dilakukan dengan cepat, jika tidak, build yang panjang dapat menjadi kendala bagi developer untuk mencoba berkomitmen dengan cepat dan sering.
Pengujian berkelanjutan lebih dari sekadar otomatisasi pengujian
Kerangka kerja pengujian otomatis membantu teknisi QA merancang, menjalankan, dan mengotomatiskan berbagai jenis pengujian yang membantu developer melacak kesuksesan build. Pengujian mencakup uji fungsional yang dikembangkan di akhir setiap sprint dan digabungkan menjadi uji regresi untuk seluruh aplikasi. Uji regresi memberi tahu tim jika perubahan mereka merusak sesuatu di tempat lain dalam aplikasi.
Praktik terbaiknya adalah meminta pengembang untuk menjalankan semua atau sebagian uji regresi di lingkungan lokalnya. Ini akan memastikan bahwa pengembang melakukan kode yang sudah diperiksa.
Tes regresi hanyalah permulaan. Pengujian performa, pengujian API, analisis kode statis, pengujian keamanan - pengujian ini dan jenis lainnya juga dapat diotomatiskan. Poin utamanya adalah kemampuan untuk menjalankan pengujian ini dari baris perintah, melalui webhook, atau melalui layanan web dan mengembalikan hasil eksekusi: apakah pengujian berhasil atau tidak.
Pengujian berkelanjutan tidak hanya melibatkan otomatisasi, tetapi juga integrasi pengujian otomatis ke dalam pipeline CI / CD. Uji unit dan fungsional dapat menjadi bagian dari CI dan mengidentifikasi masalah sebelum atau selama peluncuran pipeline CI. Pengujian yang memerlukan penerapan lingkungan penuh, seperti pengujian kinerja dan keamanan, sering kali merupakan bagian dari CD dan dijalankan setelah build diterapkan ke lingkungan target.
Pipa CD mengotomatiskan pengiriman perubahan ke lingkungan yang berbeda
Pengiriman berkelanjutan adalah penerapan otomatis aplikasi ke lingkungan targetnya. Biasanya, pengembang bekerja dengan satu atau beberapa lingkungan pengembangan dan pengujian tempat aplikasi diterapkan untuk pengujian dan peninjauan. Untuk ini, alat CI / CD seperti Jenkins , CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo, Travis CI digunakan.
Pipeline CD tipikal terdiri dari langkah-langkah pembuatan, pengujian, dan penerapan. Pipeline yang lebih kompleks mencakup langkah-langkah berikut:
- Mengambil kode dari kontrol sumber dan menjalankan build.
- Mengonfigurasi infrastruktur secara otomatis melalui pendekatan infrastruktur-sebagai-kode.
- Menyalin kode ke lingkungan target.
- Menetapkan variabel lingkungan untuk lingkungan target.
- (-, API-, ).
- , , .
- .
- .
Misalnya, dalam Jenkins conveyor menentukan file Jenkinsfile, yang menjelaskan berbagai langkah seperti assembly (build), testing (test) dan deployment (deploy). Ini juga menjelaskan variabel lingkungan, kunci rahasia, sertifikat, dan parameter lain yang dapat digunakan dalam tahapan pipeline. Bagian posting mengkonfigurasi penanganan kesalahan dan pemberitahuan.
Dalam pipeline CD yang lebih kompleks, mungkin ada langkah-langkah tambahan, seperti sinkronisasi data, pengarsipan sumber informasi, penginstalan update dan patch. Alat CI / CD biasanya mendukung plugin. Misalnya, Jenkins memiliki lebih dari 1500 plugin untuk integrasi dengan platform pihak ketiga, untuk memperluas antarmuka pengguna, administrasi, pengelolaan kode sumber, dan pembuatan.
Saat menggunakan alat CI / CD, pengembang harus memastikan bahwa semua parameter dikonfigurasi di luar aplikasi melalui variabel lingkungan. Alat CI / CD memungkinkan Anda untuk mengatur nilai variabel ini, menyembunyikan kata sandi dan kunci akun, dan menyesuaikannya selama penerapan untuk lingkungan tertentu.
Juga di CD-tools terdapat dasbor dan pelaporan. Jika terjadi kegagalan build atau pengiriman, mereka akan memberi tahu tentang hal itu. Dengan mengintegrasikan CD dengan kontrol versi dan alat agile, lebih mudah untuk menemukan perubahan kode dan cerita pengguna yang disertakan dalam build.
Mengimplementasikan Pipeline CI / CD dengan Kubernetes dan Arsitektur Tanpa Server
Banyak tim yang menggunakan pipeline CI / CD di cloud menggunakan container seperti Docker dan sistem orkestrasi seperti Kubernetes . Penampung membantu menstandarkan pengemasan, pengiriman, dan menyederhanakan penskalaan serta menghancurkan lingkungan yang tidak stabil.
Ada banyak opsi untuk berbagi container, infrastruktur sebagai kode, dan pipeline CI / CD. Anda dapat mempelajari lebih lanjut tentang ini di artikel Kubernetes dengan Jenkins dan Kubernetes dengan Azure DevOps .
Komputasi tanpa server adalah cara lain untuk menyebarkan dan menskalakan aplikasi. Dalam lingkungan tanpa server, infrastruktur sepenuhnya dikelola oleh penyedia cloud, dan aplikasi menggunakan sumber daya sesuai kebutuhan sesuai dengan pengaturannya. Misalnya, di AWS, aplikasi tanpa server dijalankan melalui fungsi AWS Lambda , penerapannya dapat diintegrasikan ke dalam pipeline CI / CD Jenkins menggunakan plugin.
CI / CD memungkinkan penyebaran kode yang lebih sering
Jadi, mari kita rangkum. Paket CI, pengujian dibangun, dan memberi tahu pengembang jika terjadi kesalahan. CD secara otomatis menyebarkan aplikasi dan menjalankan tes tambahan.
Pipeline CI / CD dirancang untuk organisasi yang perlu sering melakukan perubahan pada aplikasi dengan proses pengiriman yang andal. Selain menstandarkan build, mengembangkan pengujian, dan mengotomatiskan penerapan, kami mendapatkan alur kerja holistik untuk menerapkan perubahan kode. Menerapkan CI / CD memungkinkan pengembang untuk fokus pada peningkatan aplikasi mereka dan tidak membuang waktu untuk menerapkannya.
CI / CD adalah salah satu praktik DevOpskarena ditujukan untuk memerangi kontradiksi antara pengembang yang ingin sering melakukan perubahan dan eksploitasi, yang membutuhkan stabilitas. Dengan otomatisasi, pengembang dapat membuat perubahan lebih sering, dan tim operasi, pada gilirannya, mendapatkan lebih banyak stabilitas, karena konfigurasi lingkungan distandarisasi dan pengujian berkelanjutan dilakukan selama proses pengiriman. Selain itu, pengaturan variabel lingkungan terpisah dari aplikasi dan ada prosedur rollback otomatis.
Dampak penerapan pipeline CI / CD dapat diukur dalam hal Indikator Kinerja Utama (KPI) DevOps... KPI seperti frekuensi penerapan, perubahan waktu tunggu, dan waktu rata-rata untuk pemulihan sering kali meningkat dengan penerapan CI / CD dengan pengujian berkelanjutan. Namun, CI / CD hanyalah salah satu proses yang dapat berkontribusi pada peningkatan ini. Ada kondisi lain untuk meningkatkan frekuensi pengiriman.
Untuk memulai CI / CD, tim pengembangan dan operasi perlu berkolaborasi dalam teknologi, praktik, dan prioritas. Tim perlu membangun konsensus tentang pendekatan yang tepat untuk bisnis dan teknologi mereka sehingga setelah implementasi CI / CD, tim secara konsisten mengikuti praktik yang dipilih.
Ringkasan Alat CICD: Gitlab CI, Docker, Ansible