DevOps, geliştirme ve operasyon olarak ayrı ele alınan iki kavramın birleşimidir. Bir kurumun uygulama geliştirme ve IT Operasyon ekipleri tarafından gerçekleştirilen görevlere işbirlikçi ya da paylaşımlı bir yaklaşımı ifade eder.

DevOps’un temel amacı kullanıcıları, ürünleri birbirine bağlamaya yönelik olduğu açıktır. DevOps, ayrıca IT departmanını işletmeye bağlamaya yöneliktir diyebiliriz.

DevOps, geliştiriciler ve sistem yöneticileri arasında güven ve uyum oluşturmak ve teknolojik projeleri iş gereksinimlerine uygun hale getirmek gibi kültür değişikliklerini de kapsar. Yazılım teslim zincirini, hizmetleri, iş rollerini, BT araçlarını ve en iyi uygulamaları değiştirebilir.

 

DevOps Nasıl Çalışır?

 

DevOps

 

Yazılımı beklentilere uygun hale getirmek için, geliştiriciler ve yazılımı teslim alacaklar proje hakkında iletişim kurar ve geliştiriciler, birbirinden bağımsız olarak yayına giren küçük güncellemeler üzerinde çalışır.

Bekleme sürelerinden kaçınmak için IT ekipleri, kodu bir geliştirme ve dağıtım adımından diğerine taşımak için CI/CD ardışık düzenlerini ve diğer otomasyonları kullanır. Ekipler değişiklikleri hemen inceler ve yayınların standartları karşılamasını sağlamak için ilgili ilkeleri uygulayabilir.

Hızlı bir şekilde yazılım yazmak kolaydır; doğru çalışan bir yazılım yazmak ise bambaşka bir hikaye. İyi yazılımı üretime dağıtmak için DevOps taraftarları, yazılımın geliştirmeden teste ve üretime kadar aynı şekilde davranmasını sağlamak için kapsayıcıları veya diğer yöntemleri kullanır. Sorunların izlenebilir olması için değişiklikleri ayrı ayrı dağıtırlar. Ekipler, tutarlı dağıtım ve barındırma ortamları için yapılandırma yönetimine güvenir. Canlı operasyonlarda keşfettikleri sorunlar, sürekli geri bildirim kanalları aracılığıyla kod iyileştirmelerine yol açar.

DevOps ekipleri, süreçleri otomatikleştirmek ve hızlandırmak için araçlar kullanır ve bu da güvenilirliği artırmaya yardımcı olur. Bir DevOps araç zinciri, ekiplerin sürekli entegrasyon, sürekli teslim, otomasyon ve işbirliği gibi önemli DevOps temellerini ele almasına yardımcı olur.

 

DevOps ve Sorunların Çözümü

Her şirketin farklı bir problemi olabilir. Ancak, yaygın problemler arasında çok uzun süren yayınlanacak sürümler, beklentileri karşılamayan yazılımlar ve iş büyümesini sınırlayan IT yer alır. Bekleme süreleri, manuel süreçler ve uzun incelemeler olmadan bir DevOps projesi gereksinimlerden canlı yazılıma daha hızlı geçer. Daha kısa çevrim süreleri, gereksinimlerin değişmesini önleyerek ürünün müşterilerin istediğini sunmasını sağlayabilir.

DevOps, IT uzmanları arasındaki iletişim ve diğer sorunlarını çözer. Uygulanabilir bir yazılım oluşturmak için geliştirme ekiplerinin üretim ortamını anlamaları ve kodlarını gerçekçi koşullarda test etmeleri gerekir. Geleneksel bir yapı, geliştirme ve operasyon ekiplerini silolara yerleştirir. Bu, geliştiricilerin kodları işlevsellik sağladığında tatmin oldukları anlamına gelir ve sürüm üretimde bozulursa, sorunları çözmek operasyon ekibine kalır.

 

DevOps ve Agile & Waterfall Geliştirme

DevOps, Agile yazılım geliştirme ile ilişkilidir. Çünkü Agile metotları, metodolojiyi üretime genişletmenin bir yolu olarak DevOps’u destekler. Şirketler, stratejilerini belirlemek için DevOps, Agile ve Waterfall Yazılım geliştirme, SRE ve SysOps ile ilgili bağlamları, bunlara ek DevOps içindeki varyasyonları anlamalıdır.

 
DevOps ve Waterfall Yazılım Geliştirme

Waterfall yazılım geliştirme, üretime doğru doğrusal bir ilerlemede bir dizi adım ve kapıdan oluşur. Aşamaları gereksinimler, analiz, tasarım, kodlama ve uygulama, test, çalıştırma ve dağıtım ve bakımdır. Waterfall ekiplerinde geliştirme, kalite güvencesi (QA) için yalıtılmış bir ortamda yeni kodu test eder ve – gereksinimler karşılanırsa, ilgili kodu üretimde kullanılmak üzere operasyonlara serbest bırakır. IT operasyonları, kapsamlı kontrollerle aynı anda birden çok yayın dağıtır. Destek operasyonların sorumluluğundadır. Şelale yaklaşımları, yazılım sürümleri arasında uzun beklemelere neden olur. Geliştirme ve operasyon ekipleri ayrı çalıştığı için geliştiriciler, kodun beklendiği gibi çalışmasını engelleyen operasyonel engellerin her zaman farkında değildir.

