Gambaran Keseluruhan DevOps

1. Gambaran keseluruhan

Dalam artikel ini, kami akan memahami asas-asas prinsip dan amalan DevOps. Kami akan melihat mengapa ini relevan dan bermanfaat dalam pembangunan perisian. Kami juga akan memahami bagaimana kami dapat menggunakan DevOps secara bermakna dan alat apa yang ada untuk membantu kami sepanjang perjalanan ini.

2. Konteks Sejarah

Kami tidak akan dapat menghargai DevOps seperti sekarang ini tanpa melihat kembali sejarah sedikit. Masa awal pengembangan perisian kebanyakannya dicirikan oleh apa yang kita sebut metodologi air terjun. Yang dimaksudkan secara efektif adalah perisian dikonseptualisasikan, dirancang, dikembangkan, diuji, dan diedarkan secara berturut-turut .

Setiap langkah seinci yang mungkin, kerana kembali sangat mahal . Yang dimaksudkan dengan berkesan ini adalah masa menunggu yang jauh lebih tinggi antara pemikiran dan tindakan. Walau bagaimanapun, ini tidak menjadi masalah kerana landskap teknologi tidak stabil dan gangguan terlalu merebak.

Menariknya, model ini tidak bertahan lama. Ketika kecepatan teknologi berubah dan gangguan mulai sering terjadi, perniagaan mula merasakan kepanasan. Mereka memerlukan idea baru untuk diuji dengan lebih cepat . Ini bermaksud perubahan yang lebih cepat dalam semua aspek perniagaan, termasuk perisian.

Ini melahirkan dunia baru metodologi pengembangan perisian yang dilihat secara longgar di bawah payung Agile. Manifesto lincah menetapkan seperangkat prinsip yang harus diikuti untuk penyampaian perisian secara bertahap dengan gelung maklum balas yang lebih cepat . Terdapat beberapa kerangka tangkas seperti Scrum dan Kanban dalam praktiknya.

3. Apa itu DevOps ?

Kami telah melihat bahawa pengembangan bertahap dengan maklum balas yang lebih cepat telah menjadi tonggak penyampaian perisian hari ini. Tetapi bagaimana kita mencapainya? Walaupun metodologi tangkas tradisional membawa kita ke tahap yang wajar, masih belum ideal.

Metodologi tangkas terus menyempurnakan diri kerana mereka terus berusaha memecahkan silo.

Secara tradisinya, kami selalu mempunyai pasukan yang berbeza yang bertanggungjawab untuk membangun dan menyampaikan perisian. Pasukan ini sering beroperasi di silo mereka. Ini berkesan diterjemahkan ke dalam kitaran maklum balas yang lebih lama, yang bukan sesuatu yang kita mahukan dengan metodologi tangkas.

Oleh itu, ia tidak memerlukan banyak alasan untuk memahami bahawa pasukan lincah yang berfungsi dengan baik dan bersepadu lebih sesuai untuk mencapai objektif mereka. DevOps adalah amalan yang mendorong komunikasi, kolaborasi, integrasi, dan automasi antara pasukan pengembangan perisian dan operasi . Ini lebih baik membolehkan kita mewujudkan perkembangan bertahap dengan maklum balas yang lebih pantas.

Gambar rajah berikut menerangkan kemungkinan aliran kerja untuk mempraktikkan DevOps:

Walaupun kita akan melihat perincian langkah-langkah ini kemudian dalam tutorial, mari kita fahami beberapa prinsip utama DevOps:

  • Pendekatan berpusatkan nilai (seperti yang disedari oleh pengguna akhir)
  • Budaya kolaboratif (dengan komunikasi, proses, dan alat yang berkesan)
  • Automasi proses (untuk meningkatkan kecekapan dan mengurangkan kesilapan)
  • Hasil yang dapat diukur (untuk mengukur matlamat)
  • Maklum balas berterusan (cenderung untuk meningkat cepat)

4. Bagaimana Memulakan Perjalanan?

