Sürekli Entegrasyon
6. Bozuk Build’i Hemen Düzeltin
Sürekli build yapabilmenin anahtarı ana branch’te gerçekleştirilen bir build hata aldıysa bunu hemen düzeltmektir. Sürekli Entegrasyon ile çalışmanın amacı stabil bir ortamda geliştirme yapmaktır. Ana branch’te bir build’in hata alması kötü bir şey değildir fakat sürekli olarak yaşanıyorsa bu yazılım geliştiricilerin yeterince dikkatli olmadıklarının göstergesidir. Yine de önemli olan nokta eğer bir build hata aldıysa bunun biran önce düzeltilmesidir. Böyle bir sorun genellikle ana branch’e gönderilen son kodun geri alınması ve kodu gönderen kişinin kendi makinesinde sorunu bulmasıyla çözülebilir.
7. Build’i Hızlı Tutun
Sürekli Entegrasyonun amacı hızlıca geri bildirim sağlamaktır. Eğer bir entegrasyon aktivitesi uzun sürüyorsa amacından sapıyor demektir. Martin Fowler, geliştirdikleri projelerde bir entegrasyon aktivitesinin 10 dakika sürdüğünü ve 1 saatlik bir entegrasyon aktivitesinin kabul edilemez olduğunu söyler.
Entegrasyon aktivitesinin -build işleminin- olabildiğince kısa tutulması çok önemlidir. Build işlemini 1 dakika daha az sürede gerçekleştirmek bile çok değerlidir. Çünkü her yazılım geliştirici ana branch’e kod gönderdiğinde bu işlem gerçekleşecek ve her yazılım geliştirici günde en az 1 defa kod gönderecektir. Bütün bu dakikalar alt alta toplandığında tasarruf edilecek zamanın miktarı çok büyük olacaktır.
8. Üretim Ortamının Klonunda Test Yapın
Test yapmanın amacı, ürünün üretim ortamında karşılaşabileceği sorunları elimine etmektir. Eğer üretim sisteminden farklı bir ortamda testler yapılırsa her farklılıkta doğabilecek riskler artmaktadır. Test ortamıyla üretim ortamının birebir benzer olması üretim ortamını simule etmenize ve ürün müşteriye ulaşmadan çıkabilecek sorunları görmenize yardımcı olur. Üretim ve test ortamında yazılım ve donanım aynı olmalıdır. Aynı veritabanı kullanılmalı, aynı işletim sistemi kullanılmalı ve aynı özelliklere sahip bilgisayarlardan yararlanılmalıdır. Hatta aynı IP adresi ve aynı port kullanılmalıdır.
Eğer bir masaüstü uygulamaya geliştiriyorsanız son kullanıcıların sahip olduğu kadar farklı işletim sistemine ya da donanıma sahip olmayabilirsiniz, şartları mümkün olduğunca zorlayarak bunu gerçekleştirmeye çalışmalısınız. Sanal makineler artık bunu yapmanızı daha da kolaylaştırıyor. Aynı donanım üzerinden birden fazla işletim sistemini kullanabilirsiniz böylece müşterilerinin sahip olduğu farklı olanakları test ortamınızda oluşturabilirsiniz.
9. Ürünün Çalışır Son Versiyonunu Almayı Herkes İçin Kolaylaştırın
Yazılım geliştirmenin en zor yönlerinden biri doğru yazılımın geliştirilmesidir. Bu nedenle yazılım geliştirme sürecine dahil olan herkesin ürün üzerinde geliştirilen en son özellikleri rahatça görebilecekleri bir versiyonun herkes tarafından erişilebilir olması çok önemlidir. Yazılım geliştirme sürecine dahil olan fakat yazılım geliştirici olmayan kişilerde geliştirilen ürünün son halini görebilmelidir. Ürünün son halini görüp neler geliştirildiğini görmek isteyebilir, araştırma yapabilir ve test yapabilirler.
10. Herkes Ne Olduğunu Görebilir
Sürekli Entegrasyon iletişimdir. Böylece herkes sistemin son halini ya da şimdiye kadar neler yapıldığını rahatça görebilir. İletişimin yapıldığı birinci konu ise ana branch üzerinde gerçekleştirilen build işleminin durumunun ne olduğudur. Sürekli Entegrasyon için kullanılan araçlar bir web sitesi ile gelirler ve yapılan build’i, bu web sitesi üzerinden herkes izleyebilir. Kimi kurumlar bunun daha da görselleştirmek isterler başarılı build’ler için yeşil ışık sorunlu build’ler için kırmızı bir ışık yakarlar. Kimi kurumlar daha eğlenceli yaklaşırlar olaya ve build yapan yazılım geliştiricinin makinesinin üzerinde plastikten bir horoz bulunur. Herkes build yapıldığını ve kim tarafından yapıldığını bilmiş olur.
Web sitesinin diğer bir avantajı ise aynı ofiste çalışmayan kişilerin build’in son durumu hakkında kolayca bilgi edinebilmesidir. Ayrıca tarihçesi tutulan sistemlerin hangi build’lerinin başarılı olduğu hangilerinin olmadığı ve neden olmadığı bilgisi de bulunmaktadır.
11. Teslimi Otomatize Edin
Sürekli Entegrasyon yapabilmek için birden fazla ortama ihtiyacınız vardır. Bir ortamda commit testlerini koşarken başka bir ortamda ikincil testler koşulmalıdır. Herhangi bir ortama kolayca teslim yapılabilmesi önemlidir.
Aynı şekilde otomatize edilmiş bir yapıyla üretim ortamına da kolayca teslim gerçekleştirilebilmelidir. Kolaylıkla üretim ortamına alınan projelerde hatalar çok daha çabuk tespit edilip çözüme kavuşturulur. Ayrıca otomatize edilmiş bir roll back yapısı da düşünülmelidir. Hızlıca çözülemeyen problemlerle karşılaşıldığında çalışan ürünün son haline dönüş yapılabilmelidir. Çalışan ürünün son haline kolayca dönüşler sağlamak insanların üzerindeki teslim baskısını alacaktır. Böylece çalışanlar geliştirdikleri özellikleri üretim ortamına almak için daha sık aralıklarla teslim gerçekleştirmeye gönüllü olacaktır. Bu yaklaşım pazarın hızla değiştiği ve pazara giriş zamanının önemli olduğu ortamlarda ürün ve şirket değerini artırıcıdır.
Sürekli Entegrasyon Faydaları
- Uzun ve yorucu entegrasyon işlemleri yok.
- Şeffaflığı artırır, daha iyi bir iletişim için olanak sağlar.
- Sorunlar çok daha çabuk bulunup çözülebilir.
- Debug yapmaya daha az, yeni özellikler eklemeye daha çok zaman ayrılır.
- Sürekli Entegrasyon yaparak daha sağlam temeller oluşturursunuz, sağlam temeller üzerine inşa yapıldığını bilmek güveni artırır.
- Kodun çalışıp çalışmayacağı ikilemi yaşanmaz.
- Kodlar daha sık iletildiği için entegrasyon problemleri azalır.
- Maliyeti düşüktür. Geleneksel yaklaşımla proje sonunda yapılan entegrasyon işleminin maliyeti ise çok yüksektir.
Sürekli Entegrasyon Nasıl Yapılır?
- Yazılım geliştirici ana branch’te bulunan kodu keni çalışma alanına içine çeker.
- Yazılım geliştirici geliştirme işini tamamladığında yapılan değişiklikleri ana branch’e gönderir.
- Sürekli Entegrasyon bilgisayarı, ana branch’i izler ve değişiklik olduğunda bunları kendi üzerine de alır.
- Build yapmaya başlar, birim ve entegrasyon testlerini koşar.
- Test edilmesi için yeni özellikleri teslim eder.
- Build edilmiş kodu versiyonlar ve koda bir build etiketi verir.
- Başarılı bir build’ten sonra yazılım geliştiricileri bilgilendirir.
- Eğer build işleminde bir hata alındıysa uyarı verir.
- İlk fırsatta sorun düzeltilir.
- Ürünün geliştirilmesi süresince entegrasyon işlemi ve testler devam eder.
Takım Sorumlulukları
- Yazılım geliştiricilerin geliştirdiği kodlar sık sık ana branch’e gönderilmelidir.
- Yazılım geliştiriciler kendi bilgisayarlarında build ve test yapmadan ana branch’e kodları göndermemelidir.
- Sürekli Entegrasyon bilgisayarı üzerinde bir build işlemi başladığında bu build’i başlatan yazılım geliştirici build bitene kadar beklemeli ve sorun yaşanmadığından emin olmalıdır.
Son olarak, Sürekli Entegrasyon, bir araç olmaktan öte bir tutum, bir davranış şeklidir. Başarılı olabilmesi için yukarıda belirtilen pratiklerin, sorumlulukların herkes tarafından bilinmesi ve uyulması gerekmektedir.
Hataları çözmez! Hataları olabildiğince çabuk tespit etmenizi ve çözmenizi sağlar. Böylece ürünle ilgili riskleri en aza indirir. Sürekli Entegrasyonu gerçekleştirebileceğiniz açık kaynak kodlu yazılımlar bulunduğu için herhangi bir maliyeti yoktur.
Serinin diğer yazısına buradan erişebilirsiniz.