DevOps, yazılımın geliştirilmesinden sorumlu takım(Dev) ile yazılımın işletmesinden sorumlu takım(Ops) arasındaki işbirliğini arttırmak amaçlı ortaya çıkan bir akımdır.
DevOps yaklaşımı ile “Yazılım Yaşam Döngüsü” otomasyona bağlanarak, yazılım ve sistem takımları arasındaki anlık bağımlılıkları yok etmek ve yazılımcıları operasyonel işlerden arındırarak, üstüne mühendislik pratiklerinin de uygulanması ile yüksek kalitede, daha sık ve daha sorunsuz canlı ortam çıkışlarının sağlaması mümkündür.
DevOps sayesinde şirketlerin mevcuttaki, hataya açık olan manuel “Yazılım Yaşam Döngüsü” süreçlerini otomasyona bağlayarak marketteki değişimlere daha hızlı yanıt vermeleri mümkündür. Bunun yanında şirketlerin kendi bünyelerindeki veya Cloud (bulut) üzerindeki mevcut altyapılarını daha verimli yönetmelerine olanak sağlayarak tasarruf etmelerini sağlar. Diğer bir değişle, bir şirketin günümüz rekabet koşullarında ayakta kalabilmesi için DevOps pratiklerinin uygulaması kaçınılmazdır.
Bu değişimi destekleyecek doğru araçlar ile riskler minimize edilerek, kaynakların “self-service” yaklaşımı ile yönetilmesi mümkündür. Bunların yanında, doğru mühendislik pratiklerinin de uygulanması ile artan kalite sayesinde, hata (bug) tespiti en erken zamanda yapılarak, yazılımcılara bu hataların sıcağı sıcağına düzeltilmesine olanak sağlar.
DevOps nedir, ne değildir?
DevOps sayesinde:
Scrum ve Kanban gibi Agile (çevik) Yazılım Geliştirme yaklaşımlarını benimseyen takımların DevOps pratiklerini uygulayarak, uçtan uca çeviklik sağlamaları mümkündür. Bu pratikleri uygulamayan takımlarda alttaki semptomlar gözlemlenebilir:
Günümüzdeki Cloud (Bulut) teknolojilerinde gelinen son noktadaki, PaaS-SaaS, avantajlar kullanılarak, bir yazılım takımının, sorumlusu olduğu yazılımın uçtan uca tüm sorumluluğunu alması da başarılı bir pratiktir. Özellikle Micro-Services mimarisi ile yazılımın non-monolithic şekillendirilmesi ile, uçtan uca sorumluluğun da önü açılmaktadır.
“Yazılım Yaşam Döngüsü” birçok disiplini içinde barındırarak, bir fikrin yazılıma dönüşümü sürecini tanımlar.
Continuous Integration: Farklı kişilerin aynı yazılım üzerinde yaptıkları geliştirmelerin yüksek sıklıkta, tercihen günlük, entegre edilmesidir. Yapılan değişikliklerin entegre olması demek, birim testlerden geçmesi ve “build” sürecinin işletilmesi ile olası hataların en erken şekilde tespit edilmesi anlamına gelmektedir.
Continuous Delivery: Continuous Integration sürecini başarılı tamamlamış her değişikliğin, gerçek bir “release” olduğunun doğrulanmasıdır. Bunu yapmak için “Continuous Integration” ın çıktısı olan “artifact” ın, tercihen otomatik, kabul ve performans testlerinden geçirilmesi ve test veya “prod-like” bir ortama “release” edilmesidir.
DevOps is the organizational mindset that enables Continuous Delivery.
–Jez Humble
Continuous Deployment: Continuous Delivery sürecini başarı ile tamamlamış her değişikliğin canlı ortama otomatik olarak “deploy” edilmesidir.