Walaupun teori ini mudah dan menarik, cabaran sebenarnya adalah dengan mempraktikkan DevOps secara bermakna. Seperti yang telah kita kumpulkan setakat ini, DevOps kebanyakannya berkaitan dengan orang, bukannya pasukan .

Objektif bersama, komunikasi yang berkesan, dan kemahiran lintas fungsi adalah ciri khas pasukan tersebut. Oleh kerana sebahagian besar perubahan ini adalah budaya, selalunya lambat dan tidak tanpa geseran.

4.1. Motivasi

Hanya kerana ada amalan yang popular di luar sana tidak semestinya menjadikannya sesuai untuk kita. Kita perlu memahami motivasi kita untuk pergeseran apa pun - lebih-lebih lagi jika kita membuat perubahan ke arah tangkas. Ia berguna untuk dinyatakan dengan menentukan tujuan yang ingin kita capai .

Matlamat DevOps di mana-mana organisasi bergantung pada cita-cita, budaya, dan kematangan organisasi itu. Berikut adalah beberapa matlamat DevOps yang lebih biasa:

  • Pengalaman yang lebih baik kepada pengguna akhir
  • Masa lebih pantas ke pasar
  • Masa min yang lebih baik untuk pemulihan

4.2. Adopsi

Ingat bahawa DevOps bukan keadaan akhir tetapi proses penambahbaikan yang berterusan untuk mencapai matlamat. Oleh itu, setiap orang dalam pasukan mesti berusaha untuk mengenal pasti halangan dan menghapusnya dengan cepat . Berikut adalah beberapa aktiviti yang dapat membantu kami memulakan:

  • Fahami dengan jelas keadaan idea semasa kitaran pengeluaran
  • Kumpulkan beberapa halangan yang jelas dan gunakan metrik untuk membuat keputusan berdasarkan fakta
  • Utamakan kemacetan yang akan menambah nilai apabila dikeluarkan
  • Tentukan rancangan berulang untuk memberikan nilai secara bertahap untuk item yang diutamakan
  • Ikuti kitaran pendek Develop-Deploy-Measure untuk mencapai matlamat

5. Amalan DevOps

Terdapat beberapa amalan yang harus diikuti, tetapi idea itu tidak boleh digunakan sebagai standard emas. Kita harus memeriksa dengan teliti setiap amalan di latar belakang keadaan dan objektif kita dan kemudian membuat keputusan yang tepat. Walau bagaimanapun, hampir semua amalan cenderung menumpukan pada proses automasi sebanyak mungkin.

5.1. Perancangan tangkas

Perancangan lincah adalah amalan menentukan karya secara bertahap. Walaupun objektif akhir harus jelas, tidak perlu menentukan dan memperincikan keseluruhan aplikasi di muka. Kuncinya di sini adalah mengutamakan pekerjaan berdasarkan nilai yang dapat diberikannya .

Kemudian, ia mesti dipecahkan dalam lelaran kenaikan yang pendek tetapi berfungsi.

5.2. Infrastruktur-seperti-Kod (IaC)

Ini adalah amalan mengurus dan menyediakan infrastruktur melalui fail konfigurasi yang dapat dibaca oleh mesin . Kami juga menguruskan konfigurasi ini dalam sistem kawalan versi seperti kami menguruskan pangkalan data kami. Terdapat banyak bahasa khusus domain yang tersedia untuk membuat fail konfigurasi ini secara deklaratif.

5.3. Automasi Ujian

Pengujian perisian secara tradisional merupakan usaha manual yang sering dilakukan dalam silo. Ini tidak berkahwin dengan prinsip tangkas. Oleh itu, sangat penting bagi kita untuk mencuba automatik pengujian perisian di semua peringkat, seperti pengujian unit, pengujian fungsional, pengujian keselamatan, dan pengujian prestasi .

5.4. Integrasi Berterusan (CI)

Integrasi berterusan adalah amalan menggabungkan kod kerja lebih kerap dengan kenaikan kecil ke repositori bersama . Biasanya, terdapat binaan dan pemeriksaan automatik yang sering dijalankan di repositori bersama ini untuk memberi tahu kami mengenai sebarang kerosakan kod secepat mungkin.

