DevOps vs SDLC

DevOps vs SDLC ≥ Snapbytes olarak, birkaç yıldır DevOps, SDLC, CI/CD pipelineları, test otomasyonu, agile metodolojiler ve benzer konularda çalışıyoruz ve bu konularda bilgi sahibi olduğumuzu düşünüyoruz. Her ay, ilginizi çekebilecek yeni bir blog yazısı paylaşacağız. Bu yüzden bir kahve alın, rahatlayın ve ilk bölümümüz olan “DevOps vs SDLC” başlıklı yazımızın keyfini çıkarın.

Geliştirme Sürecinin Hızlanması İhtiyacı

Artık, yazılımın her yerde olduğu ve günlük hayatımızın bir parçası haline geldiği sır değil. Yazılımın zaman ve mekan farketmeksizin hayatımızın içinde olması, uygulama, ürün ve hizmetleri müşterilere daha hızlı teslim etmek için bitmeyen bir yarışa yol açtı. DevOps’a duyulan ihtiyaç, işte tam olarak burada ortaya çıkmıştır.

DevOps, özünde hıza duyulan ihtiyacın karşılanmaya çalışılmasıdır. Bir uygulama geliştirmeye başlıyorsanız, bir hata düzeltiyorsanız veya rakiplerinizden önde olmaya çalışıyorsanız, DevOps size ihtiyaç duyduğunuz hızı verecek roket yakıtıdır. Tüm bahsettiklerimizin hepsi, ürünü gerçekleştirmek için gerekli olan hazırlık zamanını işaret eder. Bir uygulamayı son kullanıcıya ulaştırırken ne kadar zaman harcıyorsunuz? Ya da bir kodu commit ettikten sonra, onun son ürüne etki etmesi ve değiştirmesi ne kadar zaman alır? Ve tüm bunları hangi sıklıkla yapıyorsunuz?

Bu sadece hız ve hazırlık zamanı ile ilgili değildir (Tabi bu alanlardaki kazanımlar muazzam olsa da…). Yazılım geliştirme süreçlerinizi iyileştirmek, otomatikleştirmek,  zamandan ve enerjiden tasarruf etmek, genel dağıtım altyapınızı modernleştirmekle de ilgilidir. Hedeflenen sistem o kadar etkin ve çevik olmalı ki, maliyetleri ve pazara giriş sürelerini azaltıp, ürünlerinizin kalitesini, görünürlüğünü ve verimliliğini artırabilsin. Bu sayede hem müşteriniz hem de çalışanlarınız memnun kalsın.

DevOps’un Evrimi

DevOps sadece yazılıp geliştirmek ve geliştirmelere bağlı operasyonlar demek değildir. Ayrıca aşağıdaki öncüllerde sıralanan birden çok süreci ve unsuru kapsayan sürekli teslimat (CD) ve sürekli entegrasyon’un (CI) bir evrimidir de.

  • Sürekli geliştirme
  • Sürekli dağıtım
  • Bağımlılık yönetimi
  • Statik kod analizi
  • Sürüm kontrolü
  • Test otomasyonu
  • Yapılandırma yönetimi
  • Veritabanı pipelineları
  • Mavi/yeşil dağıtımlar
  • Konteynırler
  • Altyapıyı kod olarak ifade etme ve saklayabilme
  • Gösterge panoları
  • Süreç izleme sistemleri
  • Kültür

DevOps’u büyük bir ağaç gibi düşünün. Zirveye tırmanmak kesinlikle kolay değil ve yol boyunca birkaç dikenin üzerinden geçmeniz olası, ancak aynı zamanda en tatlı meyveleri de bu yolda ilerlerken bulursunuz. Asla birbirinin aynı olan iki farklı DevOps stratejisi yoktur ve tam da bu nedenle planlanmış ve özelleştirilmiş bir geliştirme çözümüne sahip olmak çok önemlidir. Dikkate alınması gereken şeyler organizasyonunuzun büyüklüğü, takımlarınızın tecrübesi, sahip olduğunuz kaynaklar ve genel iş önceliklerinizdir.

DevOps vs SDLC

SDLC Araçları

SDLC araçları, yazılım geliştirme sürecinde farklı kategorilerde kullanılabilecek birçok araç içerir. CI/CD, proje yönetimi, statik kod analizi, versiyon kontrol sistemleri, artifactory gibi birçok kategori altında yer alan araçlar, yazılım geliştirme sürecinde kombine bir şekilde kullanılabilir. Örneğin, CI/CD araçları yazılımın hızlı bir şekilde test edilmesini ve sürüm yönetimini kolaylaştırırken, proje yönetimi araçları takım çalışmasını kolaylaştırır ve projenin ilerlemesini izlemenizi sağlar.

