Automated QA & Deployment Menggunakan Gitlab CI/CD

https://www.parasoft.com/wp-content/uploads/2021/04/CICD_CICD.png

Apa itu CI/CD?

Bagaimana Melakukan Proses CI/CD?

  1. test: Stage untuk mengecek kualitas dan kebenaran kode
  2. sonar-scanner-test: Stage untuk mengecek kualitas kode secara lebih mendalam dengan menggunakan sonarqube
  3. deploy: Stage untuk deploy kode ke server
  • Pada baris 1–4, terdapat pendefinisian stage untuk semua job serta alurnya. Seperti yang disinggung sebelumnya, karena urutan stage dari atas ke bawah maka flow jobnya adalah semua job dengan stage “test” akan dieksekusi ==> semua job dengan stage “sonarqube-sonar-test” => semua job dengan stage “deploy”.
  • Pada baris 7–16, terdapat job untuk melakukan unit testing. Job ini termasuk dalam stage test sehingga akan dieksekusi pertama kali. Pada job ini menggunakan image golang karena pada job ini dilakukan unit testing terhadap kode golang. Script berisikan langkah-langkah yang dilakukan pada suatu job. Untuk job ini, langkah yang dilakukan adalah meng-install dependensi lalu dilanjutkan dengan unit testing. Langkah unit testing ini akan menghasilkan artifact .testCoverage.txt. Artifact inilah yang akan digunakan oleh sonarqube pada stage selanjutnya.
  • Pada baris 18–25 terdapat job checkstyle. Job ini termasuk dalam stage test sehingga job ini akan dijalankan secara parallel dengan job unit-test. Job ini akan mengecek apakah penulisan kode golang sudah mengikuti best practice atau belum. Yang dilakukan oleh job ini adalah meng-install dependensi, meng-install go lint (library untuk mengecek formatting dan codestyle kode), dan melakukan pengecekan format & codestyle kode. Terdapat parameter tambahan allow_failure. Pada job ini kami set true sehingga apabila job berhasil mendeteksi kode yang tidak mengikuti best practice standar, maka hanya akan muncul semacam warning dan pipeline akan tetap berjalan. Hal ini dilakukan karena checkstyle hanya mengecek penulisan kode saja sehingga tidak mengecek apakah kode sudah dengan berjalan dengan benar atau tidak. Sedangkan hal tersebut sudah ditangani oleh job unit-test.
  • Pada baris 27–43 terdapat job untuk melakukan pengecekan kode dengan sonarqube. Job ini tergabung dalam stage sonar-scanner-test sehingga akan dieksekusi setelah job unit-test dan checkstyle berjalan dengan sukses. Yang dilakukan adalah job ini mengecek kode dengan sonarqube. Sonarqube ini akan menghasilkan report yang berisikan code coverage, jumlah duplikasi code, dan sebagainya. Oleh karena itu, job ini dieksekusi setelah stage selesai. Pada line 41–43, terdapat field except untuk memspesifikasikan branch mana yang tidak bisa menjalankan suatu job. Seperti yang terlihat pada potongan kode, job ini tidak bisa dieksekusi oleh branch staging & master.
  • Pada baris 45–60, jobnya mirip dengan job pada baris 27–43. Perbedaannya terletak pada branch yang mengeksekusi job ini. Apabila pada job sonarqube-dev terdapat field except, maka pada sonarqube field except tersebut diganti menjadi only. Hal tersebut menunjukkan bahwa job ini hanya bisa dieksekusi oleh semua branch yang tercantum pada field only. Pada script tersebut, terlihat bahwa hanya branch staging & master yang bisa mengeksekusi job ini.
  • Pada baris 63–75 dilakukan proses deploy kode ke server heroku untuk staging. Job ini termasuk pada stage deploy sehingga akan dieksekusi terakhir. Pada job ini terdapat field before_script. Field tersebut menunjukkan urutan langkah-langkah yang perlu dieksekusi suatu job sebelum mengeksekusi langkah-langkah yang didefinisikan pada script. Pada bagian before_script, akan dilakukan dpl yangmana dpl ini akan digunakan pada script untuk proses deployment ke heroku staging. Barulah pada bagian script, dilakukan proses deployment kode ke server heroku staging. Seperti yang terlihat, job ini hanya dieksekusi pada branch staging.
  • Pada baris 77–89 terdapat job untuk melakukan proses melakukan deployment pada server heroku production. Job ini mirip dengan deployment-staging, perbedaannya adalaha bila pada job deployment-staging melakukan deployment ke url heroku server staging untuk job ini, proses deployment dilakukan terhadap url heroku server production. Selain itu, job ini hanya bisa dieksekusi pada branch master.
Contoh pipeline CI/CD pada proyek kelompok kami

Penutup

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store