5.5. Penghantaran / Penerapan Berterusan (CD)

Penyampaian berterusan adalah amalan melepaskan perisian secara bertahap sebaik sahaja melewati semua pemeriksaan . Ini sering dilakukan bersama dengan Integrasi Berterusan dan dapat memanfaatkan mekanisme pelepasan automatik (disebut sebagai Penerapan Berterusan).

5.6. Pemantauan berterusan

Pemantauan - mungkin pusat DevOps - membolehkan gelung maklum balas lebih cepat. Mengenal pasti metrik yang tepat untuk memantau semua aspek perisian, termasuk infrastruktur, sangat penting . Mempunyai metrik yang tepat, ditambah dengan analisis masa nyata dan berkesan, dapat membantu mengenal pasti dan menyelesaikan masalah dengan lebih cepat. Lebih-lebih lagi, ia masuk terus ke dalam perancangan tangkas.

Senarai ini jauh dari lengkap dan sentiasa berkembang. Pasukan yang berlatih DevOps terus mencari cara yang lebih baik untuk mencapai matlamat mereka. Beberapa amalan lain yang perlu disebutkan ialah Containerization, Cloud-Native Development, dan Microservices, untuk beberapa nama.

6. Alat Perdagangan

Tidak ada perbincangan mengenai DevOps yang dapat diselesaikan tanpa membicarakan alatnya. Ini adalah satu kawasan di mana terdapat letupan dalam beberapa tahun terakhir. Mungkin ada alat baru di luar sana pada saat kita selesai membaca tutorial ini! Walaupun ini menggoda dan luar biasa pada masa yang sama, perlu berhati-hati.

Kita tidak boleh memulakan perjalanan DevOps kita dengan alat sebagai perkara pertama dalam fikiran kita. Kita mesti meneroka dan menetapkan tujuan, orang (budaya), dan amalan kita sebelum mencari alat yang tepat . Dengan jelasnya, mari kita lihat beberapa alat yang diuji masa yang tersedia untuk kita.

6.1. Perancangan

Seperti yang kita lihat, DevOps yang matang selalu bermula dengan perancangan yang tangkas. Walaupun jelas mengenai objektif, hanya perlu memprioritaskan dan menentukan kerja untuk beberapa lelaran pendek. Maklum balas dari lelaran awal ini sangat berharga dalam membentuk yang akan datang dan akhirnya keseluruhan perisian. Alat yang berkesan di sini dapat membantu kita menjalankan proses ini dengan mudah.

Jira adalah produk penjejakan terbanyak yang dibangunkan oleh Atlassian. Ia memiliki banyak alat perencanaan dan pemantauan tangkas. Sebilangan besarnya, ini adalah produk komersial yang boleh kita jalankan di premis atau digunakan sebagai aplikasi yang dihoskan.

6.2. Pembangunan

Idea di sebalik lincah adalah untuk membuat prototaip lebih cepat dan mencari maklum balas mengenai perisian yang sebenarnya. Pembangun mesti membuat perubahan dan bergabung lebih cepat ke versi perisian yang dikongsi. Lebih penting lagi komunikasi antara ahli pasukan menjadi lancar dan cepat.

Mari lihat beberapa alat di mana-mana di domain ini.

Git adalah sistem kawalan versi diedarkan. Ia cukup popular, dan terdapat banyak perkhidmatan yang dihoskan menyediakan git repositori dan fungsi nilai tambah. Asalnya dikembangkan oleh Linus Torvalds, ini menjadikan kerjasama antara pembangun perisian menjadi lebih mudah.

Confluence adalah alat kolaborasi yang dikembangkan oleh Atlassian . Kerjasama adalah kunci kejayaan bagi mana-mana pasukan yang tangkas. Semantik kolaborasi sebenarnya cukup kontekstual, tetapi alat yang membuat usaha lancar tetap berharga. Persimpangan sesuai dengan tempat ini dengan tepat. Lebih-lebih lagi, ia berintegrasi dengan Jira!

