2. Continuous Delivery
- Make release process safe, low-
risk, and quick.
- Require CI
- Automate deployments across
multiple environment and targets
Continuous Integration (CI)
- Automate build and test
workflows on changes to source
code
- Merge changes regularly to
detect problems early and often
What Is CI/CD?
5. Why CI/CD?
- Ensure changes to code base are properly tracked, tested, and built
- Automation to minimize human error
- Easily track source of bugs and ability to roll back
- Happier development & operations team
Bismillah Assalamu’alaykum warohmatullahi wabarokatuh
Selamat siang kawan - kawan semua
Terima kasih kepada para organizer, yang sudah memberikan kesempatan kepada saya untuk berbagi di acara google cloud Dev Fest 2022 Medan pada hari ini.
Sebelumnya, saya akan memperkenalkan diri terlebih dahulu
Nama saya Dolly Aswin HarahapDan saya asli Medan, dan berdomisili di Medan juga
Saat ini… saya bekerja di Xtend Indonesia, sebagai Software Director.
Yang mana Xtend Indonesia sendiri adalah salah satu perusahaan IT di kota Medan. Yang memiliki layanan software development, software & hardware integaration dan juga security system.Di Xtend kita sangat terbuka bagi kawan - kawan yang mau datang belajar pemrograman kita dipersilahkan. Karena kita di sana ada beberapa middle level programmer yang bisa mengarahkan kawan - kawan untuk belajar pemrograman.
Okay, itu sekilas tentang saya dan Xtend Indonesia.
Kita lanjut ke materi, pada sesi ini saya akan membahas tentang CI/CD Laravel Application di Google Cloud Compute Engine
CI/CD sudah tau ya?
Continues Integration / Continuous Delivery
Compute Engine sendiri adalah layanan dari Google Cloud untuk Virtual Machine (yg biasa disebut VM) Instance
Sama seperti Amazon EC2 atau Droplet di Digital Ocean.
Sebenarnya pembahasan CI/CD di google cloud ini sudah banyak dibahas di youtube, maupun berupa artikel
Baik yang berbahasa Indonesia, ataupun bahasa Inggris.
Dan kali ini, saya akan membahas cara membuat CI/CD yang paaaaaling sederhana di Google Cloud
Yang cara ini sebenarnya bisa diaplikasian di layanan - layanan lain seperti
Bitbucket Pipeline
Gitlab Pipeline
Ataupun Github Action
Tapi…., ketika kita menggunakan infrastructure google cloud
Let say, mulai dari DNS (google cloud DNS), VM (compute engine) ataupun database (Cloud SQL),
Alangkah baiknya, CI/CD nya juga kita setup di Google Cloud.
Kenapa?
Yang pertama pastinya lebih cepat, karena layanan - layanan yang kita gunakan berada dalam 1 ekosistem yang sama. Dan pastinya latencynya juga lebih kecil. Dan hasilnya prosesnya jadi lebih cepat dibanding menggunakan layanan - layanan yg saya sebutkan sebelumnya
Bitbucket Pipeline
Gitlab Pipeline
Ataupun Github Action
Okay, kita lanjut
Seperti yang dijelaskan sebelumnya, CI adalah singkatan dari Continuous Integration
Yang di dalamnya ada proses - proses berikut
Otomasi build dan testing, setiap ada perubahan pada source code. Akan tetapi itu tergantung konfigurasi yang kita tentukan, di branch mana saja CI ini akan dilaksanakan.
Menyatukan perubahan tersebut secara rutin, dan dari otomasi build & testing tadi kita dapat mendeteksi problem, lebih awal dan sesering mungkin
Dan di dalam Continuous Delivery
Terdapat proses - proses berikut
Membuat proses rilis aman, tidak beresiko dan cepat
Dan Continuous Delivery ini memerlukan Continuous Integration. Artinya hasil dari continuous integration inilah yang akan di-delivery. Kalau tidak ada CI, jadi apa yang mau di deliver
Otomasi deployment ke beberapa environment (baik itu development, staging, ataupun production) dan target
Kita lanjut ke Tools - tools yang umum digunakan di dalam Continues Integration
Untuk CI Tools ini, dibagi menjadi 2 bagian
Source Code Management (SCM)
Ini sudah umum ya, Kita ambil beberapa contoh (github, github enterprise, bitbucket, mercurial, perforce, gitlab), dan di Google Cloud kita akan gunakan Cloud Source Repository untuk membuat setting CI nanti
Continuous Integration Server
Kita ambil beberapa contoh mulai dari yang legend seperti Jenkins, Travis CI , Circle CI (kalau kalian sadar, beberapa tahun yang lalu Circle CI ini sering iklan di Youtube), tapi belakangan ini sudah gak ada lagi.
(Dan Travis CI ini menarik ya, dia sangat populer di kalangan project open source, karena dia memberikan layanannya gratis kepada project - project open source.
Tapi sejak desember 2020 dia berhenti memberikan layanannya free kepada project open source. Sehingga banyak project open source yang beralih menggunakan Github Action saja untuk melakukan proses build.
Nah, emangnya untuk apa project open source menggunakan Travis CI ini? Ada yang tau?
Tujuannya adalah untuk build source code.
Dalam build itu biasanya ada bbrp proses
Pengecekan Code sesuai coding standard atau tidak
Penggabungan/Merge code
Menjalankan unit testing
Dijalankan lah unit test itu di environment yang berbeda - beda.Contohnya kita ambil Laravel yang akan kita gunakan hari ini.Laravel di-build di versi PHP yang berbeda. Ada 7.1, 7.2, 7.3, 74, dan PHP 8. Untuk memastikan bahwa laravel ini akan jalna di versi PHP yang tadi itu
Makanya kita bisa lihat di poject open source itu ada label Build pass (biasanya warna hijau) atau failed (warna merah). Nanti kawan - kawan bisa cek langsung di halaman githubnya Laravel, atau project - project open source yang lain.
Okay, ini untuk CI Tools yang umum, kita lanjut ke CD Tools yang umum digunakan
CD Tools yang umum di gunakan
Ada Puppet, GoCD, Ada jenkins lagi, ada chef, dan ada bash script
Semua tools ini digunakan untuk automasi delivery ataupun deployment
Nah, di sini ada jenkins lagi. Padahal tadi dia sudah masuk ke dalam CI Tools
Kalau di dalam CI process jenkins, digunakan untuk melakukan build dan testing, di sini jenkins digunakan juga untuk melakukan deployment. Karena memang jenkins bisa digunakan untuk keduanya.
Dan pada setting deployment aplikasi laravel nanti kita gunakan Bash Script. Yang mana nanti Bash Script ini juga digunakan untuk CI & CD
Kita lanjut ke slide berikutnya mengapa menggunakan CI/CD
Mengapa menggunakan CI/CD
Untuk memastikan perubahan di dalam code itu benar - benar bisa di-trace (ini merupakan bagian dari Source Code Management tadi yaitu github, bitbucket, dan seterus), kemudian di-test dan bisa di-built dengan sukses
Otomasi meminimalisir human error. Ini memang kenyataan ya, yang namanya human error pasti ada. Bayangin aja kalau kita mesti bolak - balik upload code ke development server. Kalau gak ada proses otomasi seperti CI/CD ini, kan bisa repot. Tapi kalau ada proses otomasi seperti ini kan jadi gampang, setiap 1 jam sekali upload source code ke development server juga gak masalah
Mudah untuk menelusuri asal bug, dan dengan CI/CD kita bisa mengembalikan code ke kondisi sebelum terjadinya masalah
Nah dengan begini, proses upload code ke server jadi mudah. Team juga jadi senang, karena kalau tidak ada otomasi antar department bisa saling ribut. Contoh Front End minta api terbaru dari Back End, sedangkan developer back end masih sibuk dengan kerjaannya. Gitu juga yang mobile, perlu minta api terbaru. Kalau ada proses seperti ini kan semua jadi senang, dan tidak ada blocking kerjaan. Dan itu yang utama
Ada yang pernah dengar nama Martin Fowler?
Martin fowler ini Programmer juga dan banyak berkontribusi di dunia software development
Beliau menulis beberapa buku, yang paling fenomenal itu judulnya Extreme Programming dan Refactoring
Dan beliau juga terlibat di dalam membuat Agile Manifesto untuk Software Development
Dan menurut beliau ini, Continuous delivery artinya kita yakin bahwasanya setiap perubahan itu dapat di-deploy ke Production.
Sedangkan Continuous Deployment itu artinya, kita bisa melakukan deploy setiap ada perubahan
Scott Hanselman ini juga programmer, penulis buku, podcast kalian bisa cari namanay
Terima kasih
Tetap semangat
Tetap sehat selalu
Dan tetap waras juga tentunya
Mudah - mudahan kita bisa ketemu lagi di lain waktu