DevOps modeli ise, geliştirme, kalite güvencesi ve IT operasyonları çabalarını daha az kapı ve daha sürekli iş akışıyla uyumlu hale getirir. Örneğin, operasyon ekibi sorumluluklarından bazıları uygulama teslim hattında sola, daha doğrusu geliştirme ekibine kaydırılır. IT operasyonları, kod iyileştirmeleri için geri bildirim sağlar. Kapılı adımlardan ziyade DevOps, sürekli geliştirme, sürekli entegrasyon, sürekli teslimat ve sürekli izleme süreçlerine güvenir.

 

DevOps ve Agile Geliştirme

Agile, Türkçe karşılığı ile çevik, Agile Manifesto’da tanımlanan bir yazılım geliştirme yaklaşımıdır. Çevik ekipler, sprintler olarak adlandırılan artımlı ve hızlı kod oluşturma ve teslim döngülerine odaklanır . Her sprint bir öncekini yineler, bu da yazılımı son derece esnek ve değişen gereksinimlere uyarlanabilir hale getirir. Bir projenin orijinal vizyonunun bu döngüde kaybolması mümkündür.

DevOps, Agile’ın geliştirme hızını artırmadaki başarısından doğdu ve geliştirme ve operasyon ekipleri ile IT ile kuruluşun iş tarafı arasındaki kopuklukların farkına varılması, Agile yazılımının kullanıcılara sunulmasını önemli ölçüde engellemiş olur. Yalnızca Çevik bir iş akışında, geliştirme ve operasyon ekiplerinin ayrı hedefleri ve liderliği vardır. Bir kuruluş DevOps ve Agile’ı birlikte kullandığında, hem geliştirme hem de operasyon ekipleri yazılım geliştirme yaşam döngüsü boyunca kodu yönetir. Çevik çalışma genellikle Scrum gibi bir çerçeve ile resmileştirilirken, DevOps’un bir çerçevesi yoktur.

 

DevOps ve SRE

Site güvenilirliği mühendisliği, Agile ve DevOps ile eşzamanlı olarak ortaya çıktı. Google’da 2000’lerin başında başlayan bu, esasen yazılım geliştirme yaşam döngüsüne yönelik programlama ve otomasyon odaklı bir yaklaşımdır. Sorunlar bir daha oluşmasını engelleyecek şekilde çözülmelidir. Ezberci görevler en aza indirilmelidir .SRE araç kutusu, DevOps ile yakından eşleşir. Her iki disiplin de sürekli gelişmeyi amaçlar. SRE ve DevOps mühendisleri , geliştirme ve operasyonlar arasındaki siloları ortadan kaldırmaya çalışıyor. DevOps iş paydaşlarını da kapsayacak şekilde genişleyebilirken, SRE genellikle BT süreçlerinin sınırları içinde kalır. 

 

DevOps ve SysOps

SysOps, tipik olarak bir IT yöneticisinin veya IT ekibinin, bir SaaS ürünü gibi büyük bir dağıtılmış uygulama için üretim dağıtımını ve desteğini yönettiğini belirtir. DevOps’u benimseyenlerde olduğu gibi, SysOps ekipleri de bulut bilgi işlem ve otomasyonun yanı sıra uygulamaların büyük ölçekte iyi performans göstermesini sağlayan diğer teknolojiler konusunda bilgili olmalıdır. SysOps ekipleri IT kesintilerini ve olaylarını giderir, performans sorunlarını izler, güvenlik kurallarını uygular ve operasyonları optimize eder.

Ayrıca diğer IT yöneticileri gibi yüksek kullanılabilirlik, hata toleransı, güvenlik ve performansa odaklanırlar. SysOps profesyonellerinin bazı geliştirme araçlarını kullanmaları ve geliştirme süreçlerini anlamaları muhtemel olsa da, çalışmaları DevOps işindeki kadar geliştirme ile iç içe değildir. Ancak, SysOps rolleri DevOps ve SRE kuruluşları içinde bulunabilir.

 

CI/CD Nedir?

 

cicd

 

Uygulamaları bulutta verimli bir şekilde çalıştırmak için yazılımların hızlı bir şekilde sunulması gerekir. Sürekli Entegrasyon (CI) yeni yazılımların tek bir kod satırı kullanılarak sık sık bir şekilde birleştirilmesini ifade eder. Sürekli teslimat, sık döngülerde paketlenen yazılımın kod dışında üretimini ifade etmektedir. Benzer şekilde, sürekli dağıtım ise paketlenmiş yazılımın periyodik döngülerle bir çalıştırma zamanı platformuna dağıtımını ifade eder. CI/CD tabanlı bu süreç, geliştiricileri, kalite güvence mühendislerini hatta operasyon yöneticilerini tek bir platformda bir araya getiren DevOps’u içerir.

 

Sürekli Entegrasyon (CI)