Slack adalah platform pesanan segera yang dikembangkan oleh Slack Technologies. Seperti yang telah kita bincangkan, pasukan tangkas seharusnya dapat berkolaborasi dan berkomunikasi, lebih baik dalam masa nyata . Selain daripada pesanan segera, Slack menawarkan banyak cara untuk berkomunikasi dengan satu pengguna atau sekumpulan pengguna - dan ia berintegrasi dengan baik dengan alat lain seperti Jira dan GitHub!

6.3. Kesepaduan

Perubahan yang digabungkan oleh pemaju harus diperiksa secara berterusan untuk dipatuhi. Apa yang menjadi kepatuhan adalah khusus untuk pasukan dan aplikasi. Walau bagaimanapun, adalah biasa untuk melihat analisis kod statik dan dinamik, serta pengukuran metrik yang berfungsi dan tidak berfungsi, sebagai komponen pematuhan.

Mari lihat sebentar beberapa alat integrasi yang popular.

Jenkins adalah pelayan automatik sumber terbuka dan menarik. Sudah bertahun-tahun berada di industri dan cukup matang untuk melayani spektrum besar kes penggunaan automasi. Ini menawarkan cara deklaratif untuk menentukan rutin automasi dan pelbagai cara untuk mencetuskannya secara automatik atau manual. Lebih-lebih lagi, ia mempunyai sekumpulan plugin yang kaya yang menyediakan beberapa ciri tambahan untuk membuat saluran automasi yang kuat.

SonarQube adalah platform pemeriksaan berterusan sumber terbuka yang dikembangkan oleh SonarSource. SonarQube mempunyai sekumpulan peraturan analisis statik yang kaya untuk banyak bahasa pengaturcaraan. Ini membantu mengesan bau kod seawal mungkin. Lebih-lebih lagi, SonarQube menawarkan papan pemuka yang dapat mengintegrasikan metrik lain seperti liputan kod, kerumitan kod, dan banyak lagi. Dan, ia berfungsi dengan baik dengan Jenkins Server.

6.4. Penghantaran

Untuk menyampaikan perubahan dan ciri baru kepada perisian dengan cepat adalah penting. Sebaik sahaja kami membuktikan bahawa perubahan yang digabungkan di repositori mematuhi piawaian dan dasar kami, kami akan dapat menyampaikannya kepada pengguna akhir dengan cepat. Ini membantu kami mengumpulkan maklum balas dan membentuk perisian dengan lebih baik.

Terdapat beberapa alat di sini yang dapat membantu kita mengotomatisasi beberapa aspek penyampaian sehingga kita mencapai penggunaan berterusan.

Docker adalah alat yang lazim digunakan untuk menampung sebarang jenis aplikasi dengan cepat. Ia memanfaatkan virtualisasi peringkat OS untuk mengasingkan perisian dalam pakej yang disebut container. Kontainer mempunyai faedah langsung dari segi penyampaian perisian yang lebih dipercayai . Docker Containers bercakap antara satu sama lain melalui saluran yang ditentukan dengan baik. Lebih-lebih lagi, ini cukup ringan berbanding cara pengasingan lain seperti Mesin Maya.

Chef / Puppet / Ansible adalah alat pengurusan konfigurasi. Seperti yang kita ketahui, contoh aplikasi perisian yang berjalan sebenarnya adalah gabungan dari pangkalan pangkalan data dan konfigurasinya. Walaupun struktur pangkalan data sering tidak berubah di seluruh persekitaran, konfigurasi tidak berlaku. Di sinilah kita memerlukan alat pengurusan konfigurasi untuk menyebarkan aplikasi kita dengan mudah dan cepat . Terdapat beberapa alat yang popular di ruang ini, masing-masing mempunyai kebiasaan mereka, tetapi Chef, Boneka, dan Ansible hampir merangkumi asas.

