Apa itu CI / CD ?

CI / CD adalah kependekan dari Continuous Integration, Continuous Delivery



Apakah itu ?

Continuous Integration, Continuous Delivery merupakan salah satu cara untuk mempercepat deployment code yang dibuat oleh Software Engineer dengan bantuan automasi.



Apa persoalan yang diselesaikan oleh CI / CD ini ?

CI/CD ini muncul karena :

  • Masalah Integration Hell.
    Integration Hell mengacu kepada permasalahan waktu produk kita mau release, ketika tim menggabungkan code program mereka yang mau direlease. Sebelum konsep CI/CD ditemukan, maka proses penggabungan code ini jarang yang lancar, tidak mudah dan mesti banyak dilakukan proses manual untuk menggabungkan code program yang bentrok..

  • Masalah Konsistensi proses deployment.
    Sebelum CI/CD, ketika kita ingin melakukan deployment terhadap code kita, maka tiap Software Engineer memiliki cara manual yang berbeda-beda untuk melakukan deployment. Ada yang menjalankan unit test dulu, ada yang tidak. Ada yang melakukan copy file secara manual ke server, ada yang pakai tools FTP, ada yang pakai GUI FTP, dll.

    Atau ada yang menjalankan programnya di server dengan cara manual, ada yang pakai background proses. Banyak kombinasi yang mungkin terjadi ketika semua masih dilakukan secara manual. Akan susah memaksakan proses standar bagi semua orang ketika semua masih dilakukan secara manual.

  • Masalah lamanya waktu yang dibutuhkan ketika proses deployment.
    Sebelum CI/CD, melakukan deployment butuh waktu yang lebih lama. Kalau cuma satu service atau paket code yang akan dideploy mungkin tidak akan terasa perbedaannya. Akan tetapi kalau sudah banyak paket code yang dideploy, maka proses deployment akan menjadi cukup lama. Apalagi dengan trend microservice dan microfrontend, maka satu kali deployment bisa membutuhkan puluhan paket code yang akan dideploy.

Apa CI / CD ini akan menyelesaikan masalah diatas ?

Tentu saja iya, dengan cara apa ?

Caranya begini lho


Dengan melakukan Automasi, contohnya :

  • Automasi ketika menggabungkan code kita dengan code orang lain ketika melakukan release. Misalnya dengan memanfaatkan repository tools seperti git, svn, dll. Dan bisa saja dibantu dengan proses manual merge tools seperti SemanticMerge, Git Merge Request, Meld, Kdiff, dll.

  • Automasi proses
    Automasi proses dilakukan dengan bantuan tools seperti Jenkins, CircleCI, Bamboo, GitLab CI, GoCD, dll. Alur proses akan dimasukkan ke dalam step-step terpisah, seperti line produksi di sebuah pabrik. Alur ini dinamakan Pipeline. Di pipeline ini kita dengan mudah bisa mendefinisikan apa saja yang dijadikan proses standar ketika melakukan deployment.
    Dengan automasi proses ini pula, waktu yang kita butuhkan dalam melakukan deployment akan menjadi lebih singkat dan lebih mudah..



Apakah CI/CD ini cuma berkaitan dengan tools saja ?

Tools hanyalah sebagai pembantu kita dalam melakukan sesuatu hal. Sementara yang penting kita butuhkan adalah mindset, sekumpulan kebiasaan, practice, dan juga guidance ketika mengimplementasikan CI/CD ini.

Apa saja hal teknis yang filosofis yang berkaitan dengan CI/CD ini ?

Misalnya :

  • Meningkatkan kebiasaan dalam melakukan commit code ketika terjadi perubahan code.
  • Meningkatkan code coverage di code agar memenuhi standard proses CI/CD.
  • Mengimplementasikan clean and good code agar mudah membuat unit test.
  • Mengimplementasikan Testing Automation.
  • dll.