CI/CD Introduction

Ibnu Firdaus
PPL D7 — Fasilkom UI
4 min readApr 3, 2019

Get to know how we implement continuous continuous something here..

Does it ever end?

Hello whatssaapp gais kembali lagi bersama gua di… wait this is not youtube!?!??

Ya jadi pada topik bahasan kali ini kita akan membahas tentang CI/CD. Pertama, kita akan memahami apa itu CI, apa itu CD, dan apa hubungannya sama band terkenal AC/DC. spoiler alert, gada :( . So, udah cukup segitu aja bagian intro yang berfungsi untuk menambah count words nya, let’s get started!

The Basics part 1 : Continuous Integration

Continuous Integration kalau diartikan secara mentah maka akan menjadi Integrasi Berkelanjutan. Jadi, secara dasarnya banget nih.. CI itu berfokus pada bagaimana hasil pekerjaan, dalam hal ini kode/program/editan readme.md biar dikira kerja :), dapat diintegrasikan secara kontinu, atau isitilah kerennya seamless. Nah, CI ini klop nya diterapkan pada online repository, Yap! Git. jadi CI ini tanpa kita sadari sering sekali kita lakukan setiap hari dalam dunia pemrograman, dimana kita bekerja secara rapid and fast dengan anggota lain tapi tidak sampai ‘bertabrakan’.

Tujuan dari adanya CI ini adalah untuk menjadikan integrasi pekerjaan menjadi sesuatu yang mudah, sederhana, dan dapat dilakukan berulang-ulang setiap hari, setiap pekerjaan. Jadi, idenya adalah, ketimbang membuat fitur-fitur dalam sebuah wadah terisolasi, lalu menyetornya diakhir siklus pekerjaan, disini kita didorong untuk membuat dan menyetor fitur/produk secara langsung ke repository. Anytime, anywhere.

Apa sih keuntungannya CI ini? Pertama, karena integrasi dapat dilakukan dengan cepat dan segera, semua kendala yang timbul dari hasil integrasi ini dapat dideteksi dan diperbaiki langsung. Kedua, penerapan CI dapat membuat flow kerja lebih dinamis, jadi nggak ada lagi tuh orang ngumpul sore-sore setoran kodingan, hehe…

The Basics part 2: Continuous Deployment

Continuous Deployment adalah tahapan lanjutan setelah Continuous Integration. CD disini berperan untuk melakukan automation dalam hal deployment. Jadi, saat semua requirement sudah terpenuhi, fitur/produk/program yang dibuat sudah bisa meluncur langsung ke tahap deployment, baik itu development, staging, ataupun production.

Jika kita melihat dari flow nya, pertama-tama seorang programmer akan mengerjakan sesuatu, lalu dia ‘menyetor’ pekerjaan dia dan melakukan integrasi (CI was here!) dengan repository yang dijadikan tujuan utama penyetoran. Lalu, pekerjaan yang sudah disetor tersebut akan dilakukan pengecekan apakah sudah lulus requirement atau belum, biasanya ada 3 tahapan pada pengecekan ini, yaitu (1) Apakah program yang dibuat sudah build-able? (2) Apakah program yang dibuat sudah lulus uji tes? baik itu tes fitur yang baru dikerjakan, fitur yang sudah ada, maupun fitur yang diintegrasikan. Jika sudah lulus 2 tahapan itu, kita masuk ke tahapan selanjutnya yaitu (3) Deployment ke target build.

Benefit yang didapat dari penerapan ini adalah kita sebagai programmer tidak perlu pusing melakukan integrasi dan deployment secara manual, dan berulang tiap kali kita mau ‘setoran’. Semua hal tersebut sudah di-otomasi sehingga dapat mempercepat flow development, menguransgi cost untuk melakukan integrasi dan deployment, serta dapat menjadi sarana QA untuk memastikan produk yang dibuat sudah memenuhi standar yang telah ditentukan.

The Implementation : A Case Study

Jadi so pasti banget nih kelompok kami menerapkan prinsip CI/CD dalam pengembangan software… Jadi, seperti apa sih kami menerapkan CI/CD dalam pekerjaan? Scroll aja gann hehe….

Stages of our CI/CD

Jadi, di PPL ini kita ada 3 stages atau tahapan dalam implementasi CI/CD.

Build merupakan fase untuk mengecek apakah program yang kita buat sudah dapat di compile/build secara baik atau belum, jika belum (alias gagal) maka dua tahapan selanjutnya tidak akan dijalankan.

Test merupakan fase untuk mengecek apakah fungsi-fungsi atau komponen-komponen yang kita buat sudah tahan uji, fase ini bertujuan untuk memastikan bahwa selain kode kita dapat dijalankan, kode nya juga dapat berjalan dengan baik dan benar :)

Deploy merupakan tahap terakhir di siklus CI/CD kelompok kami, pada tahapn ini akan dilakukan deployment ke paltform target, dalam hal ini portainer. Jadi setelah program kita dapat berjalan, dan jalannya benar, eaa.. , maka ini berarti program kita sudah pancen OK! dan siap untuk di deploy, dan tahapan inilah yang akan melakukannya.

Untuk mengerti lebih lanjut, coba kita lihat salah satu stages…

Example of Job

Jadi disini saya akan menjelaskan secara singkat tiap-tiap bagian :

  • build-service adalah sebuah nama Jobs, Jobs adalah satuan perintah yang akan dieksekusi oleh Gitlab di tiap-tiap stages
  • image menandakan script ini akan berjalan dalam environment apa, dalam kasus ini script ini akan mengeksekusi perintah selanjutnya dalam nodejs versi terbaru
  • stage menandakan pada stage/fase mana Jobs ini akan dijalankan, dalam kasus ini Jobs ini akan dijalankan pada stage build
  • before script adalah perintah-perintah yang akan dieksekuis sebelum script
  • script berisi perintah-perintah yang akan dieksekusi, ini adalah bagian int dari Jobs
  • only merupakan sebuah keyword opsional yang menandakan bahwa Jobs ini akan dijalankan jika memenuhi kondisi yang disebutkan
  • changes berarti Jobs ini akan dijalankan hanya (only) jika ada perubahan (changes) pada direktori yang diberikan

Jadi bergitulah kira-kira pengenalan singkat kepada CI/CD, tertarik untuk tahu lebih lanjut? Cek postingan blog teman saya yang membahas teknik yang lebih advanced disini.

Thanks and see you!

--

--