Devops Kültürü Nedir?

Devops, yazılım geliştirme (dev) ve bilişim teknolojileri operasyonlarını (ops) birleştiren iyi pratikler kümesidir. Yıllar boyunca olması gerektiği şekilde, yeni teknoloji ve keşfedilen iyi pratiklerle kendini güncelleyerek buralara gelmiştir. Agile Prensipleri etrafında, Agile prensiplerini uygulamaya dönüştürmek için ortaya çıkmıştır. Bir kuruluşun uygulamaları ve hizmetleri yüksek hızda sunma yeteneğini artıran kültürel felsefelerin, uygulamaların ve araçların birleşimidir.
Yazılım Geliştirmenin Ana Hedefi, ürünü/hizmeti kullanıcıya ulaştırmaktır.Yazılım geliştirme bir süreçtir. Yönetilmesi gerekir. Maliyetleri vardır. Ürünün finansmanını sağlayan müşterinin hedefleri ise, ürünün işlevselliği dışında
-
**Yazılımı daha kısa zamanda müşteriye sunmak yapmak ve ihtiyaca göre gerektiğinde daha hızlı güncellemek,
-
Süreçleri daha ucuza mâl etmektir.
Yazılım projelerinde 2 zorunlu insan kaynağı vardır.
- Geliştiriciler: Kodu yazarlar, test ederler ve kodta sorunları bulup giderirler.
- Operasyoncular: Sistem ve veritabanı yöneticileri vb. bu gruba girmektedir. Yazılımın çalışacağı altyapıyı kurarlar ve ayakta tutarlar. Yazılımı ortama yüklerler ve ortamın ihtiyaçlarını denetlerler.
Yazılım projelerinde kullanılan diğer insan girdileri zorunlu değil, destekleyicidir.
**Agile (Çevik) Yazılım Geliştirme Nedir?
Kendinden önceki mühendislik modellerinden ayrışarak, yazılım geliştirmenin diğer mühendislik alanlarından farklılığını öne çıkaran bir yazılım geliştirme pratikleri modelidir. 2001 Yayınlanan bir bildiri (Agile Manifesto) ile bu kavram ve kavramın prensipleri sloganlaştırılmıştır. Bildiri ile daha iyi yazılım geliştirme yollarını uygulayarak ve başkalarının da uygulamasına yardım ederek ortaya çıkarttıklarını beyan etmişlerdir.
Ortaya çıkan bildirge şöyledir.
Agile Manifesto (Çevik Bildiri)
Önemli | Daha Öncelikli |
---|---|
Süreçler ve araçlar | Bireyler ve etkileşimler |
Kapsamlı dökümantasyon | Çalışan yazılım |
Müşteri ile sözleşme | Müşteri ile işbirliği |
Bir plana bağlı kalmak | Değişime karşılık vermek |
Yukarıdaki bildirinin destekleyicisi olarak 12 adet prensip ortaya koymuşlardır.
Çevik Yazılım Geliştirmenin 12 İlkesi
- Zamanında ve devamlı ürün teslimi yapılarak müşteri memnuniyeti sağlanır.
- Projenin değişen gerekliliklerine adapte olunmalıdır. Çeviklik, değişimi kucaklar ve bunu rekabet amacı için kullanır.
- Proje ya da ürün haftalık ya da aylık periyotlarla (sprint: hızlı koşu) gerçekleşen tekrarlarla geliştirilir.
- Proje üzerinde çalışan ekip, proje boyunca her gün bir araya gelmelidir.
- Projenin motive olmuş bireylerden oluşan bir ekiple geliştirilmesi gerekir. Ekibe ihtiyacı olan çevre ve desteğin sağlanması, işi bitireceklerine güvenin gösterilmesi gerekir.
- Detaylı yazışmalardan ziyade, yüz yüze bilgi akışı her zaman daha değerlidir.
- Çalışan yazılım ilerlemenin en öncelikli ölçüsüdür. Planlamalar, çalışan bir yazılım ortaya koymadığınız takdirde hiç bir anlam ifade etmez. Müşterinin derdini çözmediğiniz sürece bunlar boşa giden para ve gereksiz havalı eylemler olarak adlandırılır.
- Çevik yöntemler, sürdürülebilir geliştirmeyi teşvik etmelidir. Projenin kaynak sağlayıcıları, yazılımcılar ve kullanıcılar sabit tempoyu sürdürülebilir hale getirmelidir.
- Teknik mükemmeliyet ve iyi tasarım konusundaki sürekli özen, çevikliği artırır.
- Sadelik yani, yapılmasına gerek olmayan işlerin mümkün olduğunca arttırılması sanatı, olmazsa olmazlardandır.
- En iyi ürün, kendi kendini organize eden takımlar tarafından ortaya çıkarılır.
- Düzenli aralıklarla, proje ekibi birbirlerine nasıl daha verimli olabilecekleri hakkında geri bildirimlerde bulunurlar ve buna göre hareket edilir.
Devops gereksinimi ve faydaları
Devops bir iyi pratikler kümesidir.
İten ve hızlandıran nedenler
- Daha hızlı sürüm çıkma gereksinimi
- Sanallaştırma ve bulut sistemlerinin gelişmesi
- Agile ve Lean metotlarının gelişmesi, tekrar edilebilir, yaygınlaştırılabilir iyi pratiklerin gelişmesine neden olmuştur.
- Veri merkezi otomasyonu ve yapılandırma yönetimi araçlarının ve bu donanım ve yazılımların sağlamlık ve tutarlılığının artması
- Açık kaynak yazılım geliştirmenin artmasıyla, uzmanlığa daha kolay erişilebilir olmuştur.
“Devops araçlarla ilgili değil değişimle ve ilişkilerle ilgilidir.”
Devopsu bir iş olarak değil, yazılım geliştirme sürecindeki tüm ekibin dahil olması gereken, bir prensipler ağı, iyi pratiklerin kullanımı ve çalışma kültürü olarak düşünmek gerekir.İlerleme boyunca birçok başka model ve yöntemle iç içe girmiş ve gelişmiştir.
Devops değerleri
- Operasyon ekiplerine yazılım geliştirme süreçlerinde birinci sınıf vatandaş olarak davranılmalıdır.
- Geliştirme ekibi tüm süreçte daha sorumlu hale getirilmeli ve sorumluluk ortaklaştırılmalıdır.
- Uygulamaların canlı ortama hızlı gönderilmesi için Sürekli Fağıtım yöntemlerini kullanılmalıdır.
- Uygulama kodu ile aynı yöntemler kullanarak altyapı kodu geliştirilmelidir. Bu daha sonra gitops kavramıyla tarif edilir hale gelmiştir.
- İletişim kültürü ve yöntemleri, geliştirici ile operasyon arasındaki iletişim engellerini kaldırmaya ve iletişimi takım içi iletişime dönüştürmeye çalışmalıdır.
- Sorun çözümü, suç üretmeden, operasyon ekipleri de dahil, tüm takım üyelerinin tam sorumlulukla gerçekleştirilmelidir.
- Yalın ölçüm yöntemleriyle kullanıcıya ürünün ulaştırılmasında gerekli olanlar ölçülmelidir.
- Sürecin kendisine değil nihai ürüne odaklanmak gereklidir.
- Başarısızlıkları bir öğrenme fırsatı olarak görmek gereklidir.
- Mümkün olduğu kadar otomasyon oluşturmak gereklidir ve bu otomasyonun da geliştirilmesi gerekmektedir.
- Herşey kaynak kontrolde olmalı ve insanların tüm bildikleri yazılı olmalıdır.
-
Ekipler büyük olmamalı ve küçük gruplar/takımlar olarak kalınmalıdır.
- Tek zamanda yapılan işler sınırlanmalı ve hızlı ve sık, az miktarda dağıtım gerçekleştirilmelidir. Her bir kaynak kodu commiti sadece bir işi gerçekleştirmelidir. Trunk tabanlı geliştirme kullanmalıdır.
Sonuçlar ve Avantajlar
- Hız
- Devops kültürü sizin yüksek bir hızda hareket etmenizi sağlayarak, müşterilerinize için daha hızlı yenilik götürmenizi sağlar. Müşteriyi değişen pazarlara daha uyumlu hale getirerek, hedeflerine ulaşmada daha verimli yapar.
- İhtiyaç ortaya çıktıktan sonra, gerçekleştirmeye daha kısa süreli ulaşmamızı sağlar.
- Daha iyi kalite
- Sorunlara hızlı cevap verme, yazılımın kalitesini doğrudan artıracaktır.
- Artan organizasyonel etkinlik
- Sahiplenme ve sorumluluk gibi değerleri vurgulayarak, daha etkili ekiplerin oluşmasını sağlar. Birçok sorumluluğu ortak olarak üstlenirler ve iş akışlarını birleştirirler. Bu sayede verimsizlikler azalır ve zaman tasarrufu sağlanır.
- Yazılımda Güvenilirlik ve sağlamlık
- Uygulama güncellemelerinin ve altyapı değişikliklerinin kalitesinden emin olarak yazılım teslimatı gerçekleştirilebilir. Bu da, son kullanıcı deneyiminin olumlu kalmasını ve yükselmesini sağlar. Burada, Sürekli entegrasyon ve sürekli teslim gibi pratikleri aracılığıyla her değişikliğin işlevsel ve güvenli olup olmadığını test ederiz. İzleme ve log tutma ile, ürünün performansı, gerçek zamanlı olarak takip edilebilir.
- Güvenlik
- Sürekli entegrasyon ve sürekli teslim pratikleriyle denetim, uygunluk politikaları otomasyon sürecinde her zaman dahil edilebilir. (Policy as a Code)
- Mikroservisler
- Devops yöntemleriyle, yüksek ölçekli, karmaşık yazılım geliştirmelerini mikroservisler gibi modelleri kullanarak gerçekleştirebilirsiniz.
Devops kültürü nasıl benimsenir?
DevOps’a geçiş için hem kültür hem de anlayışın değişmesi gereklidir. Devops kültürüne ilk adım, geliştirici ve operasyon ekiplerinin birlikte çalışabilecekleri ve iletişimlerini aracısız yapabilecekleri ortamın oluşturulmasıdır. Roller ve ünvanların ötesine geçerek, müşterinin ihtiyaçlarının çözümüne odaklanmak ve tüm kurgunun bunun üzerine kurulması gerekmektedir ve devam eden süreçte, kalite ve güvenlik ekiplerinin bu ekiplere dahil olması, birlikte çalışılabilirliğin artırılması gerekmektedir. En nihayetinde Geliştirme ve altyapı yaşam döngüsünün tamamı devops ekibinin sorumluluğu kapsamına alınmalıdır ve ekipler öyle davranmalıdır.
- Devops Ekibi: Hızla değişen, güvenli, esnek sistemleri ölçekte inşa etme, geliştirme ve işletme çalışmasına adanmış çapraz fonksiyonel ekiplerden oluşan topluluk
- Bir DevOps ekibi güvenliği de sürecin bir parçası yaptıysa buna bazen DevSecOps denir.
- Dev ve Ops arasında iletişimin her zaman açık olması gerekmektedir.
- Dev ve Ops arasında ortak çalışma ve kaynak paylaşımınında sağlıklı olması gerekmektedir.
- Sistem Düşüncesi: Silolar yerine tüm sistemin nasıl çalıştığına bakmak (geliştirme ekipleri, BT operasyon ekibi, vb.)
Sistemler geliştirin, yazılım değil (Ben Butler-Cole)
- Geribildirim döngülerini güçlendirin
- Sürekli deney ve öğrenmenin kültürünü oluşturun
Yöntemler ve Araçlar
Yöntemler
Sürekli entegrasyon (CI)
- Geliştiricilerin kod değişikliklerini sürekli master dalıda güncel tutması prensibinden yola çıkar.
- Master dalından ayrılan uzun süre bağımsız ilerleyen yan dallardan kaçınmak gerekir.
- Planla -> Geliştir -> Derle -> Test et döngüsünü sürekli işletir. Kodu sürekli çalışabilir konumda kalmasını garanti eder.
Sürekli teslimat(CD)
- Sürekli entegrasyon süreçlerinin sonuçlarını almaya ve canlı ortama koymaya odaklanır.
CI/CD süreçlerinin her aşamasında, sonuçları kullanmak, sonuçlardan sistemi iyileştirmeye çalışmak tüm sürecin sağlığı için gereklidir.
Kod olarak altyapı (Infrastructure as Code)
- Geliştirme, test ve canlı ortamların ön tanımlı olarak bir yapılandırma (dosyalar) olarak saklanması ve sürümlendirilmesini sağlar.
- Altyapı, gerektiği durumda, otomatik süreçlerle tekrar oluşturulabilir hale gelir.
CI/CD’nin İlkeleri
- Tek bir kaynak deponuz olsun: Kodu dağıtmayın, ayrışma olmasına izin vermeyin.
- Yapıyı otomatikleştirin, süreçlere en az düzeyde insan müdahalesi olacak şekilde çalışsın.
- Otomatikleştirmeye, testlerinizi de ekleyin. Derleme sürecinde testlerini de gerçekleşsin.
- Sık aralıklarla derleyin.
- Kodunuzu canlı ortamın tam bir kopyasında test edin.
- Herkesin en son sürüme hızlıca erişmesini kolaylaştırın. Sorun olan kodu hızlıca düzeltin.
- Tüm uygulama kurulumlarını otomatikleştirin.
İzleme
- Sisteme yardımcı loglama sistemi oluşturmak gerekir. Log kayıtlarına geliştirme, test ve canlı ortamlarda kesinlikle erişilmesi gerekmektedir.
- Problem çözmeye rehberlik etmek için izlemede aldığınız ölçümleri kullanın. Hız, yük miktarı vb.
- Günlük çalışmanın bir parçası olarak canlı ortamdaki metriklerinin oluşturulmasını ve bunların Tüm Devops ekibi tarafından her zaman erişilebilir olmasını sağlayın.
- İzlemede eksik olabilir. Sonradan izleme gereksinimleri ortaya çıkabilir. Bunları bulun ve ekleyin.
- Tüm sistemin baştan başa ölçümleri elinizde olsun. Dağıtık izlemenin de sisteme eklenmesi gerekmektedir.
- İzlemede ortaya çıkan sıradışı durumları ekibe haber verecek bir uyarı sistemi kurun. Eposta, hızlı mesajlaşma aracına gönderim, sms vb.
- Aldığınız bu ölçümleri yazılımınızı daha güvenli hale getirmek için de kullanın.
Sürekli Gelişme
Kaynaklar
- https://agilemanifesto.org/iso/tr/manifesto.html (2001)
- https://www.designveloper.com/blog/12-agile-principles/
- https://blog.logrocket.com/product-management/12-agile-manifesto-principles-how-to-adopt-them/
- https://aws.amazon.com/devops/what-is-devops/
- https://www.slideshare.net/arunmurughan/devops-culture-105343557
- https://www.blameless.com/sre/what-are-blameless-postmortems-do-they-work-how
- https://www.slideshare.net/CodeOps/devops-fundamentals-a-perspective-on-devops-culture
- https://www.slideshare.net/sgganesh/devops-a-gentle-introduction?next_slideshow=true
- https://www.infoq.com/news/2015/07/arrow-kanban-board/
- https://www.appknox.com/blog/history-of-devops