HashiCorp Terraform dapat membantu kami dalam penyediaan infrastruktur , yang merupakan tugas yang membosankan dan memakan masa sejak zaman pusat data swasta. Tetapi dengan semakin banyak penggunaan awan, infrastruktur sering dilihat sebagai konstruksi sekali pakai dan berulang. Namun, ini hanya dapat dicapai jika kita mempunyai alat yang dapat kita tentukan infrastruktur sederhana hingga kompleks secara deklaratif dan membuatnya dengan satu klik butang . Mungkin terdengar seperti urutan impian, tetapi Terraform secara aktif berusaha untuk merapatkan jurang itu!

6.5. Pemantauan

Akhirnya, untuk dapat memerhatikan penyebaran dan mengukurnya terhadap sasaran adalah mustahak. Terdapat banyak metrik yang dapat kami kumpulkan dari sistem dan aplikasi. Ini merangkumi beberapa metrik perniagaan yang khusus untuk aplikasi kami.

Idea di sini adalah untuk dapat mengumpulkan, mengurus, menyimpan, dan menganalisis metrik ini dalam masa hampir nyata. Terdapat beberapa produk baru, baik sumber terbuka, dan komersial, yang terdapat di ruang ini.

Elastic-Logstash-Kibana (ELK) adalah timbunan tiga projek sumber terbuka - Elasticsearch, Logstash, dan Kibana. Elasticsearch adalah mesin carian dan analisis yang sangat berskala. Logstash menyediakan saluran paip pemprosesan data di sisi pelayan yang mampu memakan data dari pelbagai sumber. Akhirnya, Kibana membantu kami memvisualisasikan data ini. Bersama-sama, timbunan ini dapat digunakan untuk mengumpulkan data seperti log dari semua aplikasi dan menganalisisnya dalam waktu nyata .

Prometheus adalah alat pemantauan dan amaran sistem sumber terbuka yang awalnya dikembangkan oleh SoundCloud. Ia dilengkapi dengan model data pelbagai dimensi, bahasa pertanyaan yang fleksibel, dan dapat menarik data siri masa melalui HTTP. Grafana adalah satu lagi penyelesaian analisis dan pemantauan sumber terbuka yang berfungsi dengan beberapa pangkalan data. Bersama-sama, Prometheus dan Grafana dapat memberi kita pengendalian masa nyata pada hampir semua metrik yang mampu dihasilkan oleh sistem kita .

7. Sambungan DevOps (Atau betul-betul!)

Kami telah melihat bahawa DevOp, pada dasarnya, adalah usaha berterusan untuk menghilangkan halangan ke arah penyampaian perisian berdasarkan nilai yang lebih cepat dan berulang. Sekarang, salah satu kesimpulan segera adalah bahawa tidak ada keadaan akhir di sini.

Apa yang disedari orang sebagai geseran antara pasukan pengembangan dan operasi bukan satu-satunya geseran. Memecahkan silo dalam organisasi untuk meningkatkan kerjasama adalah idea utama. Kini, orang segera menyedari bahawa geseran serupa berlaku antara pasukan pengembangan dan ujian, dan antara pasukan pembangunan dan keselamatan . Banyak persediaan tradisional mempunyai pasukan keselamatan dan prestasi yang berdedikasi.

Potensi penuh DevOps tidak akan dapat direalisasikan sehingga kita dapat memecahkan hampir semua batas antara pasukan dan membantu mereka bekerjasama dengan lebih berkesan. Ini semestinya membawa pasukan seperti ujian, keselamatan, dan prestasi ke tahap yang sama .

Kekeliruan sebahagian besarnya dalam tatanama. DevOps membuat kita memahami bahawa ini kebanyakannya mengenai pasukan pembangunan dan operasi. Oleh itu, dari masa ke masa, istilah baru telah muncul, merangkumi pasukan lain. Tetapi sebahagian besarnya, hanya DevOps yang direalisasikan dengan lebih berkesan!

7.1. DevTestOps

