DevOps’un Temel Motivasyonu ve Uygulanış Şekilleri

Burak Tufan
Turk Telekom Bulut Teknolojileri
4 min readJul 24, 2022

Bu yazıda DevOps kültürünün temel motivasyonundan ve bu kültürün uygulanış şekillerinden bahsedeceğim.

“DevOps is a set of practices intended to reduce the time between committing a change to a system and the change being placed into normal production, while ensuring high quality.”

DevOps, yazılım geliştirme ve yazılım süreçlerini birleştirmeyi amaçlayan bir yazılım mühendisliği kültürü/felsefesi/uygulaması/iş yapış şeklidir. Temel motivasyonu; 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 savunmaktır. DevOps, iş hedefleri ile yakın uyum içinde kalarak, daha kısa geliştirme döngüleri, daha sık dağıtım ve daha güvenilir sürümleri hedefler.

İlk yazımda, bir yazılımı ortaya koyup bunu müşteriye CD veya disk gibi bir medyum aracılığıyla gönderip, yazılımın müşteri tarafında yönetildiğinden bahsetmiştim. Daha sonraları ise bu yönetimin, SaaS (Software as a Service) konsepti sayesinde, yazılımı yapan firmaya geçtiğini belirtmiştim. Bu yeni düzende yazılım geliştirme döngüsü şuna dönüştü:

  • Yine ilk olarak gereksinimleri toplayıp, dizaynı yapıyoruz ve ardından da kodu yazarak bir sürüm ortaya çıkarıyoruz. Sonra bu sürüm test ortamına aktarılıyor ve ardından eğer kod onaylanırsa, bu sürümün production öncesi son testlerinin yapılması için “staging” dediğimiz, sürümün production’da çalışan bir kopyası olan deneme ortamına alınıyor. Sürüm bu ortamdan da başarıyla çıkarsa, müşterinin de bulunduğu production ortamına sunuluyor.
  • Bu safhada müşterilerden geri bildirim topluyoruz. Bu geri bildirimlerle yazılım ekibi hiç vakit kaybetmeden kod üzerinde düzeltmeler/eklemeler yapıyor ve bunlar yeni bir sürüm olarak yayınlanıyor. Bu sürüm, yeniden test ve staging ortamlarına yüklenerek deneniyor ve ardından onaylanıp production alanına alınıyor. Eskiden 6 ay civarı süren bu süreç, artık günlerle ifade edilebiliyor. Buna ek olarak hizmet sağlayıcı firma, artık sadece yazılımı değil aynı zamanda sistemi de yönetiyor.

Bu kültürün ilk zamanlarında, eskilerden kalma bir gelenek olarak, firmalar kendi bünyelerinde birbirinden bağımsız iki ayrı ekip oluşturdular; Dev’ciler ve Ops’cular. Fakat bir süre sonra bu iki organizasyon, işin en önemli unsuru olan hız konusunda birbirlerine ayak bağı olmaya başladı. Bu iki ekip arasındaki iletişimi tahsis eden DevOps Mühendisliği kavramı ise bu şekilde ortaya çıktı.

Aynı zamanda, yazılan ve onaylanmış kodu otomatik olarak repo’dan alıp test ortamına yükleyip, burada yazılımı otomatik olarak test eden ve test edilmiş kodu otomatik olarak staging ve production ortamlarına gönderen Docker, Jenkins, Chef, Ansible gibi yazılımlar ortaya çıktı. Tüm bu hızlı ve süreklilik gösteren sürece CI/CD pipeline’ı denildi, yani sürekli entegrasyon / sürekli teslimat.

DevOps, adından belli olacağı üzere, yazılım süreçlerine ait işlemlerin operasyonel tarafını yönetir. Mesela CI/CD akışı oluşturmak, yazılan kodlar commit edildiğinde otomatik olarak repo’ya push edilmesi, sonra bu kodun belli aralıklarla trigger yardımıyla build edilip production’a deploy edilmesi ve tüm bu otomasyon sürecinin yürütülmesi DevOps ekibinin sorumluluğundadır. Containerization tool’ları ve “Infrastructure as Code” yaklaşımı sayesinde, aslen yazılımcı olan mühendisler, System Engineering disiplinine olan gereksinimi giderek azaltıp ve DevOps isminde bir gruba indirgemiştir.

