Kariyerinizin başlangıcında olan bir developer, programlamanın eğlenceli ve zorlu yanlarıyla ilk kez tanışacak olan bir öğrenci ya da programcılarla birlikte çalışan teknik dışı bir pozisyon sahibi olun, trendde olan developer operations (geliştirici operasyonları)’ın kısaltması olan “DevOps” terimi ile büyük bir ihtimal daha önce karşılaştınız. Dolayısıyla DevOps teriminin tam olarak ne anlama geldiğine dair fazlasıyla yetersiz ve belirsiz bir fikrinizin olması oldukça muhtemel.
DevOps nedir, ne değildir?
Bu sorunun tam olarak somut bir cevabı yok. Hatta DevOps’un Wikipedia sayfasına baktığınızda bu sorunun şu cevapla geçiştirildiğine tanıklık edeceksinizdir, “Akademisyenler ve uzmanlar, DevOps terimi için benzersiz bir tanımlama ortaya koymamışlardır.” DevOps ile ilgili kesinlikle söyleyebileceğimiz şey bir programlama dili, frameworku veya platformu olmadığıdır. DevOps iyi tanımlanmış bir işlem değildir veya belirli bir araç kullanarak etkin hale getirilmez. DevOps bunların sadece biri değil, fakat aslında hepsinin bir birleşimidir.
DevOps, yazılımları etkili ve güvenli bir şekilde dağıtmak için developerlara yardımcı olan bir uygulama ve metodolojidir. Bu anlamda DevOps daha önce Agile ile de karşılaştırılmıştır. Agile da aynı DevOps gibi proje yönetimi ile ilgili araçların, işlemlerin ve felsefelerin tamamını kapsayan geniş bir terimdir.
DevOps’un tam olarak ne olduğunu anlamak için öncelikle yazılımın nasıl dağıtıldığını iyi bir şekilde anlamamız gerekir.
Yazılım için Kargo Hizmeti
Kod yazmayı ilk kez öğrenmeye başladığınız zaman bilgisayarınızda uygulamalar geliştirir ve bunları çalıştırırsınız. Eğer bir web uygulaması geliştiriyorsanız bunu “localhost” üzerinden çalıştırır ve test edersiniz. Localhost; bilgisayarınızın, web tarayıcısı üzerinden kendine erişim sağlamasına yol açar (bu yazıda web uygulamaları üzerine odaklanacağınız fakat aynı konsept mobil, masaüstü ve diğer uygulama tipleri için de geçerli olacaktır).
Özel olarak konfigüre edilmediğini varsayarsak üzerinde çalıştığınız uygulamaya, sadece ve sadece siz uygulamayı geliştirmeye başladığınız bilgisayar üzerinden erişim sağlayabilirsiniz. Bu oldukça harika bir şey çünkü uygulamalarınızı çabucak çalıştırma ve test etme imkanına sahip oluyorsunuz. Kodunuzu yazın, kaydedin, yeniden kurun ve tarayıcıyı yenileyin. İşlem bu kadar basit.
Peki uygulamanız diğer insanlar tarafından da kullanılmaya hazır hale geldiğinde ne yapacaksınız? Çünkü artık localhost bunun için yeterli olmayacaktır. Web uygulamanızı diğer kişilerin de kullanımına sunmak için bunu web sunucusunda host etmeniz gerekir. Daha önce “yazılımı dağıtmak” derken asıl demek istediğimiz şey de budur: Çalışır haldeki bir kodu erişim sağlanabilir bir web sunucusuna taşımaktır.
Yazılımı Eski Yollarla Dağıtmak
Bir uygulamayı geleneksel yollarla sunucuya taşımak için developerların, sys adminleri olarak da bilinen sistem yöneticileri gibi diğer teknisyenlerle birlikte çalışması gerekir. Sys admini bir sunucu kurar ve bu sunucunun uygulamanın ihtiyaçlarını karşılayacak şekilde konfigürasyonunu yapar, kullanıcı hesaplarını oluşturur, paketleri kurar ve web/HTTP yoluyla sunucuya dışarıdan erişim sağlanması için gerekli ayarları yapar. Sonra sys admin sunucuya eklenecek olan uygulamanın developerları ile birlikte çalışarak, uygulamanın kodunu geniş çapta erişim sağlanabilecek şekilde konfigüre edilmiş olan web sunucusu üzerine taşır.
Bahsi geçen sunucu bir şirket tarafından yönetiliyor olabilir, hatta bu sunucu şirket binasında bile yer alabilir. Diğer yandan sunucu üçüncü partiden de kiralanabilir veya ülkenin tamamen öbür tarafındaki bir binada da yer alabilir. Fiziksel sunucunun konumu ne olursa olsun kodu sunucuya taşıma işlemi yukarıda anlattığımız gibi gerçekleşir.
Yazılımı Yeni Yollarla Dağıtmak
Bulut hizmetlerin gelişmesiyle birlikte sunucu kaynaklarının yönetiminde de oldukça olumlu değişimler meydana geldi. Artık şirketler; koskoca sunucu makinelerini kiralamak veya satın almak yerine, kaynakların çok daha esnek bir şekilde dağıtımına izin veren Amazon Web Services (AWS) gibi şirketlerin sunduğu bulut hizmetlerini kullanıyor.
Bahsi geçen bulut sunucuları, soyut anlamda bir rafta duran fiziksel bir sunucu olarak düşünebiliriz. Ancak bu sunucular, fiziksel sunucuların sahip olduğu çoğu dezavantajı ortadan kaldırıyor. Yeni bir sunucu mu kurmak istiyorsunuz? Artık bu işlem bir internet sayfasındaki butona klikleyecek kadar kolay bir hale geldi. Hatta belirli uygulama gruplarına uyum sağlayacak şekilde daha önceden konfigüre edilmiş olan sunucuları bir menüden bile seçebilmeniz mümkün.
Elbette ki soyut olan bulut konseptinin arkasında yine raflarda yer alan somut, gerçek ve fiziksel sunucular var. Fakat bulut sunucularının farkı artık o fiziksel sunucu detaylarıyla uğraşmak zorunda kalmamamızdır. Çünkü o fiziksel sunucuların hepsi bulut hizmetleri sunan şirketler tarafından yönetilmektedir.
Bulut sistemlerinin gelişmesi bilgisayar hizmetlerinde çığır açtı. Temel bir web uygulamasını sunucuya kurmak amacıyla yapılması gereken tüm işlemler için artık bir sys adminine ihtiyaç yok. Bu yöntem sayesinde sys admin bilgi birikimine sahip olmayan bir developer bile uygulamasını, bazı temel talimatları takip ederek Heroku, Pivotal Cloud Foundry veya Azure gibi hizmetler üzerinde kurabilir.
Sunucu kaynaklarının ve uygulamanın dağıtımını kolaylaştırmak dışında bahsi geçen hizmetlerin başka avantajları da mevcuttur. Bu hizmetler sayesinde birçok farklı işlem script edilebileceği için otomatik hale getirilebilir. Yeni bir sunucu kurup, bunun daha önce kurmuş olduğunuz sunucu ile tamamen aynı konfigürasyona sahip olmasını mı istiyorsunuz? Bunu yapmak için bir script yazabilirsiniz. Her seferinde yeni bir kod yazdığınızda bu kodla ilgili bazı işlemlerin otomatik olarak yapılmasını mı istiyorsunuz? Bunun için de bir script yazabilirsiniz. Dağıtım işleminin tamamını mı scriptleştirmek istiyorsunuz? Evet bunu yapabilmeniz de mümkün. Uygulama dağıtımı süresince sürekli tekrarlanacak olan işlemleri script yazarak otomatikleştirebilmeniz DevOps’un en önemli özelliklerinden biridir.
Bug Üretmeden Kodu Dağıtmak
Scriptler, daha tutarlı dağıtım işlemlerine olanak sağlamanın yanı sıra sürekli aynı şeyi yapacakları için olası insan kaynaklı hataları da sıfıra indirmiş olacaktır. Yeni yöntem sayesinde uygulama dağıtım süreci çok daha hızlı ilerler ve eski yollarla karşılaştırıldığında aynı süre içerisinde daha sık uygulama dağıtılabilir. Hızlı ve kolay uygulama dağıtımı dışında DevOps, aynı zamanda bu uygulamaların güvenli ve stabil bir şekilde dağıtımı üzerine de yoğunlaşıyor. Sonuçta eğer bir uygulamada buglar söz konusuysa bu uygulamayı hızlıca dağıtmanın hiçbir anlamı yoktur.
Bugları önlemek için hem iyi kod üretmeli hem de ürettiğiniz kodu iyi test etmelisiniz. Test işlemi kalite kontrol analistleri ve testerlar tarafından dağıtım öncesi manuel olarak yapılabilir. Ya da geniş çaplı test scriptleri tarafından uygulamanın sağlamlılığı test edilecek şekilde otomatik olarak da yapılabilir. Uygulama dağıtımınızda DevOps yöntemini kullanmak istiyorsanız otomatik testleri tercih etmeniz daha yararınıza olacaktır. Otomatikleştirilmiş testler, insan kaynaklı hata riskini düşürür ve verimliliği artırır. Bu testler aynı zamanda sürekli entegrasyonlu sunucular yoluyla da otomatik yazılım dağıtımını yapabilmenizi sağlayan otomatik görev dizilerine entegre edilebilir. Bu kulağa karmaşık gelebilecek işlemi en basit olarak şöyle açıklayabiliriz:
- Developer kodu yazar ve kodu sisteme girer.
- Sürekli entegrasyon sunucusu bunu görür ve kodu kontrol eder.
- Sürekli entegrasyon sunucusu uygulamayı kurar ve akabinde testini yapar.
- Önceki adımda belirtilen işlem başarılıysa sürekli entegrasyon sunucusu uygulamayı dağıtır. Eğer bu işlem başarısızsa developerlar konu ile ilgili otomatik olarak bilgilendirilirler.
Bu işlem “sürekli dağıtım” olarak tanımlanır ve Netflix ve Amazon gibi şirketlerin sadece bir gün içerisinde kodlarını güvenli bir şekilde yüzlerce kez dağıtmalarına yardımcı olur. Peki bunun önemi tam olarak nedir? DevOps olmadan manuel dağıtım bir haftada sadece bir kez veya daha da az sıklıkta yapılırdı. Daha hızlı ve güvenli dağıtım yöntemleri sayesinde yazılımlar da daha hızlı adapte olur. Böylelikle yazılımlar daha küçük parçalar halinde daha çok sıklıkta gelişir. Böylelikle daha büyük çapta ve yüksek riskli olan manuel dağıtımlar ise artık eskide kalmış oldu.
DevOps için Adapte Olunmalı
Yazıda bahsi geçen DevOps işlemlerinin gerçek anlamda etkili olması için developer ve sys adminlerinin günlük işlerini adapte etmeleri gerekir. Bir uygulamanın dağıtımında sys adminlerin görevini DevOps uzmanları alabilir. Ayrıca developerların kodlarını etkileyecek DevOps prensipleri hakkında bilgi sahibi olmaları gerekir.
DevOps uzmanları, yazılım geliştirme ekipleri için DevOps dağıtım pipelinelarını kurup konfigüre etme görevine sahip olan mühendislerdir. Yazılım geliştirme işlemlerini, konfigüre edilmiş pipeline’a sorunsuz entegre etmek için developerlarla birlikte çalışırlar. Bu uzmanların çoğu, kariyerine developer ya da sys admini olarak başlayan fakat otomasyon ve kalite faktörlerine odaklanmak isteyen orta-yüksek seviyeli teknisyenlerdir. Bir üst düzey DevOps mühendisi; DevOps pozisyonu için en uygun çalışan adayını, “tekrarlayıcı bir görevle karşılaştığında işi yapması için bir script yazan kişi” olarak tanımlıyor.
Developerların da kod yazmaya olan bakış açıklarını geliştirmeleri gerekiyor. Her bir kodun temeli DevOps yöntemine uygun olacak diye bir kural yoktur. Otomatikleştirilmiş test ve dağıtım süreçlerinin etkili olacağından emin olmak için kod yazarken bazı faktörlerin düşünülmesi lazım. Bu faktörlerden bazıları; test bazlı development ve 12 faktörlü uygulama metodunu anlamaktır. Docker gibi container araçlarına aşina olmak da çoğu zaman gerekli bir niteliktir.
Eğer bir developersanız, DevOps terimi geçtiğinde ne demek istendiğini artık bu yazı sayesinde anlayabilirsiniz. DevOps, yazılımların geliştirme ve dağıtma biçimlerini kalıcı olarak değiştiren ve sürekli olarak gelişim gösteren karmaşık bir araçtır. Artık bunu idrak edecek duruma geldiğiniz için DevOps’u daha detaylı açıklayan ve daha karışık dilde hazırlanmış olan makaleleri okumaya başlayabilirsiniz. Eğer bir developer değilseniz, işlemlere ve araçlara gelen yenilikler sonucunda yazılım geliştirmenin nasıl değiştiğini artık daha net bir şekilde anlayabilmeniz mümkün.
Orijinal Kaynak: Launch Code – DevOps in the Wild