Deployment? Untuk Apa?

Muhammad Raihan
6 min readMay 22, 2021

--

Sebagai seorang software developer, seringkali kita membuat sebuah aplikasi atau software bukan untuk diri kita sendiri namun untuk dinikmati atau digunakan oleh orang lain bahkan masyarakat luas. Namun, dalam proses pengembangan dan proses ujicoba, kita menjalankan dan menggunakan aplikasi yang kita kembangkan dari komputer/perangkat milik kita pribadi dimana aplikasi tersebut dikembangkan. Lantas, bagaimana orang lain yang menjadi target market utama dapat menggunakan aplikasi kita di perangkat milik mereka sendiri? Disinilah peran DEPLOYMENT

What is Deployment?

Deployment adalah proses yang dilakukan agar sebuah software maupun perubahan dari software tersebut dapat digunakan oleh user yang diinginkan. Dengan kata lain, proses deployment memungkinkan software yang dikembangkan di perangkat kita untuk dipindahkan dan dijalankan dalam environment yang dapat digunakan oleh user lain sesuai tujuan dari environment tersebut.

Ada beragam cara melakukan deployment, bergantung dengan software seperti apa yang sedang dikembangkan. Contohnya, jika kita mengembangkan aplikasi berbasis web, maka kita hanya perlu melakukan deployment langsung kepada server dari hosting pilihan kita agar aplikasi dapat digunakan oleh orang lain melalui jaringan internet. Namun, jika kita mengembangkan aplikasi berbasis mobile, maka kita harus melakukan langkah deployment yang sesuai prosedur app store atau play store.

CI/CD

Dewasa ini, proses deployment sudah dilakukan secara otomatis dengan bantuan Continuous integration/continuous delivery (CI/CD). CI/CD adalah metode untuk secara otomatis melakukan monitoring, testing, maupun deployment setelah developer melakukan perubahan pada software yang dikembangkan. Setelah perubahan yang dilakukan developer disatukan dalam repository, maka akan langsung divalidasi dengan cara melakukan build terhadap aplikasi tersebut, dan melakukan testing (unit test dan integration test) untuk memastikan perubahan yang dilakukan tidak merusak flow aplikasi yang sudah dibuat sebelumnya. Setelah validasi, maka aplikasi siap untuk di-Deploy ke environment tujuan.

Manfaat menggunakan CI/CD diantaranya :

  • Mendapatkan feedback lebih cepat
  • Visibilitas yang lebih baik karena langsung ditampilkan
  • Deteksi bug lebih awal

Tahapan dalam implementasi CI/CD diantaranya :

  1. Developer mencatatkan perubahan software pada version control, kemudian push ke repository.
  2. Masuk tahap build, code tersebut akan dicompile lalu dijalankan untuk diuji
  3. Masuk tahap testing, disini dapat dijalankan unit test untuk memastikan perubahan tidak merusah flow software sebelumnya
  4. Setelah melewati tahap testing, tahap selanjutnya adalah tahap deploy. Pada tahap ini, QA engineer dapat menguji kelayakan aplikasi untuk digunakan oleh end-users.
  5. Setelah melewati pengujian oleh QA engineer, dapat dilakukan tahap auto-test (opsional).
  6. Setelah melewati semua tahapan pengujian, maka software siap masuk ke tahap deploy to production
  7. Jika ada kesalahan pada salah satu proses, maka akan langsung diberikan feedback.

Conventional Deployment

Dalam proses deployment sebuah software, ada 2 tahap yang harus dilakukan agar software dapat bekerja dengan baik pada environment baru yang akan digunakan user lain selain developer. Tahapan yang harus dilakukan diantaranya :

  • Release — Pada tahap ini dilakukan pengecekan dan pemindahan seluruh resource yang dibutuhkan ke sistem komputer yang dituju agar software dapat bekerja sesuai dengan fungsinya pada environment yang baru.
  • Installation and Activation — Pada tahap ini, dijalankan berbagai command, shortcut, script, atau service yang dibutuhkan agar dapat melakukan instalasi dan konfigurasi sehingga software dapat mulai berjalan pada environment yang baru

Saya menggunakan istilah “conventional” pada deployment ini karena pada saat artikel ini dibuat, sudah ada metode deployment dengan cara lain yang menurut saya akan lebih membantu dalam proses deployment. Metode ini dinamakan Container Based Deployment.

Container Based Deployment

Dalam proses deployment, memindahkan seluruh software beserta dependencies yang dibutuhkan untuk menjalankan software tersebut dengan lancar membutuhkan waktu yang tidak sedikit. Maka dari itu, diciptakan Container Deployment untuk membuat proses deployment menjadi lebih simple dan lebih cepat.

