Ketika aplikasi tidak berfungsi, yang paling penting saya ingin mendengar ungkapan "masalahnya ada di pihak Anda" dari rekan kerja. Akibatnya, pengguna menderita - tetapi mereka tidak peduli bagian mana dari tim yang bertanggung jawab atas gangguan tersebut. Budaya DevOps datang hanya untuk menyatukan pengembangan dan dukungan dan menyatukan mereka di sekitar tanggung jawab bersama untuk produk akhir.
Praktik apa yang termasuk dalam konsep DevOps dan mengapa itu diperlukan? Apa yang dilakukan para insinyur DevOps dan apa yang harus mereka lakukan? Pertanyaan-pertanyaan ini dan lainnya dijawab oleh para ahli dari EPAM: Kirill Sergeyev, insinyur sistem dan penginjil DevOps, dan Igor Boyko, insinyur sistem terkemuka dan koordinator salah satu tim DevOps perusahaan.

Mengapa saya membutuhkan DevOps?
Sebelumnya, ada penghalang antara pengembang dan dukungan (yang disebut operasi). Kedengarannya paradoks, tetapi mereka memiliki tujuan dan KPI yang berbeda, meskipun mereka melakukan hal yang sama. Tujuan pengembangan adalah untuk mengimplementasikan persyaratan bisnis secepat mungkin dan menambahkannya ke produk yang berfungsi. Dukungan bertanggung jawab untuk memastikan bahwa aplikasi bekerja dengan stabil - dan setiap perubahan membahayakan stabilitas. Ada konflik kepentingan - DevOps telah muncul untuk menyelesaikannya.
Apa itu DevOps?
Pertanyaannya bagus - dan kontroversial: akhirnya, dunia belum menyepakati hal ini. EPAM percaya bahwa DevOps menggabungkan teknologi, proses dan budaya interaksi dalam tim. Asosiasi ini bertujuan untuk pengiriman nilai secara terus menerus kepada pengguna akhir.
Kirill Sergeyev : “Pengembang menulis kode, penguji memeriksanya, dan administrator menginstal produk akhir pada lingkungan produksi. Untuk waktu yang lama, bagian-bagian tim ini agak terfragmentasi, dan kemudian muncul ide untuk menggabungkan mereka ke dalam proses bersama. Begitulah praktik DevOps muncul. ”
Hari itu tiba ketika pengembang dan insinyur sistem menjadi tertarik pada pekerjaan masing-masing. Penghalang antara produksi dan dukungan mulai memudar. Beginilah DevOps terbentuk, yang meliputi praktik, budaya, dan kerja tim.

Apa inti dari budaya DevOps?
Fakta bahwa tanggung jawab untuk hasil akhir ada pada masing-masing anggota tim. Hal yang paling menarik dan sulit dalam filosofi DevOps adalah untuk memahami bahwa seseorang tidak hanya bertanggung jawab atas tahapan kerjanya, tetapi juga bertanggung jawab atas bagaimana keseluruhan produk akan bekerja. Masalahnya tidak terletak pada pihak mana pun - itu biasa terjadi, dan setiap anggota tim membantu menyelesaikannya.
Poin paling penting dari budaya DevOps adalah untuk menyelesaikan masalah, dan tidak hanya menerapkan praktik DevOps. Selain itu, praktik-praktik ini tidak diterapkan "di pihak seseorang", tetapi di seluruh produk. Proyek ini tidak memerlukan insinyur DevOps sendiri - ia membutuhkan solusi untuk masalah tersebut, dan peran insinyur DevOps dapat didistribusikan di beberapa anggota tim dengan spesialisasi yang berbeda.
Apa itu praktik DevOps?
Praktik DevOps mencakup semua tahap siklus hidup perangkat lunak.
Igor Boyko : “Kasus ideal adalah ketika kita mulai menggunakan praktik-praktik DevOps tepat pada awal proyek. Bersama dengan arsitek, kami merencanakan aplikasi apa yang akan dimiliki oleh lanskap arsitektur, di mana ia akan terletak dan bagaimana skala, kami memilih platform. Sekarang arsitektur microservice sedang dalam mode - untuk itu kita memilih sistem orkestrasi: kita harus dapat mengelola setiap elemen aplikasi secara individual dan memperbaruinya secara independen dari yang lain. Praktik lain adalah "infrastruktur sebagai kode." Ini adalah nama pendekatan di mana infrastruktur proyek dibuat dan dikelola menggunakan kode, daripada melalui interaksi langsung dengan server.
Selanjutnya, kita beralih ke fase pengembangan. Salah satu praktik terbesar di sini adalah membangun CI / CD: Anda perlu membantu pengembang mengintegrasikan perubahan ke dalam produk dengan cepat, dalam porsi kecil, lebih sering dan lebih tanpa rasa sakit. CI / CD mencakup verifikasi kode, mengisi wizard ke dalam basis kode, dan menyebarkan aplikasi untuk menguji dan menghasilkan lingkungan.
Dalam tahap CI / CD, kode melewati gerbang kualitas. Dengan bantuan mereka, mereka memverifikasi bahwa kode yang keluar dari workstation pengembang memenuhi kriteria kualitas yang ditentukan. Pengujian unit dan UI ditambahkan di sini. Untuk penyebaran produk yang cepat, tanpa rasa sakit dan fokus, Anda dapat memilih jenis penyebaran yang tepat.
Praktik DevOps memiliki tempat pada tahap mendukung produk jadi. Mereka digunakan untuk pemantauan, umpan balik, keamanan, implementasi perubahan. DevOps melihat semua tugas ini dalam hal peningkatan berkelanjutan. Kami meminimalkan operasi berulang, mengotomatiskannya. Ini juga termasuk migrasi, ekstensi aplikasi, dan dukungan kesehatan. "
Mengapa praktik DevOps bermanfaat?
Jika kami menulis buku teks tentang praktik-praktik DevOps modern, akan ada tiga poin di halaman pertama: otomatisasi, rilis dipercepat, dan umpan balik pengguna cepat.
Kirill Sergeev : “Yang pertama adalah otomatisasi. Kami dapat mengotomatisasi semua interaksi dalam tim: kami menulis kode - diluncurkan - dicentang - dipasang - umpan balik yang dikumpulkan - dikembalikan ke awal. Semua ini otomatis.
Yang kedua adalah mempercepat rilis dan bahkan menyederhanakan pengembangan. Selalu penting bagi pelanggan bahwa produk memasuki pasar sesegera mungkin dan mulai mendapat manfaat lebih cepat daripada analog para pesaing. Proses pengiriman produk dapat ditingkatkan tanpa batas: mengurangi waktu, menambahkan tanda kontrol tambahan, meningkatkan pemantauan.
Ketiga adalah mempercepat umpan balik pengguna. Jika dia memiliki komentar, kami dapat segera melakukan koreksi dan segera memperbarui aplikasi. "

