Setelah tidak lama menulis dan sharing, akhirnya ada waktu untuk berbagi ilmu lagi. Saya lihat artikel terakhir itu agustus 2016, artinya sekitar 4 tahun saya tidak menulis ya.. dan pasti sudah banyak teknologi baru yang hadir selama 4 tahun tersebut. Doakan semoga saya bisa rutin menulis lagi
Disini saya coba bahas mengenai CI/CD yang saat ini banyak diadopsi perusahaan-perusahaan besar, jadi wajib kita mengetahui dasarnya.
Membangun CI/CD (Continuous Integration/Continuous Deployment) adalah backbone dari implementasi DevOps environment. CI/CD berguna sebagai jembatan dari gap antara development dan operations yang menjalankan automation mulai dari bulding, testing, dan deployment aplikasi. Disini saya akan share apa itu CI/CD dan bagaimana CI/CD bekerja.
Sebelum membahas CI/CD pipeline, kita mulai dengan memahami DevOps.
DevOps adalah metode pengembangan aplikasi dengan pendekatan yang melibatkan continuous development, continuous testing, continuous integration, continuous deployment, dan continuous monitoring software dalam proses pengembangannya (development lifecycle). Proses ini diadopsi oleh perusahaan besar untuk mendevelop high quality apps dan memperpendek proses pengembangan aplikasi, hasilnya adalah kepuasan customer, sesuatu yang diinginkan setiap perusahaan.
Sekarang, mari kita lihat DevOps Life Cycle dan cari tahu bagaimana hubungan nya dengan pengembangan aplikasi.
Gambar diatas menjelaskan bahwa proses CI (Continuous Integration) berada di step 01 dan step 02 dimana aplikasi pertama kali di kembangkan menggunakan version control kemudian proses compile, integrasi, testing, dan review pada environment SIT
Proses CD (Continuous Deployment) berada pada step 03 dan step 04 dimana aplikasi sudah selesai proses build lalu dimulai untuk deployment dan testing pada environment UAT. Kemudian step akhir nya yaitu aplikasi yang sudah tested, di deploy pada environment produksi (production).
Setelah mengetahui gambaran sederhana proses dalam CI/CD, mari kita kupas lebih dalam prosesnya.
Gambar diatas adalah logical Process bagaimana sebuah aplikasi bergerak ke berbagai phase dalam pengembangannya sebelum di delivery ke customer atau sebelum live production.
Agar lebih mudah dimengerti, asumsikan kita ingin membuat aplikasi, Proses pertama adalah Version Control Phase, pada phase ini para developer menulis code (ngoding) untuk aplikasi tersebut kemudian developer melakukan commit ke version control system (git, svn). Hal ini terus dilakukan berulang sampai semua code selesai dikerjakan.
Selanjutnya, adalah Build Phase, dimana pada developer menyatukan semua code yang suda dibuat, karena pada 1 aplikasi bisa terdiri dari berbagai macam modul (baik tradisional code atau framework code), hal ini biasanya dilakukan pada version control system dengan menggunakan version tag. Pada bagian ini juga dilakukan penggabungan (merge) berbagai cabang repository saat dilakukan build aplikasi.
Setelah proses build selesai maka akan dilakukan testing aplikasi, test ini biasa nya dilakukan dengan berbagai macam test, mulai dari test menu, form, login, validasi, integritas data, report, logic system, sampai test chunk (test kewajaran). Phase ini disebut Testing Phase.
Saat test sudah selesai maka step selanjutnya adalah Deploy Phase, dimana aplikasi akan di deploy pada staging atau server testing.
Saat kode sukses di deploy, kita bisa menjalakan sanity test (test dimana code berjalan dengan baik dan tidak ada error lagi). Pada phase ini yaitu Automate Phase, konfigurasi otomatis dijalankan sehingga aplikasi akan terlihat sanity test-nya berjalan baik atau tidak.
Sementara itu jika ditemukan error, maka developers harus melakukan perbaikan dan step yang harus dilakukan yaitu push code lagi ke dalam version control agar CI/CD pipeline tetap berjalan.
Pengembangan aplikasi terus dilakukan sampai proses dimana aplikasi bisa di deploy pada production environment atau Deploy to Production Phase.
Terakhir adalah Phase Measure + Validate dimana aplikasi dilakukan validasi ulang dan diuji kebenaran data nya.
Sekarang kita sudah mengetahui bagaimana CI/CD Pipeline bekerja. Selanjut nya apa ?
Selanjutnya adalah kita harus mengetahui bagaimana proses otomatis terjadi. Banyak sekali tools yang bisa digunakan untuk meng otomatis kan proses, salah satu tools yang terkenal adalah jenkins. Tugas utama seorang DevOps engineer adalah memastikan proses automate berjalan baik dari awal coding, commit, kemudian deploy production salah satunya menggunakan tool jenkins ini.
CI/CD dan Jenkins
Dari phase-phase diatas, mari kita lihat proses CI/CD dengan integrasi Jenkins.
Jenkins memberikan berbagai macam model job dan interface untuk kebutuhan automate di setiap proses. Di awal, developer memiliki Git Reporitory yang berguna sebagai tempat untuk melakukan commit code, kemudian Jenkins takes over dari sini dimana job automate nya telah di define telebih dahulu.
Jenkins melakukan pulls code dari Git, proses Jenkins ini masih berada di Commit, dimana code di commit untuk setiap branch. Kemudian Build dimana code di compile, disatukan menjadi sebuah aplikasi, lalu bergerak ke Testing dimana Jenkins menjalankan proses testing, setelah tidak ada issue maka akan masuk ke staging environment untuk integrasi, lalu automate QA, dan terakhir adalah production.
Serangkaian test ini di monitor oleh jenkins dan untuk mempermudah pemahaman, silakan lihat gambar dibawah.
Jika kita perhatikan lagi, Serangkaian test tersebut pastinya tidak bisa dilakukan sendiri oleh Jenkins, dibutuhkan environment lain agar proses CI/CD bisa optimal dan sesuai dengan procedure dari CI/CD Pipeline. Untuk melakukan proses deployment saat testing, diperlukan environment ringan, scalable, dan isolate. Karakteristik ini dimiliki oleh Container. Ringan berarti environment tersebut bisa berjalan dengan spesifikasi minim sesuai dengan kebutuhan aplikasi tanpa ada batasan minimum. Scalable berarti environment tersebut mudah untuk di duplikasi, mulai tanpa perlu investasi tambahan dan waktu yang lebih lama. isolate berarti enviroment ini terpisah antara satu container dengan container lain sehingga memudahkan dalam proses deployment. Container berperan sebagai wadah yang bisa di handle oleh Jenkins dalam proses build, testing, sanity tests, sampai live di produksi (production).
Kenapa harus menggunakan Container ?
Seperti yang sudah dijelaskan, container adalah virtual environment yang bisa kita buat hanya dengan beberapa detik saja dan task ini bisa di handle oleh Jenkins, selain itu container berbeda dengan virtual machine karena karakteristik nya yang lebih ringan karena container hanya berisi library saja
bagaimana, menarik bukan ? saya rasa automation, container, dan devops ini akan menjadi kebutuhan di masa depan dunia IT .
Referensi :
siapa yang menemukan inovasi automation, container, dan devops ini?
Those are a really cute way to upcycle. I bet my kids would love to make these. Garry Sweetwood
Informasi bermanfaat, menambah wawasan. Jadi flash back terakhir komentar do web ini 2013 lalu, tentang cara blokir no hp. Keep uodate.