Statik kod analizi araçları, kod kalitesini artırmak ve güvenliği sağlamak için kullanılabilirken, versiyon kontrol sistemleri geliştiricilerin aynı kod üzerinde çalışmasını kolaylaştırır. Artifactory gibi araçlar ise, yazılım paketlerinin yönetimini ve dağıtımını kolaylaştırır. Atlassian araçları olan Jira, Bitbucket gibi araçlar, birçok kategorideki araçları bir arada kullanmanıza ve takımınızın süreci izlemesine olanak sağlar. SDLC araçlarının kombine kullanımı, yazılım geliştirme sürecinin kalitesini ve hızını artırırken, maliyeti ve riski de azaltır.

Yaptığımız açıklamayı daha da somutlaştırmak için örnek bir senaryoya bakalım. Diyelim ki, bir yazılım şirketi, bir yazılım ürünü geliştirmeye karar verdi ve bu süreci SDLC araçlarıyla yönetmek istiyor. Aşağıda, Jira, Bitbucket, Confluence, Jenkins,Sonar Qube ve Nexus Artifactory araçlarını kullanarak bu yazılım geliştirme sürecinin nasıl yönetilebileceğine adım adım bakalım:

  1. Proje Yönetimi için Jira: Jira, proje yönetimi için yaygın olarak kullanılan bir araçtır. Bu örnekte, Jira’yı kullanarak tüm proje yönetimi işlerini takip etmek istiyoruz. Bu nedenle, Jira’da bir proje oluşturuyoruz ve tüm ekiplerimizi burada tanımlıyoruz. Bu aşamada, her ekip için bir ayrı görev panosu oluşturabiliriz. Örneğin, bir ekip frontend geliştirme işleri yaparken, bir diğeri backend geliştirme işleri yapabilir. Bu görev panolarını da Jira’da oluşturabiliriz. Ayrıca, Jira’da projenin ilerlemesini izlemek için bir dashboard oluşturabiliriz.
  2. Versiyon Kontrol için BitbucketBitbucket, bir versiyon kontrol sistemi olarak kullanılabilir. Bu aşamada, Bitbucket’ta bir repository oluşturuyoruz ve tüm kodlarımızı burada yönetiyoruz. Tüm geliştiricilerimiz Bitbucket’a erişim hakkına sahip olacak ve kodlarını burada yönetecek. Ayrıca, Bitbucket’ı Jira ile entegre edebiliriz. Bu sayede, Jira’daki görev panolarımızda belirtilen görevlerin kodları Bitbucket’ta yönetilebilir.
  3. Dökümantasyon Yönetimi için Confluence: Confluence, bir dökümantasyon yönetim aracıdır. Bu aşamada, Confluence’ta tüm proje belgelerimizi yönetebiliriz. Örneğin, projenin gereksinimleri, tasarım belgeleri, teknik belgeler vb. tüm belgeleri Confluence’ta yönetebiliriz. Ayrıca, Confluence’ı Jira ile entegre edebiliriz. Bu sayede, Jira’da belirtilen görevlerle ilgili belgeler Confluence’ta yönetilebilir.
  4. CI-CD için Jenkins: Jenkins, bir CI-CD aracıdır. Bu aşamada, Jenkins’i kullanarak tüm kodlarımızı otomatik olarak test edebilir ve derleyebiliriz. Bu, hataların erken tespit edilmesini ve kod kalitesinin artırılmasını sağlar. Jenkins, Bitbucket ile entegre edilebilir, bu sayede kodlarımız Bitbucket’ta yönetilir
  5. Release ve 3rd Parti Paket Yönetimi için Nexus:  Nexus, yazılım geliştirme sürecinde kullanılan kaynak kodu, bağımlılıkları, derleme araçları, testler ve diğer dosyaların depolanması, yönetimi ve paylaşımı için kullanılan bir araçtır. Bu işlevleri yerine getirmek için bir sanal depo oluşturur ve tüm yazılım bileşenlerini tek bir yerde bir araya getirir. Geliştiriciler, bu depoya yükledikleri bileşenleri arşivleyebilir, sürümlendirme yapabilir, diğer ekiplerle paylaşabilir ve bu bileşenleri diğer projelerde tekrar kullanabilirler.
  6. Statik Kod Analizi için Sonar Qube: SonarQube, kod kalitesi analizleri için farklı dillerde (Java, C#, C/C++, JavaScript, Python, vb.) kullanılabilen açık kaynak kodlu bir araçtır. Kod kalitesi analizi, kodda mevcut olan kod kalitesi sorunlarını (örneğin, güvenlik açıkları, performans sorunları, kod tekrarları vb.) tespit ederek ve koddaki bu sorunların neden olduğu riskleri ortaya koyarak geliştiricilerin bu sorunları düzeltmesine yardımcı olur. SonarQube, kod kalitesi analizi için farklı özelliklere sahiptir. Örneğin, hataların, kod kalitesi sorunlarının ve teknik borçların tespiti, kod kapsamının (test edilen ve edilmeyen kodların) takibi, koda atıfta bulunan dökümantasyonun analizi gibi özellikler bulunmaktadır. Ayrıca, SonarQube, analiz sonuçlarını görsel olarak temsil eden ve geliştiricilerin çalışmalarını daha iyi anlamalarına yardımcı olan bir arayüze sahiptir.

DevOps vs SDLC ≥ Son olarak, oluşturduğumuz kodu son kullanıcılara sunmadan önce test etmek ve onaylamak için CI/CD araçlarını kullanabiliriz. Bu örnekteki gibi, Jenkins kullanarak bir CI/CD pipeline oluşturabiliriz. Bu pipeline, Bitbucket’daki kod değişikliklerini izleyebilir.

Bu süreci Sonar Qube ile kombine edersek, Jenkins’e bir Sonar Analiz buildi açmaya karar verirsek, Bitbucket’a her commit geldiğinde, Bir Sonar analizi çalışabilir ve bu analiz bize koddaki açıkları, yanlış kullanımları ve çeşitli sorunları gösterebilir. Bu sayede sorunları birikmeden görme ve çözme imkanına kavuşur ve bu açıkları hemen bir sonraki committe düzeltme imkanı buluruz. Bunlara ek olarak, Sonar’dan aldığımız geri bildirimle versiyon kontrol sistemimizde de bazı stratejiler izleyebiliriz.

Örneğin, bir merge talebi geldiğinde bir Sonar analizi çalıştırabilir, kod kalitesi beklentilerimizi karşılamazsa bu merge talebini engelleyebiliriz. Son olarak yine Jenkins ve Nexus’u kombine ederek release süreçlerimizi de yönetebiliriz. Bir Jenkins işi oluşturup, çıktıları otomatik olarak Nexus’a atabilir, bu çıktıları Jenkins iş numarası vb gibi bilgilele etiketleyip, releaselerimizi sınıflandırabiliriz. Bu sayede test aşamasında, hangi release tam olarak hangi revisiona sahip kaynak koddan gelmiş ve sorumlusu kim gibi bilgilere kolayca ulaşabiliriz.

Nexus release yönetimi dışında, Kaynak kodumuzda kullandığımız 3rd parti kütüphanelere ulaşım içinde bir aracı olarak kullanılabilir. Kaynak kodumuzda kullandığımız dış kaynaklı kütüphaneleri Nexus’a atabilriz ve build araçlarından (Örneğin: maven, gradle vb.) gibi depo olarak bizim belirlediğimiz depo yöneticisine ulaşmasını sağlayabiliriz. Bu sayede ürünümüzde kullandığımız dış kaynaklı kütüphaneler üzerinde tam hakimiyet sağlamış oluruz.

Bu bize ayrıca güvenlik de sağlar çünkü bilinmeyen, istenmeyen dış kaynaklı kütüphaneleri kullanmamış oluruz. Bu süreçlerin hepsi, manuel olarak yürütüldüğünde çok zaman alabilir ve hataların kaçırılma riski yüksektir. Ancak Jenkins kullanarak, bu süreç otomatikleştirilir ve tekrarlanabilir hale getirilir.

Sonuç olarak, yazılım geliştirme sürecinde kullanılan SDLC araçları, her bir adımı yönetmek, izlemek ve optimize etmek için bize yardımcı olur. Örneğimizde, Jira ile proje yönetimini, Bitbucket ile versiyon kontrolünü, Confluence ile dökümantasyon yönetimini, Nexus artifactory ile artifactory yönetimini, Sonar Qube ile statik kod analizini ve Jenkins ile CI/CD süreçlerini ele aldık. Bu araçların kombinasyonu, bir yazılım projesinin tüm sürecini optimize ederek daha hızlı, daha güvenli ve daha yüksek kaliteli bir yazılım üretmemize yardımcı olur.

Her aracın faydalarını ve karmaşıklıklarını derinlemesine anlamak belli bir seviyede uzmanlık düzeyi gerektirir ve bu uzmanlık, sizin için doğru rotayı planlamayı çok daha kolay ve verimli hale getirecektir. Snapbytes olarak, müşterilerimizin mevcut SDLC olgunluğunu değerlendirerek, DevOps yol haritasını planlayarak ve onlara bu yolculukta rehberlik ederek yardımcı oluyoruz. DevOps uygulamaları ve ilkelerinden nasıl faydalanabileceğiniz hakkında daha fazla bilgi edinmek için bizimle iletişime geçin.