Sürekli Entegrasyon (CI), geliştirme ekipleri tarafından kodu otomatikleştirmek, birleştirmek ve test etmek için kullanılan uygulamadır. CI, hataların geliştirme döngüsünün erken aşamalarında yakalanmasına yardımcı olur ve bu da hataların düzeltilmesini daha ucuz hale getirir. Kaliteyi sağlamak için CI sürecinin bir parçası olarak otomatik testler yürütülür. CI sistemleri yapıtlar üretir ve bunları, sık dağıtımları yürütmek için süreçleri serbest bırakmak üzere besler.

Sürekli Entegrasyon ardışık düzeninde genellikle kod taahhüdünden temel otomatik linting işlemi/statik analiz gerçekleştirmeye, bağımlılıkları yakalamaya ve son olarak da yazılımı derleyip bir derleme oluşumu oluşturmadan önce bazı temel birim testleri yapmaya kadar bir dizi adım yer alır. Github, Gitlab gibi kaynak kodu yönetim sistemleri, Jenkins gibi CI araçlarının her kod girişinden sonra otomatik derlemeleri ve testleri çalıştırmaya başlamak için abone olabileceği web kancası entegrasyonu sunar.

 

Sürekli Teslimat (CD)

Sürekli Teslimat (CD), kodun oluşturulduğu, test edildiği ve bir veya daha fazla test ve üretim ortamına dağıtıldığı bir süreçtir. Birden çok ortamda devreye alma ve test etme kaliteyi artırır. CD sistemleri, altyapı ve uygulamalar da dahil olmak üzere konuşlandırılabilir eserler üretir. Otomatik yayınlama süreçleri, mevcut sistemlere yeni sürümler ve düzeltmeler yayınlamak için bu yapıtları kullanır. Uyarıları izleyen ve gönderen sistemler, görünürlüğü tüm CD sürecine yönlendirmek için sürekli olarak çalışır.

 

DevOps’un Avantajları

Güvenlik: DevOps sayesinde güvenliği arttırmaya yönelik birkaç farklı katman mevcuttur. İşlevsel açıdan bakarsak, DevOps bazı durumlarda güvenlik ekiplerinin de entegrasyonunu içerir. Bu, zaman zaman DevSecOps adlı bir model olarak da ifade edilebilir. Bu model ile geliştirme ve operasyon ihtiyaçlarının yanı sıra güvenliği de eşit derece de dengeler. Daha ayrıntılı olarak, DevSecOps hız, yapay zeka otomatik uyumluluk ve otomatik kaynak yönetimi sayesinde desteklenen hızlı düzeltme eki uygulama, denetimler ve analizlere olanak sağlar.

Hız: DevOps agile yöntemiyle teknoloji ve yaşam döngüsünün ihtiyaçlarına göre optimize edilir. Birçok durumda, DevOps bu süreci hızlandırmak için yapay zeka çözümlerinden faydalanır. DevOps otomasyona sürekli entegrasyon ve sürekli teslimata vurgu yaparak personelin manuel görevler yerine yeniliğe de odaklanmasını sağlar. Mühendisler, geliştirme tarafında kodlara daha hızlı ulaşabilir veya daha etkili bir şekilde iş birliği içerisinde olabilirler. Sistem yöneticileri de operasyon tarafında yeni uygulamaları ve altyapıyı kolayca sağlayıp güncellemek için otomasyon çerçevelerinden yararlanabilir.

Kalite: DevOps’un hız avantajından bahsetmiştik. Bu hızlanma sayesinde yüksek kalite ve güvenilirlik de sağlar. Dolayısıyla, geliştirme tarafında problemleri çözme ve entegrasyona yönelik daha hızlı işbirliği ve daha iyi araçlarla ilerler. Operasyon tarafında, daha küçük ve daha sık güncellemeler daha yüksek istikrar sağlamaktadır. Sonuç olarak, kullanıcı tabanı için genel deneyim kalitesini arttırır diyebiliriz.

Ölçeklenebilirlik: Agile metotları, otomasyon ve yazılım geliştirme yaşam döngüsünün tamamını destekleme olanığı, altyapının gerektiğinde ölçeklendirmeyi de destekleyecek şekilde tasarlanması anlamına gelir. Ölçeklendirme, birçok farklı öğeyle ilişkili olduğundan teknolojinin bütünsel bir görünümü desteklemek, kaynak yönetiminden düzeltme eki yayınlamaya kadar tüm işelmleri yönetirken verimli bir şekilde ölçeklendirme yapmaya da yardımcı olur.

 

Jira, git, Docker, AWS, CHEF, JUnit, Maven, Splunk, Datadog bilinen bazı DevOps araçlarıdır. DevOps popüler hale geldikçe, kuruluşlar DevOps yaklaşımlarını resmileştirdi. Satıcılar, işbirliği sohbet robotlarından bulut hizmetlerinde yerleşik CI/CD paketlerine kadar araçlarda DevOps’u etkinleştiren yetenekleri lanse etti. Ülkemizde şuanda pek yaygın olmasa da, “DevOps Engineer” çok geçmeden bir iş unvanı olarak ortaya çıkmıştır.