Yazılım Geliştirme Süreçlerinde DevOps Yaklaşımı ve Popüler Araç Setleri | Bölüm 1
Günümüzde yazılım geliştirme süreçlerinde hız, güvenilirlik ve sürekli yenilik ön planda olmakla birlikte, bu hedeflere ulaşmak için DevOps yaklaşımı ve bu yaklaşımı destekleyen çeşitli araçlar oldukça önemlidir.
DevOps öncesi zamanlarda, şirketlerin IT departmanları genellikle sistem yöneticileri ve geliştiriciler olarak ikiye ayrılırdı. Bir sistem kurulacağı zaman, sistem yöneticisi elindeki kaynak olanaklarına göre sanal makinelerini oluşturur. Ardından, ağ topolojisi için ağ yöneticisiyle iletişime geçerek gerekli ağ yapılandırmalarını yapardı. Artık sistem ve ağ altyapısı hazır olduğunda, hangi uygulamaların bu sistemlerde çalışacağına karar verme sürecine geçilirdi.
Günümüzde en yaygın olarak kullanılan teknolojilerden biri web sunucularıdır. Yani, bir sunucu üzerinde çalışan birçok web sunucusu olabilir. Bu noktada, darboğazları görebilmek adına bir örnek senaryo üzerinden ilerleyebiliriz. Diyelim ki elimizde basit bir “hello world” projesi var ve müşteri sadece siteye girdiğinde “hello world” yazısını görmek istiyor. Geliştiricimiz şirket kültüründe yaygın olarak kullanılan bir programlama dilinde bir “hello world” uygulaması geliştirdi ve bu uygulamayı müşterinin test ortamına kurmak istiyoruz. Müşteri, testlerini yapacak ve eksiklikleri geri bildirecek şekilde bu süreç devam eder. Şimdi, elimizde bir “Hello World” projesi var ve bu projede 3 kişi çalışıyor. Bu geliştiricilerin projeye katkı yapabilmesi için kodun merkezi bir yerde bulunması gerekiyor. Bu gereksinimi Git gibi bir sistemle sağlayabiliriz. Bundan sonra, geliştiriciler kendi geliştirme ortamlarında kodlarını test ettikten sonra sadece Git üzerinden kodlarını gönderirler.
DevOps olmayan bir sistemde süreç şu şekilde işler: - Sistem yöneticisi veya sürüm yöneticisi kodu Git’ten yerel makinesine çeker. - Kodu uygun dilde derler, örneğin Java için Gradle veya Maven kullanılabilir. - Oluşan paketi müşteri ortamına manuel olarak kurar ve testçi testlerini yaparak süreci devam ettirir.
DevOps olan bir sistemde ise süreç şu şekilde işler: - Manuel olarak hiçbir işlem yapılmaz; tüm işlemler bir entegrasyon araç setiyle otomatize edilir. Örneğin, Jenkins, GitHub Actions gibi araç setleri kullanılabilir. - Bu araç setlerinde, “Job” veya “action item” olarak adlandırabileceğimiz küçük birim işler çalışır. Her birim iş için bir adet araç seti daha sisteme dahil olur. - CI kısmı için, kodun derlenmesi, birim testlerin (unit test) çalıştırılması, kod kalitesinin ölçümlenmesi (bug ve clean code), derlenen pakette zafiyetlerin tespit edilmesi gibi temel 4 adım bulunur. Tüm bu süreçlerden geçen kod, bir imaj deposuna (artifact registry), örneğin Nexus veya Harbor, yüklenir. - CD ise, imaj deposuna yüklenen kodun müşteri ortamlarında dağıtılması (deployment) ile ilgilidir. Bu aşamada yine işi kolaylaştıran araçlar kullanılabilir. Örneğin, Kubernetes gibi konteyner ortamlarında dağıtım için Helm kullanılabilir.
Gelişen teknoloji ve değişen iş süreçleriyle birlikte DevOps yaklaşımı yazılım geliştirme süreçlerinde önemli bir rol oynamaktadır. Bu yaklaşım, yazılımın hızlı ve güvenilir bir şekilde geliştirilmesi, test edilmesi ve dağıtılması için gereken otomasyon ve işbirliği imkânlarını sağlamaktadır. Popüler araç setleri ve uygun kullanımı ekiplerin verimliliğini artırarak yazılım projelerinin başarılı bir şekilde tamamlanmasına katkı sağlar. Ancak her projenin ihtiyaçları farklı olduğundan, uygun araçların seçilmesi ve doğru bir şekilde yapılandırılması önemlidir. Bu nedenle, ekiplerin ihtiyaçlarına ve projenin gereksinimlerine en uygun araç setlerini belirlemek ve kullanmak, başarılı bir DevOps uygulamasının temelidir. Son olarak 2. bölümde araç setleri detaylı ele alınacaktır.