Bagaimana konsep “insinyur sistem”, “insinyur bangunan” dan “insinyur DevOps” berhubungan?
Mereka berpotongan, tetapi milik daerah yang sedikit berbeda.
Insinyur Sistem di EPAM adalah posisi. Mereka datang dalam tingkat yang berbeda: dari junior ke spesialis.
Seorang insinyur bangunan lebih mungkin berperan yang dapat dilakukan pada suatu proyek. Sekarang ini adalah nama orang yang bertanggung jawab untuk CI / CD.
Insinyur DevOps adalah spesialis yang mengimplementasikan praktik-praktik DevOps pada suatu proyek.
Untuk meringkas semua ini, ternyata kira-kira seperti ini: seseorang di posisi insinyur sistem memainkan peran insinyur bangunan pada proyek dan terlibat dalam implementasi praktik-praktik DevOps di sana.
Apa sebenarnya yang dilakukan seorang insinyur DevOps?
Insinyur DevOps mengumpulkan semua bagian yang membentuk proyek. Mereka tahu secara spesifik pekerjaan pemrogram, penguji, administrator sistem dan membantu menyederhanakan pekerjaan mereka. Mereka memahami kebutuhan dan persyaratan bisnis, perannya dalam proses pengembangan - dan membangun proses dengan mempertimbangkan kepentingan pelanggan.
Kami berbicara banyak tentang otomasi - para insinyur DevOps melakukannya terlebih dahulu. Ini adalah poin yang sangat besar, yang antara lain meliputi persiapan lingkungan.
Kirill Sergeyev : “Sebelum memperkenalkan pembaruan pada produk, mereka harus diuji pada lingkungan pihak ketiga. Ini sedang dipersiapkan oleh para insinyur DevOps. Mereka menanamkan budaya DevOps secara keseluruhan pada proyek: mereka memperkenalkan praktik DevOps di semua lapisan proyek mereka. Tiga prinsip ini: otomatisasi, penyederhanaan, akselerasi - mereka membawa kemana saja yang bisa mereka jangkau.
Apa yang harus diketahui oleh seorang insinyur DevOps?
Secara umum, ia harus memiliki pengetahuan dari berbagai bidang: pemrograman, bekerja dengan sistem operasi, database, membangun sistem, dan konfigurasi. Kemampuan untuk bekerja dengan infrastruktur cloud, orkestrasi, sistem pemantauan ditambahkan pada mereka.
1. Bahasa pemrogramanInsinyur DevOps mengetahui beberapa bahasa dasar untuk otomatisasi dan dapat, misalnya, memberi tahu programmer: "Ayo, Anda tidak akan menginstal kode secara manual, tetapi dengan bantuan skrip kami yang mengotomatiskan segalanya? Kami akan menyiapkan file konfigurasi untuknya, akan lebih mudah untuk membacanya untuk Anda dan kami - dan kami dapat mengubahnya kapan saja. Dan kita akan melihat siapa, kapan dan mengapa mengubahnya. "
Seorang insinyur DevOps dapat mempelajari satu atau lebih dari bahasa-bahasa ini: Python, Groovy, Bash, Powershell, Ruby, Go. Mengenal mereka pada level yang dalam tidak diperlukan - hanya dasar-dasar sintaksis, prinsip-prinsip OOP, kemampuan untuk menulis skrip sederhana untuk otomatisasi.
2. Sistem operasiInsinyur DevOps harus memahami di server mana produk akan dipasang, di lingkungan mana ia akan diluncurkan, dengan layanan mana ia akan berinteraksi. Anda dapat memilih untuk berspesialisasi dalam keluarga Windows atau Linux.
3. Sistem kontrol versiTanpa sepengetahuan sistem kontrol versi, insinyur DevOps tidak ada dimanapun. Git adalah salah satu sistem yang paling populer saat ini.
4. Penyedia cloudAWS, Google, Azure - terutama jika kita berbicara tentang arah Windows.
Kirill Sergeyev : “Penyedia cloud memberi kami server virtual yang sangat cocok di trek CI / CD.
Menginstal sepuluh server fisik membutuhkan sekitar seratus operasi manual. Setiap server harus dimulai secara manual, diinstal, dan dikonfigurasi sistem operasi yang diinginkan, instal aplikasi kami pada sepuluh server ini, dan kemudian periksa ulang semuanya sepuluh kali. Layanan cloud mengganti prosedur ini dengan sepuluh baris kode, dan seorang insinyur DevOps yang baik harus dapat menanganinya. Jadi dia menghemat waktu, tenaga, dan uang - baik untuk pelanggan maupun untuk perusahaan. ”
5. Sistem orkestrasi: Docker dan KubernetesKirill Sergeyev : “Server virtual dibagi menjadi beberapa wadah, di mana masing-masingnya kita dapat menginstal aplikasi kita. Ketika ada banyak kontainer, Anda perlu mengelolanya: satu untuk menghidupkan, yang lain untuk mematikan, di suatu tempat untuk membuat cadangan. Ini menjadi urusan yang agak rumit yang membutuhkan sistem orkestrasi.
Sebelumnya, setiap aplikasi terlibat dalam server terpisah - setiap perubahan dalam operasinya dapat memengaruhi kesehatan aplikasi. Berkat kontainer, aplikasi menjadi terisolasi dan dijalankan secara terpisah - masing-masing pada mesin virtualnya sendiri. Jika kegagalan terjadi, tidak perlu membuang waktu untuk mencari penyebabnya. Lebih mudah untuk menghancurkan wadah lama dan menambahkan yang baru. "
6. Sistem konfigurasi: Chef, Ansible, WayangKetika Anda perlu memelihara armada server, Anda harus melakukan banyak operasi yang sama. Itu panjang dan sulit, dan bahkan pekerjaan manual meningkatkan kemungkinan kesalahan. Di sinilah sistem konfigurasi datang untuk menyelamatkan. Dengan bantuan mereka, mereka membuat skrip yang nyaman dibaca oleh programmer, insinyur DevOps, dan administrator sistem. Script ini membantu untuk melakukan operasi yang sama di server secara otomatis. Jadi operasi manual (dan, karena itu, kesalahan) menjadi kurang.
Karier apa yang bisa dibangun oleh insinyur DevOps?
Anda dapat mengembangkan secara horizontal dan vertikal.
Igor Boyko : “Dari sudut pandang pengembangan horizontal, insinyur DevOps sekarang memiliki prospek terluas. Semuanya terus berubah, dan Anda dapat membangun keterampilan dalam berbagai cara: dari sistem kontrol versi hingga pemantauan, dari manajemen konfigurasi hingga database.
Anda dapat menjadi arsitek sistem jika seorang karyawan tertarik untuk memahami bagaimana aplikasi bekerja di semua tahap siklus hidupnya - dari pengembangan hingga dukungan. "
Bagaimana cara menjadi insinyur DevOps?
- Baca buku-buku Proyek Phoenix dan Buku Pegangan DevOps. Ini adalah pilar sejati dari filosofi DevOps, yang pertama adalah novel artistik.
- Pelajari teknologi dari daftar di atas: pada kursus Anda sendiri atau online.
- Bergabunglah sebagai insinyur DevOps untuk proyek sumber terbuka.
- Berlatih dan menawarkan praktik DevOps pada proyek pribadi dan pekerjaan Anda.