Container Deployment adalah sebuah metode untuk melakukan pemindahan environment terhadap aplikasi yang kompleks secara cepat. Dalam artikel sebelumnya, kita telah mempelajari mengenai container orchestration. Disinilah salah satu tempat dimana container dapat berperan. Dengan menggunakan container deployment tools seperti Docker atau Openshift, kita dapat melakukan pengelolaan containers yang ada di environment yang dapat digunakan oleh user lain. Setiap container sudah memiliki seluruh hal yang dibutuhkan agar sebuah software dapat berjalan dengan lancar, sehingga melakukan deployment terhadap 1 container dapat mengurangi resource yang digunakan seperti waktu, storage, memory, dll dalam melakukan deployment.

Berikut adalah beberapa manfaat yang dapat dirasakan dalam menggunakan container deployment :

  • Kecepatan melakukan deployment, karena hanya memindahkan 1 container yang sudah berisi seluruh code serta dependencies yang dibutuhkan.
  • Fleksibel, dengan sifat container yang terisolasi, berbagai container dapat berjalan dan berkomunikasi dengan container lain dengan tool yang tepat.
  • Optimisasi resource, karena sebuah container berjalan terpisah dengan OS dari perangkat tempat container tersebut berjalan, maka container tidak terlalu ‘demanding’ terhadap system resources
  • Konsisten, karena sebuah container berjalan terpisah dengan OS dari perangkat tempat container tersebut berjalan, maka container dapat dengan konsisten bekerja dalam berbagai environment tanpa ada kendala yang berasal dari host OS.

Software Deployment Environments

Setiap developer team pasti menginginkan software yang sampai ke target market merupakan software yang reliable, yang artinya minim ditemukan bug atau flow yang tidak sesuai keinginan user. Untuk membantu menciptakan software yang reliable, dapat dilakukan deploy secara bertahap terhadap berbagai environment. Dengan adanya berbagai environment berbeda dengan tujuannya masing-masing, dapat dilakukan testing dan memastikan software sudah siap sebelum dilakukan deployment akhir untuk digunakan oleh target market.

Secara umum, minimal ada 3 environment berbeda yang dibutuhkan agar proses development dan deployment dapat berjalan secara maksimal :

  • Development — Environment development merupakan pertahanan pertama dari software terhadap bugs. Developer melakukan pengujian terhadap fitur baru yang diimplementasikan pada environment ini. Seluruh bugs yang ditemukan diselesaikan terlebih dahulu sebelum memasuki environment selanjutnya, yaitu Staging.
  • Staging — Environment staging adalah environment dimana Quality Assurance Engineer bekerja. Setelah developer puas dengan hasil testing pada environment Development, maka dilakukan deployment ke environment Staging. Pada environment ini, QA Engineer memastikan software berjalan sebagaimana mestinya, kemudian melaporkan kembali ke developer jika ada yang dapat ditingkatkan atau ditemukan bug.
  • Production — Environment production adalah environment dimana software dapat digunakan oleh end-users. Setelah melewati test yang bertahap, maka software dapat di-deploy menuju production environment untuk digunakan end-users yang menjadi target market.

Penjelasan diatas merupakan pembagian environment secara umum yang dilakukan tim developer. Namun, sebuat tim developer dapat menambah atau mengurangi pembagian environment sesuai kebutuhan dan resource yang dimiliki.

Deployment Implementation

Berikut adalah contoh implementasi proses deployment yang saya dan teman-teman tim developer terapkan dalam mengembangkan aplikasi IGRI.

  • Tim kami menerapkan automated deployment dengan bantuan CI/CD bawaan dari repository kami yaitu Gitlab-CI. Kami membuat script untuk melakukan unit testing sebelum dilakukan deployment.
Stage script untuk dieksekusi CI/CD
  • Tim kami menerapkan Container Based Deployment dengan menggunakan command line dpl. Kami melakukan deployment container kami ke server yang disediakan heroku agar dapat digunakan oleh user lain. Untuk melakukan container deployment pada hosting Heroku, dibutuhkan file khusus bernama heroku.yml yang akan digunakan sebagai definisi container yang akan di-deploy.
Script untuk melakukan deployment
  • Untuk pembagian environment, kami membuat 3 environment berbeda sesuai yang dijelaskan sebelumnya, yaitu development, staging, dan production. Dalam repository kami, branch yang menjadi environment development adalah branch masing-masing PBI yang sedang dikerjakan, dan environment yang digunakan untuk melakukan pengujian adalah environment lokal perangkat yang digunakan. Untuk environment staging dan production, direpresentasikan oleh branch staging dan production dan menggunakan environment server dan database yang disediakan oleh Heroku hosting.
Contoh branch sesuai environment

Demikian artikel mengenai deployment dan metode-metode yang dapat membantu proses deployment berjalan lebih maksimal, semoga membantu ^_^.

Referensi :

What is deployment automation? (redhat.com)

What is Container Deployment? Definition & Related FAQs | Avi Networks

What is a Container Deployment? | VMware Glossary

Deployment Itu Apa Sih? Yuk Simak! — Sepulsa

What is Software Deployment? | Sumo Logic

Using Multiple Environments to Improve Your Development Workflow (deploybot.com)

Implementasi CI/CD Pipeline dalam Development Program (jagoanhosting.com)

--

--