Merhaba Bu makalemizde çağımızın gözdesi yazılım ve klasik yazılım geliştirme süreçlerin pekte yeni olmayan DevOps dünyasına evrilmesini inceliyor olacağız .
Bu makalede DevOps nedir ,Neden ortaya çıktı , Neleri çözmeyi hedefliyor , DevOps mühendisi temel olarak neleri bilmeli sorumlulukları nelerdir… gibi kavramları inceleyeceğiz.
DevOps Nedir ?
DevOps, Development (geliştirme) ve Operations (operasyonlar) kelimelerinin birleşiminden elde edilmiş bir kısaltmadır. 2009 yılında Patrick Debois isimli geliştirici tarafından ortaya atılan bu terim, tasarımdan geliştirme aşamalarına kadar, tüm programlama üretim sürecinde işbirliği yapan bir ekibin çalışmasını tanımlayan bir şemsiye terimdir. IT alanında bir evrim olan DevOps, bir ekibin yüksek verimlilik ile sonuç üretme yeteneğini artıran araç ve felsefelerin tamamına denir.
DevOps uygulaması, uygulama geliştirme (Development) ve BT operasyon (Operations) ekipleri arasında daha sorunsuz, sürekli iletişim, işbirliği, entegrasyon, görünürlük ve şeffaflığı teşvik eder.
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.
Dev
“Dev”, genelde yazılım geliştiricileri için kullanılır, ancak gerçekte daha geniş bir topluluğu temsil eder ve “yazılım geliştirme için çalışan herkes”i kapsar.
Ops
“Ops”, “Dev”e göre daha geniş bir kapsamlıdır. Ops deyince sistem mühendisleri, sistem yöneticileri, veri tabanı yöneticileri, network mühendisleri, güvenlik uzmanları ve daha birçok meslek grubunu kapsar.
DevOps sadece teknik bir yaklaşım değil, bir organizasyon kültürü yaklaşımıdır. Bir başka deyişle bizim ortak çalışma kültürü (buna Agileçevik kültür de denebilir) olarak bildiğimiz kavramın farklı bir isimle pazardaki yerini almış hali diyebiliriz.
DevOps kültürünün bir organizasyon tarafından benimsenmesi için bazı durumların kurum kültüründe oluşması gerekmektedir.
Bu durumları şöyle sıralayabiliriz:
- agile, scrum, kanban,lean veya waterfall gibi yazılım geliştirme süreçlerinin ve metodolojilerinin kullanılması
- İş birimlerinden, canlı ortam yaygınlaştırma isteklerinde artış sağlanması
- Sanallaştırma ve bulut altyapıların ulaşılabilir durumda olması
- Veri merkezi otomasyon ve konfigürasyon araçlarının kullanımında artış sağlanması
- Test Otomasyonu ve Sürekli Entegrasyon yaklaşımlarına odaklanılması
Bu durumlara baktığımızda DevOps denildiğinde, sadece Docker, Puppet, Chef, Jenkins, Bamboo vb. gibi araçların içerisinde bulunduğu operasyon yaklaşımlarının yanında, Scrum/Kanban/XP, TDD, Continuous Integration, BDD gibi yaklaşımlardan da bahsedildiğini düşünmeliyiz. Hatta DevOps’un temelinin atılması ve sağlamlaştırılması için organizasyonel yaklaşımların öncelikli olarak hayata geçirilmesinin de oldukça önem taşımaktadır.
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ı.
Neden DevOps?
DevOps yaklaşımı benimseyen ekipler, projelerini daha hızlı bitirme olanağı yakalarlar. DevOps sayesinde oluşabilecek iletişim eksiklikleri giderilir. Proje boyunca gerekli olabilecek tüm değişiklikler daha hızlı bir şekilde gerçekleştirilir. DevOps yaklaşımı, operasyonlar ve geliştirme ekipleri arasında daha fazla işbirliğini teşvik eder. Projede yer alan tüm ekipler, hedeflerine daha emin adımlarla ve daha bilinçli bir şekilde ilerler. DevOps kullanmayan ekipler, genellikle projelerini daha yavaş bitirmek durumunda kalırlar. Ve proje boyunca teknik aksaklıklarla karşılaşma ihtimalleri daha fazladır. Bu yüzden, geliştirme süreçlerinin en verimli bir şekilde sürdürülebilmesi için DevOps tavsiye edilmektedir.
DevOps temel olarak aşağıdaki operasyon ve süreçleri kapsar.
- Altyapı Otomasyonu
- Konfigürasyon Yönetimi
- Dağıtım Otomasyonu
- Altyapı İzleme
- Log Yönetimi
- Uygulama ve Performans Yönetimi
DevOps yeteneklerinizi artırdığınızda;
- Altyapıda oluşacak sürekli tekrarlayan işleri otomatikleştirmiş olacaksınız.
- Zaman ve Maliyet kazancı sağlayacaksınız. Aynı zamanda insan hatalarından kurtulup sadece sizin istediğiniz şekilde sürece uygun bir şekilde ilerleyen otomatik yapılar elde etmiş olacaksınız.
- konsolidasyon, standardizasyon sağlayıp karmaşıklığı da azaltmış olacaksınız.Tüm bu faydalar katma değeri olmayan süreç ve operasyonlarla uğraşmadan farklı işlere yönelmenizi sağlayacaktır.
Örneğin yazılım ekibi PHP ve MySQL ortamında çalışacak bir uygulama hazırladığını ve sizden bu ortamı istediklerinde siz MySQL kurulu bir Linux Server ve üzerinde Php Servisinin X rolü de kurulmuş halde 10-15 dakika içinde hazırlayabiliyorsanız işte bu süreçlere başlamış ve bakış açınızı DevOps pratiğine uydurmuşsunuz demektir.
Cloud ortamınızı Azure yada AWS te barındırıyorsanız aşağıdaki tablodaki gibi Open Source DevOps toollarını rahatlıkla kullanabiliyor ve hızlıca devreye alabiliyorsunuz.
Tüm dünyada kullanılan popüler açık kaynak ürünlerden bazılarını aşağıdaki görselde görebilirsiniz;
DevOps’un temel özellikleri Nelerdir?
Hız: DevOps uygulamaları, daha hızlı inovasyon yapmak, değişen pazarlara daha iyi uyum sağlamak ve iş sonuçlarını yönlendirmede daha verimli olmak için ihtiyaç duyduğunuz hızda hareket etmenize olanak tanır.
Hızlı Teslimat: Sürümlerin hızını artırdığınızda, ürününüzü daha hızlı geliştirebilir ve rekabet avantajı elde edebilirsiniz.
Güvenilirlik: Sürekli entegrasyon ve sürekli teslimat gibi DevOps uygulamaları, uygulama güncellemelerinin ve altyapı değişikliklerinin kalitesini garanti edebilir, böylece son kullanıcılar için optimum deneyimi korurken daha hızlı bir şekilde güvenilir bir şekilde teslimat yapabilirsiniz.
Geliştirilmiş İşbirliği: Bir DevOps modeli kapsamında, geliştiriciler ve operasyon ekipleri yakın işbirliği yapar, sorumlulukları paylaşır ve iş akışlarını birleştirir. Bu sayede verimsizlikler azalır ve zaman kazanılır.
Güvenlik: Otomatikleştirilmiş, entegre güvenlik testi araçlarını kullanarak güvenlikten ödün vermeden bir DevOps modelini benimseyebilirsiniz.
DevOps iş akışında yer alan kavramlar:
Sürekli Entegrasyon
Uygulama kodunu veya kaynak kodunu GIT veya SVN gibi kaynak kodun depolarına bir günde birkaç kez entegre etme kültürü daha fazladır. Maven gibi araçlar geliştirin, Ant, kaynak kodu depolarını ve Atlassian Bamboo ve Jenkins gibi sürekli entegrasyon araçlarını birleştirerek check-in işlemini onaylamak için kullanılır.
Sürekli Test
Birim testi veya otomatik test daha kesin olmalıdır. Selenium veya JUnit, bu tür otomatik testler için özel olarak kullanılmaktadır ve bu araçlar sürekli entegrasyon davranışına entegre edilmiştir.
Sürekli Temel Hazırlık veya Bulut Temel Hazırlığı
Bulut örneği veya sanal makineler yüksek oranda kullanılabilir, kullanım başına ve esnekdir. Test, geliştirme, aşamalandırma ve üretim gibi çeşitli ortamlar için farklı türde örnekler oluşturmak faydalıdır. Amazon web hizmetleri, Microsoft Azure gibi çeşitli bulut servis sağlayıcıları kullanılabilir. Çeşitli bulut hizmet modelleri, altyapı veya bir platform veya hizmet olarak ele alınabilir.
Konfigürasyon Yönetimi
Yapılandırma yönetimi, çalışma ortamı ortamını farklı ortamlarda tutarlı bir şekilde hazır hale getirmek için etkilidir. Puppet, Chef veya Ansible, yapılandırma yönetimi araçları olarak kullanılabilir. Kaynakları bir bulut ortamında bu araçlarla yönetmek oldukça kolaydır.
Sürekli Dağıtım veya Teslimat
Sürekli teslimat veya sürekli dağıtımlar, günden güne kullanılan amaçlar için kullanılan terimlerdir. Sürekli teslimat, paket dosyasının her türlü ortama yayılmaya hazır olduğunu ve paket dosyasının üretim dağıtımına hazır olduğunda sürekli dağıtımın doğru kelime olduğunu doğru bir şekilde kullanılabilir.
DevOps’un Çözdüğü Zorluklar Nelerdir ?
DevOps uygulama geliştirmesinden önce, ekipler bir yazılım programı için iş gereksinimlerini toplamaktan ve kod yazmaktan sorumluydu. Ardından, ayrı bir yazılım ekibi, gereksinimleri karşılanırsa programı izole bir geliştirme ortamında test eder ve uygulanacak işlemleri kod üzerinde günceller.
Dağıtım ekipleri ayrıca Network ve veritabanı gibi gruplara ayrılmıştır. Bir yazılım programı her seferinde dağıtım ekibine bir iş yükü daha ekler.
DevOps gibi ekiplerin ayrı çalışması durumunda ise :
- Dev, genellikle programın beklendiği gibi çalışmasını önleyen altyapı ve Operasyonel engellerinin farkında değildir.
- Ops ekibi tipik olarak birçok özellik üzerinde çalışır ve işin amacı ve yazılımın değeri hakkında çok az bilgiye sahiptir.
- Her grubun, bir şeyler ters gittiğinde verimsizliğe ve başarısızlığa dair suçlayacağı birileri vardır.
DevOps, bu sorunları, yazılımı çalıştıran sistemi sürdürme sorumluluğunu paylaşan ve yazılım üzerinde çalışan kalite geri bildirimi ve otomasyon sorunları ile bu sistem üzerinde çalışacak şekilde hazırlanan sorumluluğu paylaşan ortak çalışanlar arası ekipler kurarak çözmektedir.
Bir DevOps mühendisinin rolleri ve sorumlulukları şunları içerir:
- Jenkins, maven Git vb.Gibi farklı araçları kullanarak sürekli entegrasyon ve dağıtım sürecini tasarlamak, oluşturmak, test etmek, dağıtmak ve sürdürmek.
- Docker, GitHub, Kubernetes, Terraform, Ansible, Puppet vb. Gibi DevOps operasyonlarında kullanılan araçlarını bilmek ve yönetebilmek.
- Linux komut sistemini iyi kullanabilme ve batch scripting
- Müşterinin beklentilerini karşılayabilecek ve aşabilecek ürünler oluşturmak için geliştirme ve operasyon ekibi ile yakın işbirliği içinde çalışmak.
- AWS, Azure vb. Araçlarla bulut tabanlı uygulamalar tasarlama, oluşturma ve bakımında uygulamalı deneyime sahip olmak.
- Kaynak kontrolü ve sürüm belirleme ile GitHub ve Bitbucket gibi araçlara aşinalık.
- Bulut ortamlarındaki bireysel işlevleri izlemek ve bu işlevleri acil bir işletme ihtiyacını karşılayacak şekilde ölçeklendirmek için kod yazmak.
- Pek çok programlama dilinde küçük kod parçacıkları yazabilme becerisini içeren hızlı kodlama becerisine sahip olmak.
- Hem şirketin hem de müşterilerin ihtiyaçlarını önceden tahmin edebilmek, teknoloji ve şirket operasyonlarındaki boşlukları kapatmak için çalışabilmek.
- Hangi aracın hangi iş ihtiyaçlarına ve sorunlarına en uygun olduğunu bilmek.
- Testleri otomatikleştirmek için kodu dağıtın ve aynısını izleyin.
- Sanal bir ortamda test konusunda bilgili olmak.
- Ekip üyeleri ve müşterilerle iletişim kurabilme.
- Alandaki endüstri standartlarını ve en iyi uygulamaları korumak ve sürdürmek.
DEVOPS sürecinde kullanılan uygulamalar
Devops üsrecinde en sık kullanılan Uygulamalar aşağıdaki gibi sıralanabilir.
- Terraform
- Docker
- Docker Swarm
- Maven
- Jenkins
- Kubernetes
- Ansible
Özet
Yukarıda bahsettiğim gibi DevOps temelde insan kaynağı ,sistem kaynağı ve zaman yönetimini en iyi şekilde optimize etmenin ve BT organizasyonlarındaki iş yapış modelini geliştirmenin farklı ve hızlı bir yoludur.
Bu Metodoloji ile iş ve ürün geliştirme süreçlerinize hız katabilir yazılım ekibi ve operasyonel süreçleriniz arasındaki iletişim sorunlarını ortadan kaldırabilirsiniz.