Jumat, 10 Februari 2023

devops real

 

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.

devops real

  Pengenalan DevOps   Apa itu DevOps?   DevOps merupakan singkatan dari dua kata yaitu Development dan Operation. Di mana kedua kata...