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.

Başlangıç ​​Kılavuzu: DevOps Ardışık Düzeni Oluşturma

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:

Başlangıç ​​Kılavuzu: DevOps Ardışık Düzeni Oluşturma

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.

Başlangıç ​​Kılavuzu: DevOps Ardışık Düzeni Oluşturma

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.

Başlangıç ​​Kılavuzu: DevOps Ardışık Düzeni Oluşturma

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!

Başlangıç ​​Kılavuzu: DevOps Ardışık Düzeni Oluşturma

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

Başlangıç ​​Kılavuzu: DevOps Ardışık Düzeni Oluşturma

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:

daha fazla kurs

yararlı

Kaynak: habr.com

Yorum ekle