DevOps telah menjadi solusi standar untuk memperbaiki proses pengembangan perangkat lunak yang lambat, terputus, atau rusak. Masalahnya adalah jika Anda baru mengenal DevOps dan tidak tahu harus mulai dari mana, maka Anda mungkin kurang memahami teknik-teknik ini. Artikel ini akan memandu Anda dalam mendefinisikan pipa DevOps dan akan memberikan instruksi tentang cara membuatnya dalam lima langkah. Meskipun tutorial ini tidak komprehensif, itu akan memberi Anda dasar untuk memulai dan memperluas pengetahuan Anda di masa depan. Tapi mari kita mulai dengan sejarah.
Perjalanan DevOps Saya
Saya dulu bekerja di tim cloud Citi Group mengembangkan aplikasi web Infrastructure-as-a-Service (IaaS) untuk mengelola infrastruktur cloud Citi, tetapi saya selalu bertanya-tanya bagaimana membuat proses pengembangan lebih efisien dan membawa perubahan budaya positif ke tim pengembangan. Saya menemukan jawabannya dalam sebuah buku yang direkomendasikan oleh Greg Lavender, CTO Citi untuk Cloud Architecture and Infrastructure. Buku itu berjudul The Phoenix Project , dan menjelaskan prinsip-prinsip DevOps sambil membaca seperti novel.
Tabel di belakang buku ini menunjukkan seberapa sering perusahaan yang berbeda menggunakan sistem mereka dalam lingkungan rilis:
Amazon: 23.000 per hari
Google: 5.500 per hari
Netflix: 500 per hari
Facebook:
Twitter sekali sehari : 3 kali seminggu
Perusahaan tipikal: Sekali setiap 9 bulan
Bagaimana frekuensi Amazon, Google, dan Netflix mungkin? Ini karena perusahaan-perusahaan ini menemukan cara untuk membuat pipa DevOps yang hampir sempurna.
Kami masih jauh dari itu sampai kami menerapkan DevOps di Citi. Tim saya memiliki lingkungan yang berbeda saat itu, tetapi menggunakan server pengembangan sepenuhnya manual. Semua pengembang hanya memiliki akses ke satu server pengembangan yang didasarkan pada IBM WebSphere Application Server Community Edition. Masalahnya adalah server akan mati setiap kali beberapa pengguna mencoba untuk menyebarkan pada saat yang sama, sehingga pengembang harus mengomunikasikan niat mereka satu sama lain, yang cukup menyakitkan. Selain itu, ada masalah dengan cakupan kode tes tingkat rendah, proses penyebaran manual yang rumit, dan ketidakmampuan untuk melacak penyebaran kode yang terkait dengan tugas atau kisah pengguna tertentu.
Saya menyadari bahwa saya perlu melakukan sesuatu dan menemukan kolega yang berpikiran sama. Kami memutuskan untuk berkolaborasi pada pipa DevOps awal - ini membuat mesin virtual dan server aplikasi Tomcat ketika saya sedang mengerjakan Jenkins, mengintegrasikan Jsian Atlas dan BitBucket, dan mengerjakan cakupan kode uji. Proyek sampingan ini sangat sukses: kami hampir sepenuhnya mengotomatiskan banyak proses, mencapai hampir 100% uptime server pengembangan kami, menyediakan pelacakan dan meningkatkan cakupan kode uji, dan menambahkan kemampuan untuk menghubungkan cabang di Git dengan masalah di Jira atau penyebaran. Sebagian besar alat yang kami gunakan untuk membangun pipa DevOps kami adalah open source.
Sekarang saya mengerti betapa sederhananya pipa DevOps kami: kami tidak menggunakan ekstensi seperti file Jenkins atau Ansible. Namun, pipa sederhana ini bekerja dengan baik, mungkin karena prinsip Pareto (juga dikenal sebagai aturan 80/20).
Pengantar cepat untuk DevOps dan pipa CI / CD
Jika Anda bertanya kepada beberapa orang, "Apa itu DevOps?", Maka Anda mungkin akan mendapatkan beberapa jawaban berbeda. DevOps, seperti Agile, telah berevolusi untuk mencakup banyak disiplin ilmu yang berbeda, tetapi kebanyakan orang akan menyetujui beberapa hal: DevOps adalah praktik pengembangan perangkat lunak atau siklus pengembangan perangkat lunak (SDLC) yang berfokus pada perubahan budaya di mana pengembang dan non-pengembang ada di lingkungan di mana:
Operasi otomatis yang sebelumnya dilakukan secara manual;
Setiap orang melakukan apa yang dia tahu terbaik;
Jumlah implementasi untuk periode waktu tertentu meningkat; Throughput meningkat;
Fleksibilitas pengembangan meningkat.
Walaupun memiliki alat perangkat lunak yang tepat bukan satu-satunya hal yang Anda butuhkan untuk menciptakan lingkungan DevOps, beberapa alat diperlukan. Alat kuncinya adalah integrasi berkelanjutan dan penerapan berkelanjutan (CI / CD). Dalam pipa ini, lingkungan memiliki tahapan yang berbeda (misalnya, DEV, INT, TST, QA, UAT, STG, PROD), banyak operasi otomatis, dan pengembang dapat menulis kode berkualitas tinggi, mencapai fleksibilitas pengembangan, dan frekuensi penyebaran tinggi.
Artikel ini menjelaskan pendekatan lima langkah untuk membangun pipa DevOps mirip dengan yang ditunjukkan pada diagram berikut menggunakan alat sumber terbuka.
Langkah 1: Metode CI / CD
Hal pertama yang Anda butuhkan adalah alat CI / CD. Jenkins, alat open source berbasis Java yang dirilis di bawah lisensi MIT, adalah alat yang mempopulerkan arah DevOps dan menjadi standar de facto.
Jadi, apa itu Jenkins? Anggap saja sebagai semacam remote control ajaib universal yang dapat berbicara dan mengatur berbagai layanan dan alat. Alat CI / CD seperti Jenkins tidak berguna dengan sendirinya, tetapi menjadi lebih kuat karena terhubung ke berbagai alat dan layanan.
Jenkins hanyalah salah satu dari banyak alat CI / CD open source yang dapat Anda gunakan untuk membangun pipa DevOps Anda.
Jenkins: Creative Commons dan MIT
Travis CI: MIT
CruiseControl: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU
Ini adalah bagaimana proses DevOps terlihat seperti dengan alat CI / CD:
Anda memiliki alat CI / CD yang berjalan di localhost Anda, tetapi tidak banyak yang dapat Anda lakukan pada saat ini. Mari kita beralih ke langkah selanjutnya dari perjalanan DevOps.
Langkah 2: Kelola sistem kontrol sumber
Cara terbaik (dan bisa dibilang paling mudah) untuk menguji apakah alat CI / CD Anda dapat melakukan keajaiban adalah dengan mengintegrasikan dengan Alat Kontrol Kode Sumber (SCM). Mengapa Anda memerlukan kontrol sumber? Katakanlah Anda sedang mengembangkan aplikasi. Setiap kali Anda membuat aplikasi, Anda memprogram, tidak masalah jika Anda menggunakan Java, Python, C ++, Go, Ruby, JavaScript, atau gazillions bahasa pemrograman mana pun. Kode yang Anda tulis disebut kode sumber. Pada awalnya, terutama ketika Anda bekerja sendirian, Anda mungkin dapat meletakkan semuanya di direktori lokal. Tetapi ketika proyek bertambah besar dan Anda mengundang orang lain untuk berkolaborasi, Anda perlu cara untuk mencegah konflik sambil berbagi modifikasi secara efisien. Anda juga perlu cara untuk memulihkan versi sebelumnya,karena membuat cadangan dan menyalin / menempel ke dalamnya sudah usang. Anda (dan rekan satu tim Anda) membutuhkan sesuatu yang lebih baik.
Di sinilah kontrol sumber menjadi kebutuhan praktis. Alat ini menyimpan kode Anda dalam repositori, melacak versi dan mengoordinasikan pekerjaan peserta proyek.
Meskipun ada banyak alat kontrol sumber di luar sana, Git adalah standar dan memang demikian. Saya sangat merekomendasikan menggunakan Git, meskipun ada opsi open source lain jika Anda suka.
Git: GPLv2 dan LGPL v2.1
Subversi: Apache 2.0
Concurrent Versi System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2 +
Seperti inilah tampilan pipa DevOps dengan tambahan kontrol kode sumber.
Alat CI / CD dapat mengotomatiskan proses verifikasi, pengambilan kode sumber dan kolaborasi antara anggota. Tidak buruk? Tetapi bagaimana Anda menjadikannya aplikasi yang berfungsi sehingga miliaran orang dapat menggunakan dan menghargainya?
Langkah 3: Buat alat otomasi bangunan
Baik! Anda dapat memeriksa kode dan membuat perubahan pada sistem kontrol sumber, serta mengundang teman Anda untuk berkolaborasi dalam pengembangan. Tapi Anda belum membuat aplikasi. Untuk membuat aplikasi web, itu harus dikompilasi dan dikemas dalam format batch yang dapat digunakan, atau dijalankan sebagai file yang dapat dieksekusi. (Perhatikan bahwa bahasa pemrograman yang ditafsirkan seperti JavaScript atau PHP tidak perlu dikompilasi.)
Gunakan alat otomatisasi bangun. Apa pun alat otomasi bangunan yang Anda pilih untuk digunakan, semuanya memiliki tujuan yang sama: membangun kode sumber dalam format apa pun yang Anda inginkan dan mengotomatiskan tugas pembersihan, kompilasi, pengujian, dan penyebaran ke lingkungan tertentu. Alat Bangun akan bervariasi tergantung pada bahasa pemrograman Anda, tetapi di sini ada beberapa opsi open source yang umum.
Nama | Lisensi | Bahasa pemrograman |
---|---|---|
Maven | Apache 2.0 | Jawa |
Semut | Apache 2.0 | Jawa |
Gradle | Apache 2.0 | Jawa |
Bazel | Apache 2.0 | Jawa |
Membuat | GNU | T / A |
Mendengus | MIT | JavaScript |
Meneguk | MIT | JavaScript |
Buildr | Apache | Rubi |
Menyapu | MIT | Rubi |
AAP | GNU | Python |
SCON | MIT | Python |
BitBake | GPLv2 | Python |
kue | MIT | C # |
ASDF | Expat (MIT) | PELAT |
Komplotan rahasia | BSD | Haskell |
Bagus! Anda dapat menempatkan file konfigurasi alat bantu otomasi ke sistem kontrol sumber dan biarkan alat CI / CD Anda menyatukan semuanya.
Tidak apa-apa, bukan? Tetapi di mana menempatkan aplikasi Anda?
Langkah 4: Server untuk aplikasi web
Sejauh ini, Anda memiliki file terkompresi yang dapat dieksekusi atau diinstal. Agar aplikasi apa pun benar-benar bermanfaat, ia harus menyediakan semacam layanan atau antarmuka, tetapi Anda memerlukan wadah untuk menampung aplikasi Anda.
Server aplikasi web hanyalah sebuah wadah. Server menyediakan lingkungan di mana logika dari paket yang digunakan dapat didefinisikan. Server juga menyediakan antarmuka dan menawarkan layanan web dengan membuka soket ke dunia luar. Anda memerlukan server HTTP serta beberapa lingkungan (seperti mesin virtual) untuk menginstalnya. Untuk saat ini, anggap Anda mempelajari lebih lanjut tentang ini (walaupun saya akan berbicara tentang wadah di bawah).
Ada beberapa server aplikasi web sumber terbuka.
Nama | Lisensi | Bahasa pemrograman |
---|---|---|
Kucing jantan | Apache 2.0 | Jawa |
Dermaga | Apache 2.0 | Jawa |
WildFly | GNU Kecil Publik | Jawa |
Ikan kaca | CDDL & GNU Kurang Umum | Jawa |
Django | 3-Clause BSD | Python |
Angin topan | Apache 2.0 | Python |
Gunicorn | MIT | Python |
Python | MIT | Python |
Rel | MIT | Rubi |
Node.js | MIT | Javascript |
Pipa DevOps Anda hampir siap digunakan. Kerja bagus!
Meskipun Anda dapat berhenti di situ dan mengintegrasikan diri Anda sendiri, kualitas kode adalah hal penting yang perlu dikhawatirkan oleh pengembang aplikasi.
Langkah 5: cakupan pengujian kode
Implementasi pengujian dapat menjadi persyaratan rumit lainnya, tetapi pengembang harus menangkap bug dalam aplikasi lebih awal dan meningkatkan kualitas kode untuk memastikan bahwa pengguna akhir puas. Untungnya, ada banyak alat sumber terbuka di luar sana untuk menguji kode Anda dan membuat rekomendasi untuk meningkatkan kualitasnya. Lebih baik lagi, sebagian besar alat CI / CD dapat terhubung ke alat ini dan mengotomatiskan prosesnya.
Pengujian kode terdiri dari dua bagian: kerangka pengujian kode yang membantu Anda menulis dan menjalankan pengujian, dan alat saran yang membantu meningkatkan kualitas kode Anda.
Sistem pengujian kode
Nama | Lisensi | Bahasa pemrograman |
---|---|---|
JUnit | Lisensi Publik Eclipse | Jawa |
EasyMock | Apache | Jawa |
Mockito | MIT | Jawa |
PowerMock | Apache 2.0 | Jawa |
Pytest | MIT | Python |
Hipotesa | Mozilla | Python |
Racun | MIT | Python |
Sistem rekomendasi perbaikan kode
Nama | Lisensi | Bahasa pemrograman |
---|---|---|
Cobertura | GNU | Jawa |
CodeCover | Eclipse Public (EPL) | Jawa |
Coverage.py | Apache 2.0 | Python |
Emma | Lisensi Publik Umum | Jawa |
JaCoCo | Lisensi Publik Eclipse | Jawa |
Hipotesa | Mozilla | Python |
Racun | MIT | Python |
Melati | MIT | JavaScript |
Karma | MIT | JavaScript |
Moka | MIT | JavaScript |
Bersenda gurau | MIT | JavaScript |
Perhatikan bahwa sebagian besar alat dan kerangka kerja yang disebutkan di atas ditulis untuk Java, Python, dan JavaScript, karena C ++ dan C # adalah bahasa pemrograman berpemilik (walaupun GCC adalah open source).
Sekarang setelah Anda menerapkan alat cakupan pengujian, pipa DevOps Anda akan terlihat mirip dengan diagram yang ditunjukkan di awal tutorial ini.
Langkah tambahan
Wadah
Seperti yang saya katakan, Anda dapat meng-host server Anda di mesin virtual atau server, tetapi kontainer adalah solusi yang populer.
Apa itu wadah? Penjelasan singkatnya adalah bahwa mesin virtual membutuhkan sejumlah besar memori sistem operasi yang melebihi ukuran aplikasi, sedangkan wadah hanya membutuhkan beberapa perpustakaan dan konfigurasi untuk menjalankan aplikasi. Jelas, masih ada kegunaan penting untuk mesin virtual, tetapi wadah adalah solusi ringan untuk hosting aplikasi, termasuk server aplikasi.
Sementara opsi wadah lain ada, yang paling populer adalah Docker dan Kubernetes.
Docker: Apache 2.0
Kubernetes: Apache 2.0 Automation middleware
Pipa DevOps kami terutama berfokus pada pembuatan bersama dan penyebaran aplikasi, tetapi ada banyak hal lain yang dapat dilakukan dengan menggunakan alat-alat DevOps. Salah satunya adalah penggunaan alat Infrastructure as Code (IaC), yang juga dikenal sebagai alat middleware. Alat-alat ini membantu mengotomatiskan instalasi, manajemen, dan tugas-tugas lain untuk middleware. Misalnya, alat otomatisasi dapat mengambil aplikasi seperti server aplikasi web, basis data, dan alat pemantauan dengan konfigurasi yang benar dan menyebarkannya ke server aplikasi.
Berikut adalah beberapa alat middleware open source:
Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache or GPL
Pelajari detail cara mendapatkan profesi yang dicari dari awal atau Tingkatkan keterampilan dan gaji dengan menyelesaikan kursus online berbayar SkillFactory:
- Kursus DevOps (12 bulan)
lebih banyak kursus
- Machine Learning (12 )
- Data Science (12 )
- (9 )
- Β«Python -Β» (9 )