Batu asas DevOps memberikan perisian berkualiti tinggi dengan kenaikan kecil dan lebih kerap. Terdapat banyak aspek penekanan pada kualiti di sini. Dari satu segi, kita sering menganggap bahawa amalan DevOps yang kita pakai akan membantu kita mencapainya. Dan, memang benar bahawa banyak amalan yang kita bincangkan sebelumnya memberi tumpuan untuk memastikan kualiti yang tinggi setiap masa.

Tetapi pengujian fungsi perisian mempunyai skop yang lebih luas. Sering kali, kami cenderung untuk mengekalkan ujian yang lebih tinggi seperti ujian akhir ke akhir menjelang akhir penyampaian perisian. Lebih penting lagi, ini selalunya merupakan tanggungjawab pasukan berasingan yang terlibat dalam proses yang lewat. Di sinilah keadaan mula menyimpang dari prinsip DevOps.

Apa yang harus kita lakukan adalah mengintegrasikan pengujian perisian, di semua peringkat, sejak awal . Dari tahap perancangan, pengujian perisian harus dianggap sebagai aspek penyampaian yang tidak terpisahkan. Lebih-lebih lagi, pasukan yang sama harus bertanggungjawab untuk mengembangkan dan menguji perisian. Inilah yang diamalkan oleh amalan DevTestOps. Ini sering juga disebut sebagai Ujian Berterusan dan Bergeser ke Kiri.

7.2. DevSecOps

Keselamatan adalah bahagian yang tidak terpisahkan dari sebarang pembangunan perisian dan mempunyai kerumitannya. Ini sering kali bermaksud bahawa kita mempunyai pasukan pakar keselamatan yang berasingan dengan kita ketika kita bersedia menghantar produk. Kerentanan yang mereka kenal pasti pada tahap ini sangat mahal untuk diperbaiki. Ini sekali lagi tidak sesuai dengan prinsip DevOps.

Pada masa ini, kita sudah semestinya mempunyai jalan penyelesaian yang perlu kita laksanakan, dan kita harus mengemukakan masalah keselamatan dan personel pada awal permainan . Kita harus memotivasi pasukan untuk memikirkan keselamatan di setiap peringkat. Keselamatan tidak diragukan lagi adalah domain yang sangat khusus, dan oleh itu kita mungkin perlu membawa pakar dalam pasukan. Tetapi idea di sini adalah untuk mempertimbangkan beberapa amalan terbaik sejak awal.

Semasa kita bergerak, ada beberapa alat yang tersedia yang dapat mengotomatisasi mengimbas banyak kelemahan . Kami juga dapat memasukkannya ke dalam kitaran Integrasi Berterusan untuk mendapatkan maklum balas pantas! Sekarang, kita tidak dapat mengintegrasikan semuanya ke dalam Integrasi Berterusan kerana kita mesti memastikannya ringan, tetapi selalu ada imbasan berkala yang dijalankan secara berasingan.

8. Kesimpulannya

Dalam artikel ini, kami membahas asas-asas prinsip, amalan, dan alat DevOps yang tersedia untuk digunakan. Kami memahami konteks di mana DevOps relevan dan sebab-sebab ia berguna bagi kami. Kami juga membincangkan secara ringkas di mana hendak bermula dalam perjalanan mengadopsi DevOps.

Selanjutnya, kami menyentuh beberapa amalan dan alat popular yang tersedia untuk kami gunakan dalam perjalanan ini. Kami juga memahami beberapa istilah popular lain di sekitar DevOps seperti DevTestOps dan DevSecOps.

Akhirnya, kita harus memahami bahawa DevOps bukanlah keadaan akhir, melainkan perjalanan yang mungkin tidak akan pernah selesai! Tetapi bahagian yang menyeronokkan di sini adalah perjalanan itu sendiri. Sepanjang masa, kita tidak boleh melupakan tujuan kita, dan kita harus fokus pada prinsip-prinsip utama. Cukup mudah untuk mendapat cahaya alat atau istilah yang popular di industri ini. Tetapi kita mesti selalu ingat bahawa apa-apa hanya berguna jika ia membantu memberi nilai kepada khalayak kita dengan lebih berkesan.