Bir yazılımın yayınlanması için bazı aşamaların yerine getirilmesi gerekir:

  1. Donanımı Tanımlamak
  2. Donanımı Konfigüre Etmek
  3. Donanımı Monitörlemek
  4. Network Cihazlarını Tanımlamak
  5. Network Cihazlarını Konfigüre Etmek
  6. Network Cihazlarını Monitörlemek
  7. Yazılıımı Yapılandırmak
  8. Yazılımı Build Etmek
  9. Yazılımı Test Etmek
  10. Yazılımı Paketlemek
  11. Yazılımı Deploy Etmek
  12. Yazılımı Monitörlemek

DevOps’tan önce, bu adımları gerçekleştirmek için birbirinden bağımsız 4 ekibe ihtiyaç duyuluyordu. Bunlar:

  • 1–2–3 ve 12 numaralı adımlar için System Administrator ekibi,
  • 4–5–6 numaralı adımlar için Network Administrator ekibi,
  • 7–8 ve 10 numaralı adımlar için Developer ekibi,
  • ve 9 ve 11 numaralı adımlar için Quality Assurance (QA) ekibidir.

DevOps’un hayatımıza girmesindeki temel motivasyon, bu ekipler arasındaki duvarları kırıp, konfigürasyon, deployment ve managing isterlerini tek bir ekipte toplamaktır.

Şimdi son olarak en çok kullanılan DevOps tool’larına bakalım:

-Software Repository tool’ları, yazılımın versiyonlarını manage etmemizi sağlar. En fazla kullanılanı Git’tir.

-Bazı yazılımlar paketlenmeden önce compile edilmeye ihtiyaç duyarlar. Make, Ant, Maven, MSBuild, Gradie gibi Build tool’ları buna hizmet eder.

-CI tool’ları, repo’ya her kod yüklediğimizde onu build edip, deploy edip, test etmesini sağlar. En ünlü CI tool’ları Jenkins, Travis CI, TeamCity ve Bamboo’dur.

-Code Analyzer tool’ları, aynı zamanda Code Review tool’ları diye de geçer, kodun içindeki error’leri bulup, code formatting, kalite ve test gibi işlemler ile ilgilenir. SonarQube en popüleridir. Code Climate de örnek verilebilir.

-Configuration Management tool’ları çeşitli script’ler sayesinde sistemimizde gerçekleşen görevlerin otomasyonunu sağlar. Chef, Puppet ve SaltStack en çok kullanılan CM tool’larındandır.

-Deployment tool’ları yazılımı deploy etmemize yarar. Çoğu CI tool’u aynı zamanda continous deployment tool’udur. Ruby için Capistrano tool’u; Java için Maven tool’u sıklıkla kullanılır. Tüm orchestration tool’ları da deployment desteği verir. Fabrie de örnek verilebilir.

-Orchestration tool’ları sistemi ve yazılımı konfigüre etmemize, koordine etmemize ve manage etmemize yarar. Genelde otomasyon ve iş akışı gibi kısımlarda hizmet verirler. Kubernetes en popüler container orkestrasyon aracıdır. Terraform en popüler bulut orkestrasyon aracıdır. Swarm da örnek verilebilir.

-Monitoring tool’ları donanım ve yazılımı monitörlemeye yarar. Genelde süreci izleyen watcher’ları ve sistemin sağlığını gösteren log dosyalarını içerirler. Nagios en popüleridir. Raygun, Prometheus örnekleridir.

-Test tool’ları; test sürecini otomasyona sokar, performans ve yükleme testlerini manage etmemize yarar. Selenium, Apache JMeter örnekleridir.

-AWS, Google Cloud Platform ve Azure gibi bulut araçları hem deployment hem configuration management hem de orchestration konularında hizmet verir.

-Puppet, Chef ve SaltStack gibi araçlar da bu konularda hizmet verebilirler ama esas olarak configuration management’a yoğunlaşmışlardır.

Vakit ayırdığınız için teşekkürler. Bir sonraki yazıda görüşmek üzere.

--

--