DevOps kesin bir tanıma sahip olmasa da neyi kapsayıp, neyi kapsamadığı konusunda birçok fikir vardır.
DevOps Tanımlarından Bazıları Şöyledir:
- DevOps, IT bölümleri içindeki farklı disiplinlerin (developers & operations) sağlam bir güven ilişkisi ve etkili iletişim üzerinden beraber çalışmasıdır.
- DevOps, bir felsefe, bir kültürel yaklaşımdır. Yazılımcılar (dev) ve sistem yöneticileri (ops) arası etkili iletişimi teşvik eder.
- DevOps, yazılımcılar (dev) ve sistem yöneticilerinin (ops); tasarım, geliştirme, test ve yüklemeden oluşan yazılım yaşam döngüsünde ve daha sonrasındaki destek aşamasında da ortaklaşa çalışmaları için gerekli faaliyetlerin bütününü temsil eder.
- DevOps, yazılımcıların (dev) kendi sistemlerinin çalışması için kullandığı tekniklerin, sistem yöneticileri (ops) tarafından da kullanılmasıdır. Bu araçlar, kaynak kodu kontrolünden (source code control) teste, oradan Agile geliştirme süreçlerine (Agile development processes) kadar uzanır.
“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 kapsamı olup sistem mühendisleri, sistem yöneticileri, sürüm mühendisleri, veritabanı yöneticileri (DBAs), network mühendisleri, güvenlik uzmanları ve daha birçok değişik alt disiplinler için kullanılır.
DevOps Nasıl, Hangi İhtiyaçtan Ortaya Çıktı?
Eskiden “Dev” ve “Ops” birbirinden kopuk olarak çalışırken istenilen çeviklik elbette sağlanamıyordu, yazılım geliştiren şirketler kendi içlerinde verimsizlik yaşıyor ve nihayetinde müşteriler de durumdan memnun olmuyordu. Geciken projeler, hatalı ürünler, başarısız sürüm denemeleri, boşa harcanan para ve zaman, itibar kaybı… DevOps, işte bu gidişata dur diyecek bir hareket olarak ortaya çıkmış ve yazılım geliştiriciler (dev) ve sistem yöneticileri (ops) arasındaki iletişimi, işbirliğini ve bütünleşmeyi (entegrasyonu) vurgulamayı esas edinmiştir. Sonuç olarak, şirketlerin IT hizmetleriyle beraber yazılım ürünlerinin de daha hızlı ve daha sık teslim edilebilir (continuous delivery) olmasına yardımcı olmaya başlamıştır
DevOps ve Agile
DevOps Yaşam Döngüsü
DevOps Yaşam Döngüsü Aşağıdaki Gibidir:
- Kod, kaynak kontrol sistemine aktarılır (check in)
- Kod, derlenmek için kaynak kontrol sisteminden çekilir (pull)
- Testler çalıştırılır. Sürekli entegrasyon (continuous integration) sunucusu, yapıları (build) ve sürümleri (release) üretir. Entegrasyon ve kullancı testleri yapılır
- Testleri geçen çıktılar (artifacts) ve yapılar (build) depolanarak saklanır
- Otomatik bir sürümleme (release) aracı kullanılarak dağıtım yapılır
- Ortam (environment) konfigüre edilir
- Veritabanları güncellenir
- Uygulamalar güncellenir
- Test edilmiş uygulamalar kullanıcılara bir kesinti yaşamalarına gerek kalmadan aktarılır
- Uygulama ve ağ performansı izlenir (monitoring) ve sorunlar oluşmadan engellenmeye çalışılır
- Her adım biraz daha iyileştirilerek baştan alınır
DevOps kullanılarak, bir geri dönüş (feedback) döngüsüyle ürünlerin sürekli olarak dağıtımı (deployment) şu aşamaların yürütülmesi ile gerçekleşir:
- Altyapı Otomasyonu
- Konfigürasyon Yönetimi
- Dağıtım Otomasyonu
- Altyapı İzleme
- Log Yönetimi
- Uygulama ve Performans Yönetimi
DevOps’un Faydaları
DevOps ile gelen en büyük değişim, eskiden ayrık çalışan ve farklı becerilere sahip takım üyelerinin; geliştiriciler, veritabanı yöneticileri, sistem yöneticileri, sistem analistleri vb.; bir araya gelip tek bir takım oluşturması olmuştur. Farklı rollerdeki bu işbirliğinin birçok avantajı vardır.
Teknik Faydaları
- Sürekli teslim (continuous delivery)
- Düzeltilecek sorunların daha az karmaşık olması
- Sorunlara daha hızlı çözümler
İşletmeye Olan Faydaları
- Ürün özelliklerinin daha hızlı teslimi
- Daha istikrarlı, stabil çalışan sistemler
- Sorun gidermekten daha çok, iyileştirme için zaman ayırma
DevOps Araçları
Veritabanı
- MySql: https://www.mysql.com/
- MongoDB: https://www.mongodb.org/
- PostgreSQL: http://www.postgresql.org/
- Capistrano: http://capistranorb.com/
- Go: https://www.go.cd/
- Juju: https://jujucharms.com/
- New Relic: http://newrelic.com/server-monitoring
- Sensu: https://sensuapp.org/
- git: http://git-scm.com/
- Apache Subversion: https://subversion.apache.org/
- Github: https://github.com/
- Bitbucket: https://bitbucket.org/
- Gradle: http://gradle.org/
- Jenkins: http://jenkins-ci.org/
- Maven: https://maven.apache.org/
- Grunt: http://gruntjs.com/
- sbt: http://www.scala-sbt.org/
- Nexus: http://www.sonatype.com/nexus/solution-overview
- Archiva: https://archiva.apache.org/index.cgi
- Nuget: https://www.nuget.org/
- Jenkins: http://jenkins-ci.org/
- Bamboo: https://www.atlassian.com/software/bamboo/
- Travis: https://travis-ci.org/
- TeamCity: https://www.jetbrains.com/teamcity/
- Tomcat: http://tomcat.apache.org/
- Jetty: http://www.eclipse.org/jetty/
- Geronimo: http://geronimo.apache.org/
- Amazon Web Services: https://aws.amazon.com/
- Azure: https://azure.microsoft.com
- Jelastic: https://jelastic.com/
Mini Türkçe-İngilizce Sözlük
Yöntembilim: methodology
Dağıtım: deployment
Sürüm: release/version
Sürekli teslim: continuous delivery
Döngü: loop
Kullanıcı deneyimi: user experience
Çeviklik: agility
İşbirliği: collaboration
Bütünleşme: integration
Geliştirici: developer/software developer