Pengenalan DevOps
Apa itu DevOps?
DevOps merupakan singkatan dari dua
kata yaitu Development dan Operation. Di mana kedua kata tersebut bermakna
“operasional pengembang”. Seperti yang disebutkan sebelumnya, DevOps adalah
sebuah prinsip developer untuk mengkoordinasikan antar tim yaitu tim
development dengan tim operations dengan efektif dan efisien.
DevOps merupakan singkatan dari dua
kata yaitu Development dan Operation. Di mana kedua kata tersebut bermakna
menggabungkan proses development/pengembangan dari sebuah sistem/aplikasi
dengan operation/operasional. Seperti yang disebutkan sebelumnya, DevOps adalah
sebuah prinsip developer untuk mengkoordinasikan antar tim yaitu tim
development dengan tim operations dengan efektif dan efisien.
Pola pikir yang dibentuk oleh DevOps
adalah koordinasi antar tim yang dapat dilakukan dengan cara singkat sehingga
tidak membutuhkan banyak pertanyaan. Tim operation atau development cukup
mengonfigurasi beberapa komponen yang dibutuhkan melalui prosedur yang dibuat.
Tentunya koordinasi yang diterapkan
pada DevOps membutuhkan sebuah tools. Banyak tools yang bisa kamu gunakan,
salah satunya adalah Source Code Management (SCM) yang biasa digunakan secara
umum oleh tim development. Produk SCM yang paling terkenal adalah Git, ditemani
oleh Source Code Repository (SCR) seperti GitHu, GitLab, Bitbucket, atau yang
lainnya. Namun SCM saja tak cukup untuk mengomunikasikan antara tim development
dengan tim operational.
Agar tim operational dapat
mengetahui permasalahn yang terjadi, biasanya akan dihubungkan ke Product
Management Software, seperti Jira. Melalui Product Management Software, tim
operation dapat mengetahui berbagai permasalahan yang terjadi pada
sistem/aplikasi. Sehingga antara pihak development dengan operational akan
saling terhubung satu sama lain.
Masalah pada
proses pengembangan aplikasi
Proses
pengembangan aplikasi bukanlah suatu hal yang mudah dilakukan, bahkan dalam
beberapa kasus sebuah pengembangan aplikasi dapat melibatkan berbagai pihak. Bukan
hanya dari seberapa kompleks sebuah aplikasi yang dibuat tetapi juga bisa dari
model pengembangan aplikasi, infrastruktur aplikasi, proses yang masih
dilakukan manual bahkan struktur organisasi. Berikut adalah penjelasan beberapa
faktor yang menjadi permasalahan ketika proses pengembangan aplikasi sebelum
menerapkan DevOps:
Waterfall
Waterfall
adalah satu dari sekian banyak model pengembangan aplikasi. SDLC adalah
tahapan-tahapan pekerjaan yang dilakukan oleh analis sistem dan programmer
dalam membangun aplikasi dan metode dalam mengembangkan aplikasi tersebut.
Dengan diterapkannya SDLC pada proses pengembangan aplikasi akan mempermudah
dalam mengidentifikasi masalah dan merancang aplikasi sesuai dengan kebutuhan.
SDLC Waterfall
sesuai dengan namanya, tahapan pada model ini bergerak secara sistematis dari
satu tahap ke tahap berikutnya layaknya air terjun. SDLC ini cocok untuk
pengembangan aplikasi yang perubahannya mudah diprediksi, namun akan
menyebabkan tim developer bekerja secara monoton dan tidak dapat melakukan
perubahan dengan cepat. Jika ada perubahan yang tidak memenuhi deadline yang
sudah ditentukan maka akan berdampak juga pada jadwal perubahan yang lain.
Selain itu ketika tim developer fokus pada penambahan fitur yang baru,
perbaikan kesalahan (bug) akan menyulitkan tim developer karena mereka fokus
sepenuhnya pada penambahan fitur baru.
Waterfall
terdiri dari lima tahapan, mulai dari perencanaan konsep, pemodelan (design),
implementasi, pengujian, dan pemeliharaan.
· Perencanaan Konsep
Pada tahap ini
pihak yang terlibat perlu melakukan komunikasi untuk memahami aplikasi yang
akan dikembangkan dan batasan batasan dari pengembangan aplikasi. Proses pada
tahap ini bisa dilakukan dengan cara wawancara, survey, ataupun diskusi.
· Pemodelan (Desain)
Setelah konsep
didapatkan dilanjutkan ke tahap pemodelan atau desain. Pada tahap ini hasil
dari tahap sebelumnya akan diolah sedemikian rupa sehingga dapat diketahui
seperti apa perkiraan aplikasi yang akan dibuat. Pada proses ini akan berfokus
pada struktur data, arsitektur aplikasi, tampilan, dan juga algoritma.
· Implementasi
Pada tahap
implementasi, hasil dari tahap desain akan diterjemahkan ke dalam bentuk yang
dapat dimengerti oleh mesin, dengan menggunakan bahasa pemrograman (coding).
· Pengujian
Setelah tahap
implementasi selesai, selanjutnya adalah tahap pengujian. Pada tahap ini
aplikasi yang dibuat akan diuji apakah sudah layak digunakan atau belum, sudah
mencapai target yang sesuai dari tahap pertama atau belum.
· Pemeliharaan
Pada tahap
terakhir ini aplikasi yang sudah dibuat dan dijalankan akan dipelihara
(maintenance). Maintenance ini termasuk memperbaiki kesalahan (bug) yang tidak
ditemukan pada tahap pengujian.
Monolithic
Architecture
Monolithic
architecture adalah sebuah metode yang menempatkan berbagai macam layanan
(service) di dalam satu tempat. Contoh sederhananya adalah seperti menempatkan
service login, authentication, dan order di sebuah server backend yang sama.
Dengan cara seperti ini akan ada kemungkinan apabila di salah satu service
terdapat kesalahan (bug) akan berdampak juga service yang lainnya.
Dan apabila
melihat dari sisi kompleksitas sebuah aplikasi yang dibangun, semakin kompleks
sebuah aplikasi semakin sulit juga untuk menerapkan monolithic architecture
sehingga lebih baik menerapkan Microservices Architecture.
Manual Process
Proses yang
dilakukan secara manual dapat menghambat pengembangan sebuah aplikasi,
memungkinkan adanya inkonsistensi, dan juga rawan kesalahan karena manusia
(human error).
Salah satu
proses yang dapat memakan waktu lama adalah konfigurasi infrastruktur. Biasanya
infrastruktur sebuah aplikasi terdiri dari beberapa server, ketika server
dikonfigurasi satu per satu dan berulang akan memakan waktu yang lama, dan juga
akan lebih rentan terhadap human error.
Struktur
Organisasi
Proses
pengembangan aplikasi paling tidak melibatkan dua tim, yaitu Developer dan IT
Operation. Dua tim ini memiliki satu tujuan yang sama, yaitu menyajikan
aplikasi yang stabil kepada pengguna (user). Namun, dua tim ini terkadang
saling tertutup satu sama lain, baik Developer ataupun Operation memiliki
prioritas, tools, dan workflow tersendiri sehingga bisa menimbulkan
masalah-masalah baru.
Developer
bertanggung jawab untuk membuat aplikasi, mengembangkan aplikasi, serta
memperbaiki bug dan sebagainya secepat mungkin. Disisi lain, Operation
bertanggung jawab untuk membuat infrastruktur yang stabil, menjaga
infrastruktur untuk tetap zero downtime dan sebagainya. Namun, yang jadi
masalah adalah terkadang terdapat bug pada code yang bisa menyebabkan
infrastruktur bermasalah, begitu juga sebaliknya terkadang terdapat masalah di
infrastruktur yang menyebabkan code tidak berjalan sebagaimana mestinya.
DevOps sebagai
Solusi
Berangkat dari
beberapa permasalahan yang telah disebutkan diatas, DevOps muncul sebagai
solusi untuk mengatasi masalah-masalah tersebut. DevOps adalah kombinasi dari
kultur, praktik, dan tools yang dapat membantu meningkatkan kemampuan untuk
menyajikan aplikasi secara cepat, dan dapat bersaing secara efektif di Market.
DevOps tidak menerapkan Waterfall sebagai model pengembangan sebuah aplikasi
(SDLC) melainkan Agile. Dengan menerapkan Agile, proses pengembangan aplikasi
dapat mengalami peningkatan kecepatan ketika memperbaiki bug, atau release
fitur terbaru. Dan dengan menerapkan DevOps memungkinkan kemudahan untuk
menerapkan Microsevices Architecture. Selain itu dengan menerapkan DevOps, tim
Developer dan Operation tidak lagi menjadi tertutup. Bahkan terkadang bergabung
menjadi satu tim dimana mereka mengerjakan satu siklus penuh untuk pengembangan
sebuah aplikasi, mulai dari pengembangan aplikasi hingga perilisan aplikasi.
Dalam kasus
lain bahkan tim Quality Assurance (QA) dan tim Security terintegrasi dengan
DevOps sepanjang siklus penuh dalam pengembangan aplikasi.
Agile
Seiring
berkembangnya teknologi, metode Waterfall dianggap tidak cukup apabila
pengembangan aplikasi memerlukan waktu yang sedikit, sehingga metode Agile
muncul sebagai solusi untuk mempercepat pengembangan aplikasi. Metode yang
digunakan pada Agile didasarkan pada pengerjaan yang berulang, baik aturan
ataupun solusi disepakati oleh seluruh pihak di dalam tim pengembangan
aplikasi.
Pada Agile,
timeline pengerjaan dilakukan secara singkat dan cepat. Sehingga setiap
developer perlu mengadaptasi metode ini pada setiap perubahan yang ada.
Jadi pada
Agile, alih-alih menerapkan “big bang” pada proses pengembangan aplikasi,
dengan metode ini setiap pengerjaan dilakukan kecil-kecil tetapi cepat. Aturan,
rencana dan hasil dievaluasi secara berkala sehingga tim dapat beradaptasi
secara alami dengan perubahan yang cepat.
Pada proses
pengembangan aplikasi dengan metode waterfall, ketika satu tahap sudah selesai
dikerjakan lalu akan dilemparkan ke tim lain untuk melanjutkan ke tahap
berikutnya. Sedangkan pada Agile lebih pada pendekatan kolaborasi antar tim.
Komunikasi secara terbuka, kolaborasi, adaptasi, dan saling percaya antar tim
menjadi jantung dari model Agile.
Microservices
Architecture
Sebaliknya dari
Monolithic Architecture, pada Microservices Architecture layanan-layanan
(services) disimpan pada tempat yang terpisah. Hal ini dapat meminimalisir
kesalahan (bug) yang berantai, maksudnya apabila ada salah satu service sedang
mengalami gangguan (error) maka service lain tidak akan terpengaruh. Biasanya
Microservices diterapkan pada pengembangan aplikasi agar bisa melakukan
percepatan.
Dan Container
adalah salah satu yang paling cocok untuk diterapkan pada Microservices
Architecture. Karena programmer dapat lebih focus dalam mengembangkan aplikasi
yang dibuat tanpa perlu mengkhawatirkan dependencies.
Manfaat
Penerapan
Dengan
menerapkan DevOps dalam pengembangan aplikasi, baik aplikasi dengan tingkat
kompleksitas yang rendah hingga tinggi secara umum ada beberapa yang dapat
dirasakan. Berikut beberapa manfaat setelah menerapkan DevOps:
· Speed
Terjadi
peningkatan kecepatan dalam berinovasi untuk user, beradaptasi dengan perubahan
pasar, dan berkembang lebih efisien.
· Rapid Delivery
Meningkatkan
frekuensi perilisan fitur baru, perbaikan bug dan juga developer dapat
berinovasi dan meningkatkan sebuah aplikasi.
· Reliability
Memastikan
kualitas dari peningkatan aplikasi dan infrastruktur, sehingga user tetap dapat
merasakan kesan positif dari perubahan-perubahan yang dilakukan.
· Scale
Mengelola
infrastruktur dan aplikasi dalam skala besar. Dengan menerapkan DevOps,
automation dan konsistensi dapat membantu untuk mengelola sistem yang kompleks
ataupun perubahan sistem secara efisien dan dapat mengurangi resiko kesalahan.
· Improved Collaboration
Membangun
kolaborasi lebih baik antara Developers dan Operations, berbagi tanggung jawab
sebagai tim, dan juga menggabungkan workflows agar tetap sejalan pada tujuan
yang sama.
· Security
Perubahan yang
cepat sambil menjaga dan mempertahankan keamanan dapat dipenuhi dengan
menerapkan DevOps. Misalnya dengan menerapkan Infrastructure as a Code, dimana
tim dapat menentukan dan juga melacak dalam skala besar.
Three Ways
Principal of DevOps
Dikutip dari
buku “The Phoenix Project” dan juga dari “The DevOps Handbook” untuk menerapkan
DevOps, ada beberapa prinsip yang kiranya perlu diketahui dan dipahami, agar
kelak nantinya dapat membantu pengembangan aplikasi secara efisien.
The First Way:
Flow Principles and System Thinking
Prinsip yang
pertama menekankan pada kebutuhan workflow yang cepat dan lancar ketika proses
pengembangan sebuah aplikasi. Mulai dari penulisan code yang dilakukan tim
Developer, mempersiapkan infrastruktur dan melakukan deployment atau perilisan
sebuah aplikasi, hingga akhirnya kepada user.
Dalam
prosesnya, ada beberapa cara yang dapat mengoptimalkan workflow, yaitu membuat
pekerjaan menjadi “terlihat”, maksudnya adalah memperlihatkan progress yang
dilakukan sudah sejauh apa kepada tim (tracking progress). Lalu selanjutnya
adalah mengurangi work in progress, artinya mengurangi multitasking dalam
mengerjakan suatu tugas. Lalu yang terakhir adalah secara kontinu mencari cara
untuk menyederhanakan dan meningkatkan kinerja dari workflow.
The Second Way:
Amplifying Feedback Loops
Fokus utamanya
adalah untuk meningkatkan jumlah feedback dan juga mempercepat penyampaian
feedback dari operations ke developers. Tujuannya adalah meningkatkan kualitas
sekaligus mencegah terulangnya suatu masalah.
Salah satu cara
yang bisa diterapkan adalah melakukan testing aplikasi sebelum rilis ke user
(shift left testing). Dengan begitu apabila ada yang perlu diperbaiki bisa
dilakukan sesegera mungkin dan pada akhirnya kualitas dari sebuah aplikasi bisa
stabil atau bahkan meningkat.
The Third Way:
Continual Experimentation and Learning
Prinsip yang
terakhir adalah untuk menerapkan kebiasaan (kultur) untuk terus belajar dan
bereksperimen secara kontinu. Pengulangan, latihan, menerima resiko, dan juga
membuat kesalahan adalah bagian dari belajar.
Practical
DevOps
Pada praktiknya
penerapan DevOps dapat menjadi beragam pada pengembangan sebuah aplikasi,
menyesuaikan dengan kebutuhan yang diperlukan. Namun pada umumnya terbagi menjadi
dua bagian yaitu DevOps Lifecycle dan DevOps Phase.
DevOps
Lifecycle
DevOps
lifecycle memperlihatkan bagaimana sebuah pipeline dari suatu pengembangan
sebuah aplikasi, atau dengan kata lain tahapan-tahapan yang terjadi ketika
mengembangkan sebuah aplikasi, dimulai dari Plan,Code, Build, Test, Release,
Deploy, Operate, Monitor.
· Plan
Tahap Plan akan
mencakup semua perencanaan dan perancangan dari sebuah aplikasi yang akan
dikembangkan. Biasanya pada tahap ini seorang Project Manager yang akan
memimpin. Semua aturan, persyaratan, dan feedback dari stakeholders atau
project owner dan bahkan user akan dikumpulkan, dan akan digunakan untuk
membuat roadmap project. Tools yang umumnya digunakan untuk melakukan tracking
diantaranya ada Asana, Jira, ClickUp, dan lain sebagainya.
· Code
Pada tahap ini
developer akan mulai menuliskan code dari aplikasi yang dibangun. Untuk tools
yang digunakan pun ada banyak salah satunya yang populer adalah VSCode. Setelah
developer menuliskan code, kemudian mereka melakukan push atau proses menyimpan
code ke sebuah repository terpusat, salah satunya adalah Github.
· Build
Selanjutnya setelah code di-push ke repository akan dilakukan
build. Build disini bermaksud mengubah code dari developer menjadi sebuah
aplikasi. Biasanya sebelum melakukan build, developer lain akan melakukan
diskusi untuk mendapatkan feedback dan review terhadap code. Setelah selesai
melakukan diskusi selanjutnya adala melakukan build aplikasi. Build aplikasi
bisa menggunakan berbagai macam tools tergantung dari aplikasi yang dibuat,
jika dibuat menjadi image maka Docker dapat digunakan. Atau juga dibuat menjadi
compressed file (zip, jar, dan lain-lain).
· Test
Tahapan
berikutnya adalah melakukan Test pada aplikasi yang di-build. Apakah aplikasi
yang dibuat memenuhi kriteria atau tidak, secara fungsional berjalan dengan
semestinya atau tidak, secara desain, dan sebagainya. Apabila ternyata tidak
sesuai maka akan berhenti ditahap ini dan melakukan perbaikan. Namun apabila
sudah sesuai maka selanjutnya adalah Release.
· Release
Pada tahap
Release aplikasi yang sudah lolos dari tahap Test akan diberikan label atau
nomor versi. Kapan aplikasi tersebut dirilis, apa saja perubahan yang
dilakukan, dan pada tanggal berapa dilakukan release, sebelum akhirnya aplikasi
tersebut akan di-deploy.
· Deploy
Deploy adalah
proses dimana aplikasi yang dibuat ditempatkan atau disebarkan, dan akhirnya
bisa diakses oleh user. Salah satu tools yang digunakan adalah AWS CodeDeploy,
Jenkins, dan sebagainya.
· Operate
Pada tahap
Operate, tim Operation akan memastikan aplikasi dan infrastruktur berjalan
sebagaimana mestinya. Dan juga mengambil data performance, errors, dan
sebagainya. Apabila ternyata ada berupa kesalahan atau bug, user pun dapat
memberikan feedback yang nantinya akan menjadi sebuah patokan untuk melakukan
pengembangan dari aplikasi.
· Monitor
Monitor adalah
tahap terakhir dari DevOps Lifecycle. Dari tahap sebelumnya sudah dikumpulkan
berupa data performance, error, atau bahkan feedback. Dari data-data tersebut
bisa dilakukan introspeksi atau evaluasi dari aplikasi yang dikembangkan.
Bahkan juga dapat dilakukan monitor untuk pipeline yang dibuat, apakah
kedepannya akan terjadi bottlenecks yang dapat menghambat produktivitas
pengembangan aplikasi.
DevOps Phase
DevOps phase
memperlihat bagaimana sebuah lifecycle dari pengembangan aplikasi berjalan
secara kontinu, atau yang lebih dikenal dengan istilah CI/CD. CI/CD merupakan
singkatan dari Continuous Integration dan Continuous Delivery/Deployment.
· Continuous Integration
Tim Developer
saling berkolaborasi untuk mengembangkan sebuah aplikasi. Dengan adanya
Continuous Integration, code antar developer akan lebih mudah dikelola. Tujuan
dari Continuous Integration adalah otomatisasi, transparansi dan kolaborasi
antar developer terkait code yang dibuat. Sebagai contoh apabila ada code yang
sekiranya menjadi sebuah bug di code yang dibuat developer lain, akan lebih
cepat dideteksi dan lebih cepat juga diperbaiki. Continuous Integration berada
pada tahapan Plan, Code, dan Build. Karena lebih banyak interaksi yang
dilakukan antar developer.
· Continuous Delivery
Pada Continuous
Delivery, terdiri dari tahapan Test dan Release. Adanya Continuous Delivery
dapat membantu untuk memastikan sebuah aplikasi siap untuk di-deploy dengan
melewati tahap Test dan Release secara otomatis.
· Continuous Deployment
Serupa tapi tak
sama, mungkin sebuah kalimat yang cocok antara Continuous Delivery dan
Continuous Deployment. Perbedaannya hanya perlu persetujuan secara manual untuk
melakukan deploy ke production. Pada tahap ini aplikasi yang sudah siap akan
di-deploy sehingga pada akhirnya dapat diakses oleh user.
Ketika security
menjadi sebuah fokus dalam pengembangan aplikasi, DevOps berkembang menjadi
DevSecOps. Pada DevSecOps akan disematkan unsur-unsur security pada DevOps
lifecycle seperti melakukan secret scanning, Static Application Security
Testing (SAST), Dynamic Application Security Testing (DAST), dan sebagainya.
Kesimpulan
Tidak perlu
diragukan lagi, dengan menerapkan DevOps sebagai sebuah kultur baru dalam
pengembangan sebuah aplikasi dapat berdampak sangat signifikan dan juga tetap
memastikan kualitas dari aplikasi berada pada level tertinggi. Tujuan utamanya
dari DevOps adalah menjaga kontinuitas dan mengoptimalkan otomatisasi. Dan
tentang bagaimana sebuah tim dapat berkolaborasi untuk mengembangkan sebuah
aplikasi dengan cepat dan dengan peningkatan-peningkatan yang bisa dirasakan
user.
Tidak ada komentar:
Posting Komentar