Individual Review — Deployment Environment, Automated Deployment, Code Coverage, Platform Selection
Apa yang sudah dilakukan 2 minggu ini:
- Menyelesaikan story yang belum selesai pada sprint 1
- Melengkapi unit test untuk fungsi yang sudah berintegrasi dengan story lain (job dan divisi) agar code coverage 100%
- Melengkapi fungsi create job dengan divisi
- Melakukan code review bersama teman-teman lain
- Melakukan sharing knowledge dengan teman-teman
Apa itu Deployment Environment
Pada proses software deployment, yang dimaksud dengan environment atau tier adalah sistem komputer, dimana software akan di deploy dan dieksekusi. Dalam kasus sederhana, misalnya melakukan pengembangan dan deployment dalam mesin yang sama, maka kita memiliki satu environment. Pada dasarnya, dalam skala industri, terdapat perbedaan dan pemisahan antara development environment (tempat perubahan code terjadi) dan production environment (apa yang dilihat customer); bahkan dilengkapi dengan beberapa stage diantara environment tersebut. Struktur manajemen rilis seperti ini memungkinkan adanya fase rollout, testing dan rollback apabila ditemukan adanya masalah yang serius.
Terdapat beberapa environment yang biasa digunakan diantaranya adalah:
- Local — Developer’s desktop/workstation.
- Development/Trunk — Development server aka sandbox. Ini adalah tempat unit testing dilakukan oleh developer.
- Integration —target build dari CI, atau testing side effect.
- Test/QA/Internal Acceptance — Ini adalah stage dimana dilakukan interface testing, dalam tahap ini QA team akan memastikan kode tidak akan memberikan impact kepada kode lainnya yang sudah pernah dirilis sebelumnya.
- Stage/Pre-production/External-Client Acceptance — Mirror dari production environment.
- Production/Live — stage yang dilihat oleh customer.
Pada dasarnya, tidak ada aturan khusus yang mengharuskan kita untuk memberikan nama terhadap setiap environment yang ada. Dalam kasus PPL, kelompok kami seperti yang dijelaskan oleh Gentur Waskito dalam blognya, kami menggunakan 3 environment, yaitu development, staging dan production. Informasi lebih lanjut bagaimana cara membuat environment ini dengan menggunakan Heroku dapat diakses disini.
Automated Deployment
Dalam kuliah PPL ini, kami diminta untuk melakukan automated deployment, dalam kasus ini, automated deployment yang dilakukan telah dilakukan configurasi menyesuaikan dengan CI gitlab. Berikut akan saya jelaskan.
Diatas adalah contoh gambar yang memperlihatan bagaimana pipeline dari automated deployment system bekerja. Secara umum, proses ini akan diinisiasi ketika developer melakukan commit message ke VCS yang ada. Ketika Gitlab CI mengetahui adanya perubahan pada kode, secara langsung akan dilakukan unit test terhadap kode yang ada. Apabila berhasil lolos test dan kode dilakukan merge ke branch develop, maka secara otomatis kode akan dideploy ke server Heroku yang ada. Dari environment develop yang ada di Heroku, cukup menekan satu tombol maka akan dengan mudah masuk ke environment staging dan production. Secara lebih jelas berikut adalah tahapannya:
Stage #1: Commit Stage
Pada tahap ini, build automation server dalam kasus ini sudah dilakukan integrasi dengan Gitlab CI akan melakukan pengecekan terhadap kode, dan akan dilakukan kompilasi kode. Pada dasarnya akan dilakukan unit test disini dan setelah itu akan dikembalikan artifak. Akan terdapat penjelasan dibawah mengenai code coverage.
Stage #2: Acceptance Test Stage
Pada tahap ini, akan dilakukan acceptance test. Yang dimaksud dengan acceptance test adalah apakah sudah ada kesesuaian dari Acceptance Criteria dengan modul yang telah dibuat. Tentu saja hal ini bisa dilihat dari berbagai macam sisi, mulai dari code coverage, fungsionalitas, dll. Pada tahap ini developer meminta merge request ke branch develop.
Stage #3: Capacity Test Stage
Dalam tahap ini, dilakukan pengecekan apakah sistem yang ada dapat menyediakan layanan modul yang telah dibuat. Hal ini lebih teknis kearah kesiapan server. Hal ini biasa dilakukan ketika telah berhasil melakukan merge ke branch develop.
Stage #4: User Acceptance Test Stage
Pada tahap ini, dilakukan User Acceptance Test yang biasa dilakukan pada saat Sprint Review dimana kode yang sudah berhasil masuk ke environment Development, akan diuji oleh Product Owner.
Stage #5: Release Stage
Setelah semua test dan tahap pengembangan dilakukan, maka bisa dilakukan migrasi aplikasi ke tahap rilis. Dalam kasus Heroku, hanya cukup menekan satu tombol pipeline untuk berpindah dari satu environment ke environment lainnya.
Code Coverage
Istanbul adalah salah satu tool untuk menghitung Code Coverage dari kode JavaScript. Dalam kasus ini, kelompok kami menggunakan Istanbul untuk mengetahui code coverage sesuai dengan unit test yang sudah dirancang sebelumnya, dan dengan menggunakan nyc untuk mempermudah pekerjaan.
nyc adalah Istanbul’s state of the art command line interface, yang akan mempermudah proses pelaporan besaran code coverage sesuai dengan test yang dilakukan.
Berikut adalah potongan package.json
yang kami miliki
..."scripts": {
"test": "mocha tests",
"start": "node index.js",
"test-coverage": "nyc --reporter=lcov mocha tests",
"report": "nyc --reporter=text-summary mocha tests"
},...
Dalam hal ini, kelompok kami menggunakan mocha
sebagai platform melakukan test. Dengan mudah, cukup mengetikkan npm test
maka akan dilakukan unit test terhadap keseluruhan kode yang ada.
Untuk mengecek besar code coverage, cukup dilakukan npm run test-coverage
yang akan menjalankan perintah nyc
berupa melakukan report dalam bentuk artifak html
dari unit test yang dijalankan mocha
.
Platform Selection
Pada PPL ini kelompok kami menggunakan Node.js sebagai Framework pengembangan aplikasi. Dikutip dari https://nodejs.org/en/
Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
Dari pengertian diatas, maka terdapat beberapa keunggulan yang dimiliki oleh Node.js diantaranya adalah:
- adalah command-line tool yag bisa dijalankan selayaknya web server biasa dan bisa menjalankan program JavaScripts
- memiliki kemampuan V8 JavaScript engine
- sangat baik digunakan ketika menginginkan adanya beberapa task dalam waktu yang sama
- berbasis pada event, sehingga bisa melaksanakan segala hal yang berbau Ajax pada server side
- mengizinkan untuk berbagi kode antara browser dan backend
- dengan mudah berkomunikasi dengan MySQL
Selain alasan kemudahan diatas, kelompok kami secara personal memilih pengembangan menggunakan Node.js karena kemudahan dalam pengembangan, selain itu juga disarankan oleh Product Owner untuk menggunakan Node.js