ProHoster > Blog > yönetim > Başlangıç Kılavuzu: DevOps Ardışık Düzeni Oluşturma
Başlangıç Kılavuzu: DevOps Ardışık Düzeni Oluşturma
DevOps'ta yeniyseniz ilk işlem hattınızı oluşturmaya yönelik bu beş adımlı kılavuza göz atın.
DevOps, yavaş, kopuk veya bozuk yazılım geliştirme süreçlerini düzeltmek için standart çözüm haline geldi. Sorun şu ki, DevOps'ta yeniyseniz ve nereden başlayacağınızı bilmiyorsanız, bu teknikleri anlama konusunda eksik olabilirsiniz. Bu makalede DevOps işlem hattının tanımı tartışılacak ve ayrıca bir DevOps oluşturma işlemine ilişkin beş adımlı talimatlar sunulacaktır. Bu eğitim kapsamlı olmasa da, yolculuğunuza başlamanız ve gelecekte bilginizi genişletmeniz için size bir temel sağlamalıdır. Ama tarihle başlayalım.
DevOps Yolculuğum
Daha önce Citi Group bulut ekibinde Citi'nin bulut altyapısını yönetmek için bir Hizmet Olarak Altyapı (IaaS) web uygulaması geliştirerek çalıştım, ancak her zaman geliştirme sürecini nasıl daha verimli hale getirebileceğim ve olumlu kültürel değişimi nasıl getirebileceğim konusuyla ilgileniyordum. geliştirme ekibi. Cevabı Citi Bulut Mimarisi ve Altyapısı CTO'su Greg Lavender tarafından önerilen bir kitapta buldum. Kitabın adı Phoenix Projesi (Phoenix Projesi) ve DevOps'un ilkelerini açıklıyor ancak bir roman gibi okunuyor.
Kitabın arkasındaki tablo, farklı şirketlerin sistemlerini bir sürüm ortamında ne sıklıkta devreye aldığını göstermektedir:
Amazon: Günde 23
Google: günde 5
Netflix: Günde 500
Facebook: Günde bir kez
Twitter: Haftada 3 kez
Tipik şirket: Her 9 ayda bir
Amazon, Google ve Netflix frekansları nasıl mümkün olabilir? Bunun nedeni, bu şirketlerin neredeyse mükemmel bir DevOps hattının nasıl oluşturulacağını çözmüş olmalarıdır.
Citi'de DevOps'u uygulayana kadar bundan çok uzaktaydık. O zamanlar ekibimin farklı ortamları vardı ancak geliştirme sunucusundaki dağıtım tamamen manueldi. Tüm geliştiricilerin, IBM WebSphere Application Server Community Edition'ı temel alan tek bir geliştirme sunucusuna erişimi vardı. Sorun, birden fazla kullanıcı aynı anda dağıtım yapmaya çalıştığında sunucunun kapanmasıydı, bu nedenle geliştiriciler niyetlerini birbirlerine iletmek zorundaydı ki bu oldukça acı vericiydi. Ek olarak, düşük seviyeli test kodu kapsamı, hantal manuel dağıtım süreçleri ve belirli bir görev veya kullanıcı hikayesiyle ilişkili kod dağıtımının izlenememesiyle ilgili sorunlar vardı.
Bir şeyler yapılması gerektiğini fark ettim ve benzer düşüncelere sahip bir meslektaş buldum. İlk DevOps hattını oluşturmak için işbirliği yapmaya karar verdik; ben Jenkins üzerinde çalışırken o bir Tomcat sanal makinesi ve uygulama sunucusu kurdu, Atlassian Jira ve BitBucket'i entegre etti ve test kodu kapsamı üzerinde çalıştı. Bu yan proje çok başarılıydı: Birçok süreci neredeyse tamamen otomatikleştirdik, geliştirme sunucumuzda neredeyse %100 çalışma süresi elde ettik, kodun takibini ve geliştirilmiş test kapsamını sağladık ve Git dallarını Jira sorunlarına veya dağıtımlarına bağlama yeteneğini ekledik. DevOps hattımızı oluşturmak için kullandığımız araçların çoğu açık kaynaktı.
Artık DevOps işlem hattımızın ne kadar basit olduğunu anlıyorum: Jenkins dosyaları veya Ansible gibi uzantılar kullanmadık. Ancak bu basit boru hattı, belki de Pareto ilkesi (aynı zamanda 80/20 kuralı olarak da bilinir) nedeniyle iyi çalıştı.
DevOps'a ve CI/CD Ardışık Düzenine Kısa Bir Giriş
Birkaç kişiye “DevOps nedir?” diye sorarsanız muhtemelen birkaç farklı yanıt alırsınız. DevOps, Agile gibi birçok farklı disiplini kapsayacak şekilde gelişti, ancak çoğu insan birkaç konuda hemfikir olacaktır: DevOps, temel ilkesi geliştiricilerin ve geliştirici olmayanların içinde bulunduğu kültürü değiştirmek olan bir yazılım geliştirme uygulaması veya yazılım geliştirme yaşam döngüsüdür (SDLC). geliştiriciler aşağıdakilerin olduğu bir ortamda bulunur:
Daha önce manuel olarak gerçekleştirilen işlemler otomatikleştirildi;
Herkes en iyi yaptığı işi yapar;
Belirli bir zaman diliminde uygulama sayısı artar; Verim artar;
Artan geliştirme esnekliği.
DevOps ortamı oluşturmak için ihtiyacınız olan tek şey doğru yazılım araçlarına sahip olmak olmasa da bazı araçlar gereklidir. Önemli bir araç sürekli entegrasyon ve sürekli dağıtımdır (CI/CD). Bu işlem hattında ortamların farklı aşamaları vardır (ör. DEV, INT, TST, QA, UAT, STG, PROD), birçok işlem otomatikleştirilir ve geliştiriciler yüksek kaliteli kod yazabilir, geliştirme çevikliği ve yüksek dağıtım oranları elde edebilir.
Bu makalede, açık kaynak araçları kullanılarak aşağıdaki diyagramda gösterilene benzer bir DevOps işlem hattı oluşturmaya yönelik beş adımlı bir yaklaşım açıklanmaktadır.
Adım 1: CI/CD Yöntemleri
İhtiyacınız olan ilk şey bir CI/CD aracıdır. Java tabanlı ve MIT lisansı altında lisanslanan açık kaynaklı bir araç olan Jenkins, DevOps'u popüler hale getiren ve fiili standart haline gelen araçtır.
Peki Jenkins nedir? Bunu, çeşitli hizmet ve araçlarla konuşabilen ve bunları organize edebilen bir tür sihirli evrensel uzaktan kumanda olarak düşünün. Jenkins gibi bir CI/CD aracı tek başına işe yaramaz ancak farklı araç ve hizmetlere bağlandıkça daha güçlü hale gelir.
Jenkins, DevOps işlem hattınızı oluşturmak için kullanabileceğiniz birçok açık kaynaklı CI/CD aracından yalnızca biridir.
Jenkins: Creative Commons ve MIT
Travis CI: MİT
Seyir Kontrolü:BSD
Yapı robotu: GPL
Apache Gump: Apache 2.0
Cabie: GNU
Bir CI/CD aracıyla DevOps süreçleri şu şekilde görünür:
Yerel ana makinenizde çalışan bir CI/CD aracınız var, ancak şu anda yapabileceğiniz pek bir şey yok. DevOps yolculuğunun bir sonraki aşamasına geçelim.
Adım 2: Kaynak Kontrol Sistemlerini Yönetin
CI/CD aracınızın büyüsünü gerçekleştirebildiğini doğrulamanın en iyi (ve belki de en kolay) yolu, bir kaynak kodu kontrol (SCM) aracıyla entegre olmaktır. Neden kaynak kontrolüne ihtiyacınız var? Diyelim ki bir uygulama geliştiriyorsunuz. Ne zaman bir uygulama yaratsanız, programlıyorsunuz ve Java, Python, C++, Go, Ruby, JavaScript veya milyonlarca programlama dilinden herhangi birini kullanmanız önemli değil. Yazdığınız koda kaynak kodu denir. Başlangıçta, özellikle de yalnız çalışırken, her şeyi yerel bir dizine koymak muhtemelen sorun olmaz. Ancak proje büyüdükçe ve diğer insanları işbirliği yapmaya davet ettikçe, değişiklikleri etkili bir şekilde paylaşırken çatışmaları önlemenin bir yoluna ihtiyacınız olur. Ayrıca önceki sürümleri geri yüklemenin bir yoluna da ihtiyacınız var çünkü yedek oluşturmak ve bunlara kopyalama/yapıştırmak artık geçerliliğini yitiriyor. Sizin (ve takım arkadaşlarınızın) daha iyi bir şeye ihtiyacınız var.
Kaynak kodu kontrolünün neredeyse bir zorunluluk haline geldiği yer burasıdır. Bu araç, kodunuzu depolarda saklar, sürümleri takip eder ve proje katılımcılarının çalışmalarını koordine eder.
Piyasada pek çok kaynak kontrol aracı olsa da Git standarttır ve haklı olarak öyledir. İsterseniz başka açık kaynak seçenekleri de olmasına rağmen Git'i kullanmanızı şiddetle tavsiye ederim.
Git: GPLv2 ve LGPL v2.1
Yıkım: Apache 2.0
Eşzamanlı Sürümler Sistemi (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+
Kaynak kodu kontrollerinin eklenmesiyle DevOps işlem hattı böyle görünür.
Bir CI/CD aracı inceleme, kaynak kodu edinme ve üyeler arasındaki işbirliği süreçlerini otomatikleştirebilir. Fena değil? Peki bunu milyarlarca insanın kullanabileceği ve takdir edebileceği şekilde çalışan bir uygulamaya nasıl dönüştürürsünüz?
3. Adım: Derleme Otomasyon Aracı Oluşturun
Harika! Kodu inceleyebilir, kaynak kontrolünde değişiklikler yapabilir ve arkadaşlarınızı geliştirme konusunda işbirliği yapmaya davet edebilirsiniz. Ancak henüz bir uygulama oluşturmadınız. Bir web uygulaması oluşturmak için, bunun dağıtılabilir bir toplu iş biçiminde derlenmesi ve paketlenmesi veya yürütülebilir bir dosya olarak çalıştırılması gerekir. (JavaScript veya PHP gibi yorumlanmış bir programlama dilinin derlenmesine gerek olmadığını unutmayın).
Bir yapı otomasyon aracı kullanın. Hangi derleme otomasyon aracını kullanmaya karar verirseniz verin, hepsinin amacı aynı: kaynak kodunu istenen formatta oluşturmak ve temizleme, derleme, test etme ve belirli bir ortama dağıtma görevini otomatikleştirmek. Derleme araçları programlama dilinize bağlı olarak değişecektir ancak burada bazı yaygın açık kaynak seçenekleri verilmiştir.
isim
Lisans
Programlama dili
Maven
Apache 2.0
Java
Karınca
Apache 2.0
Java
Gradle
Apache 2.0
Java
Bazel
Apache 2.0
Java
Yapmak
GNU
N / A
hırıltı
İLE
JavaScript
Yudum
İLE
JavaScript
inşaatçı
Apache
Yakut
tırmık
İLE
Yakut
AAP
GNU
Python
SCon'lar
İLE
Python
BitBake
GPLv2
Python
Kek
İLE
C#
ASDF
Yabancı (MIT)
LISP
komplo
BSD
Haskell
Harika! Yapı otomasyonu aracı yapılandırma dosyalarını kaynak kontrol sisteminize koyabilir ve CI/CD aracınızın her şeyi bir araya getirmesine izin verebilirsiniz.
Her şey yolunda, değil mi? Peki uygulamanızı nereye dağıtacaksınız?
Adım 4: Web Uygulama Sunucusu
Şimdilik, yürütülebilir veya kurulabilir olabilen paketlenmiş bir dosyanız var. Herhangi bir uygulamanın gerçekten yararlı olabilmesi için bir tür hizmet veya arayüz sağlaması gerekir, ancak uygulamanızı barındıracak bir konteynere de ihtiyacınız vardır.
Bir web uygulaması sunucusu tam da böyle bir kaptır. Sunucu, konuşlandırılan paketin mantığının tanımlanabileceği bir ortam sağlar. Sunucu ayrıca bir arayüz sağlar ve soketleri dış dünyaya açarak web hizmetleri sunar. Yüklemek için bir HTTP sunucusunun yanı sıra bazı ortamlara (sanal makine gibi) ihtiyacınız vardır. Şimdilik bu konuda daha fazla bilgi edineceğinizi varsayalım (gerçi aşağıda kapsayıcıları ele alacağım).
Birkaç açık kaynaklı web uygulama sunucusu vardır.
isim
Lisans
Programlama dili
erkek kedi
Apache 2.0
Java
rıhtım
Apache 2.0
Java
Vahşi Sinek
GNU Daha Az Kamu
Java
CamBalık
CDDL ve GNU Daha Az Herkese Açık
Java
Django
3 Maddeli BSD
Python
Kasırga
Apache 2.0
Python
gunicorn
İLE
Python
Python
İLE
Python
Raylar
İLE
Yakut
node.js
İLE
Javascript
DevOps işlem hattınız neredeyse kullanıma hazır. Aferin!
Burada durup entegrasyonu kendiniz halledebilirsiniz ancak kod kalitesi, bir uygulama geliştiricisinin endişelenmesi gereken önemli bir şeydir.
Adım 5: Kod Testi Kapsamı
Testlerin uygulanması başka bir külfetli gereklilik olabilir, ancak geliştiricilerin uygulamadaki hataları erkenden tespit etmesi ve son kullanıcıların memnun olmasını sağlamak için kodun kalitesini iyileştirmesi gerekir. Neyse ki kodunuzu test etmek ve kalitesini artırmaya yönelik önerilerde bulunmak için birçok açık kaynak araç var. Daha da iyisi, çoğu CI/CD aracının bu araçlara bağlanabilmesi ve süreci otomatikleştirebilmesidir.
Kod testi iki bölümden oluşur: testleri yazmanıza ve çalıştırmanıza yardımcı olan kod testi çerçeveleri ve kodunuzun kalitesini artırmanıza yardımcı olan öneri araçları.
Kod test sistemleri
isim
Lisans
Programlama dili
JUnit
Eclipse Kamu Lisansı
Java
KolayMock
Apache
Java
Mockito
İLE
Java
Güç Mock'u
Apache 2.0
Java
Pytest
İLE
Python
Hipotez
mozilla
Python
Toksikoloji
İLE
Python
Kod iyileştirme için öneri sistemleri
isim
Lisans
Programlama dili
Kapsam
GNU
Java
kod kapağı
Eclipse Public (EPL)
Java
Kapsama.py
Apache 2.0
Python
Emma
Ortak Kamu Lisansı
Java
JaCoCo
Eclipse Kamu Lisansı
Java
Hipotez
mozilla
Python
Toksikoloji
İLE
Python
Yasemin
İLE
JavaScript
Karma
İLE
JavaScript
koyun derisi
İLE
JavaScript
var
İLE
JavaScript
Yukarıda bahsedilen araçların ve çerçevelerin çoğunun Java, Python ve JavaScript için yazıldığını unutmayın, çünkü C++ ve C# özel programlama dilleridir (GCC açık kaynak olmasına rağmen).
Artık test kapsamı araçlarını uyguladığınıza göre DevOps işlem hattınız bu eğitimin başında gösterilen şemaya benzer görünmelidir.
Ek adımlar
Konteynerler
Söylediğim gibi sunucunuzu sanal makine veya sunucu üzerinde barındırabilirsiniz ancak konteynerler popüler bir çözümdür.
Konteynerler nelerdir? Kısa açıklama, bir sanal makinenin, uygulamanın boyutunu aşan büyük miktarda işletim sistemi belleğine ihtiyaç duyması, bir konteynerin ise uygulamayı çalıştırmak için yalnızca birkaç kitaplığa ve yapılandırmaya ihtiyaç duymasıdır. Açıkçası, bir sanal makinenin hala önemli kullanım alanları vardır, ancak konteyner, bir uygulama sunucusu da dahil olmak üzere bir uygulamayı barındırmak için hafif bir çözümdür.
Başka konteyner seçenekleri olsa da en popülerleri Docker ve Kubernetes'tir.
Liman işçisi: Apache 2.0
Kubernet'ler: Apache 2.0
Ara otomasyon araçları
DevOps hattımız öncelikli olarak işbirliğine dayalı uygulama oluşturma ve dağıtımına odaklanmıştır ancak DevOps araçlarıyla yapılabilecek başka birçok şey vardır. Bunlardan biri, ara yazılım otomasyon araçları olarak da bilinen Kod Olarak Altyapı (IaC) araçlarının kullanılmasıdır. Bu araçlar, ara yazılımlara yönelik kurulum, yönetim ve diğer görevlerin otomatikleştirilmesine yardımcı olur. Örneğin bir otomasyon aracı, bir web uygulama sunucusu, bir veritabanı ve bir izleme aracı gibi uygulamaları doğru konfigürasyonlarla çıkarabilir ve bunları uygulama sunucusuna dağıtabilir.
İşte bazı açık kaynaklı ara yazılım otomasyon araçları:
Yanıtlayıcı: GNU Kamu
SaltStack: Apache 2.0
Şef: Apache 2.0
Kukla: Apache veya GPL
SkillFactory'den ücretli çevrimiçi kurslar alarak aranan bir mesleğe sıfırdan nasıl sahip olabileceğiniz veya beceri ve maaş açısından Seviye Atlamanın ayrıntılarını öğrenin: