DevOps Nedir?

Bu yazımızda DevOps ne demek sorusuna yanıt arayalım. Devops “Yazılım Geliştirme” yani(Dev) ve “Yazılım Operasyonu” yani(Ops) süreçlerini birleştirmeyi amaçlayan bir yazılım mühendisliği kültürü ve uygulamasıdır. DevOps hareketinin temel özelliği, entegrasyon, test, dağıtım ve altyapı yönetiminden, yazılım yapımının her aşamasında otomasyon ve izlemeyi güçlü bir şekilde savunmaktadır. DevOps, iş hedefleri ile yakın uyum içinde, daha kısa geliştirme döngüleri, artan dağıtım sıklığı ve daha güvenilir sürümler hedefler. Wikipedia’ya göre DevOps kavramı bu şekilde tanımlanmaktadır. Gelin bu tanımı biraz daha anlaşılır hale getirelim.

Önceden bir yazılımı ortaya koyup, bunu müşteriye CD gibi bir medyayla gönderip daha sonra da bu yazılımın müşteri tarafından yönetilmesini bekliyorduk. Fakat SaaS(Software as a Service) yaklaşımıyla birlikte bu yönetiminde yazılımı yazan firmaya geçtiğini söyleyebiliriz. Bu yeni düzende artık yazılım yaratma döngüsü şuna dönüştü:

Yine ilk olarak gereksinimleri topladıktan sonra dizaynı yapıp, ardından da kodu yazarak ortaya bir sürüm çıkartıyoruz. Daha sonra bu sürüm öncelikle test ortamına aktarılıyor ve hemen ardından eğer kod onaylanırsa bunun production öncesi son testlerinin yapılması için stage dediğimiz productionda çalışan bir kopyası olan deneme ortamına alınıyor. Burada düzgün çalıştığına emin olduğumuz yazılım onaylanarak nihai hedef olan production yani üretim, yapıt olarak çevireceğimiz ortamda devreye alınarak müşterinin hizmetine sunuluyor. Müşteri bu ortamı kullanırken bizlerde çeşitli araçlarla bu ortamı gözlüyor ve olası sorunları tespit ediyoruz. Aynı zamanda müşterilerden de geri bildirim topluyoruz.

Bu sorunlar ve geri bildirimlerle yazılım ekibi hiç vakit kaybetmeden kod üzerinde yeni eklemeler ve düzenlemeler yapıyor. Bunlar yeniden bir sürüm olarak yayımlanıyor. Oluşturulan bu yeni sürümler test ve stage ortamlarından geçerek production ortamına gönderiliyor. Süreç bu şekilde devam ediyor. Önceden 6 aya uzayan bu süreç artık günümüzde günlere inmiş durumda. Eski zamanlarda iki yılda iki sürüm çıkaran firmalar şimdi yeri geliyor günde iki küçük sürüm çıkartıyorlar.

Buna ek olarak artık sadece yazılımı değil sistemide yönetiyoruz. Bu şekilde olan ortamlar ilk ortaya çıktığı zamanlarda firmalar eski alışkanlıklarla yazılım ve sistem olarak iki ayrı ekip konumlandırıyorlardı. Yazılım ekibini sadece kod sorumluluğu ile donatıp sistem ekibinide bu kodun productionda düzgün çalışmasıyla görevlendirdi. Fakat bir süre sonra oluşturulan bu iki birbirinden bağımsız organizasyon işin bir numaralı gereksinimi olan hız konusunda ayak bağı olmaya başladı. Yazılım ekibi gün içerisinde yeri geliyor iki veya üç sürüm hazırlıyordu. Sistem ekibi ise bu kadar sürümle başa çıkamıyor bazen süreci kısaltmak adına test adımını atlıyordu. Ayrıca iki farklı organizasyon, iki farklı yönetim altında bulunan ekipler ortak hedefte birleşemiyordu.

İşte tüm bu sorunları ortadan kaldırmak adına “DevOps” dediğimiz ve bulut gibi aslında bir kavramdan, bir iş yapış şeklinden başka bir şey olmayan bir yöntem, bir felsefe ortaya çıkartıldı. İlk olarak bu development ve operations ekipleri tek bir ekip olacak şekilde yeniden dizayn edildi. Ardından bu ekiplerin içerisinden tamamen temelde işi bu yazılan kodu production ortamına tüm süreç takip edilerek aktarmak olan ve bu süreci yönetmek olan DevOps mühendisliği dediğimiz görev oluşmaya başladı.

Bu süreçler ortaya çıkmaya başladıkça bilişim dünyası bu süreçleri otomatize eden uygulamalara da kavuştu. Yazılan ve onaylanmış kodu otomatik olarak bulunduğu depodan alan, test ortamına yükleyip burada kodu otomatik olarak test eden yazılımın, kodu test etmesini sağlayan ve ardından bu kodu stage, production ortamına gönderen yazılımlar ortaya çıktı.

Tüm bu hızlı ve süreklilik gösteren sürece CI(Continuous Integration)/CD(Continuous Delivery) yani “Sürekli Entegrasyon ve Sürekli Teslimat” denildi. CI/CD olarak adlandırılan bu süreç içerisinde, hem bu süreci hem de son ortam olan production ortamını izleyen, yöneten, düzenleyen bir sürü yazılıma sahip olduk ve bunlar DevOps olarak adlandırıldı.