Bu ay içerisinde yazılım geliştirme ortamımızda ciddi değişiklikler yaptık. Öncelikli olarak birincil uygulama geliştirme platformu olarak Play! Framework 1.2.4‘ü seçmiş durumdayız. Neden Play! ve neden Play! 2 değil başka bir yazının konusu olacak kadar uzun. Kısaca özel olarak istek gelmedikçe JEE’den (Seam ve Spring) uzak durmak gibi bir hedefimiz var. Bununla beraber hala Django’yu da takip etmeye devam ediyoruz ve bizim ikincil uygulama geliştirme framework tercihimiz.
Play! ile beraber artık subversion’ı terk edip git kullanmaya başladık. Git’i tercih etme sebeplerimizden en önemlisi “Gerrit” sunucusudur. Her ne kadar git bizim kullanım alışkanlıklarımıza ters düşse de alışkanlıklarımızın da evrilmesini sağlayarak bu sisteme uyum sağlayacağımız konusunda şüphelerimiz yok. Gerrit sunucusu sadece bir git sunucusu olmaktan öte bir “code review” (kod inceleme) sunucusu. Jenkins ile entegre ettiğimiz bu sunucu aslında bizim şu ana kadar olan tüm alışkanlıklarımızı değiştirmeye aday durumda.
Bu durumdaki iş akışlarımız ise şu şekilde olmaya başladı
- Geliştirici yazdığı Play! kodları için JUnit ve Functional testlerini de yazar
- Geliştirici kendi ortamında git ile versiyonlama yapar
- Geliştirici Gerrit sunucusuna değişikliklerini “Push” eder
- Gerrit gönderilen değişiklikleri Jenkins sunucusuna iletir
- Jenkins son değişikliklerle birlikte kodu compile eder ve testleri çalıştırır
- Jenkins sonucu Jabber ile geliştiricilere iletir ve Gerrit’i sonuçtan haberdar eder
- Eğer Gerrit, Jenkins’den “hata yok” mesajını alırsa kodu incelemeye açar
- İnceleyen kişi onay verirse kod “Master” dala Gerrit tarafından commit edilir
- Bu süreç içerisinde bir hata oluşursa, hatalı versiyon için Gerrit’e düzeltme patch’i gönderilir
Bu süreç içerisinde artık testler daha da önem kazanmakta. Testleri geçmemiş kod review alamadığı ve ana branch’e geçemediği için kod kalitesinde ciddi bir artış beklemekteyiz. Aynı şekilde review sürecinin sisteme eklenmesi daha ufak commit’lerin yapılmasına sebep olacağını düşünmekteyiz. Zira kodu inceleyen kişi çok uzun commitleri incelemekte zorluk yaşayacaktır.
Bu süreç içerisindeki sıkıntı ise Redmine ile Gerrit entegrasyonundan kaynaklanmakta. Redmine pek de düzgün olmayan bir şekilde “git repository browsing” yapmakta. Bu konu ile de bir iki farklı yaklaşımı gözden geçirmekteyiz.
Bu şekilde bir sistem değişikliği sancılı olmakla birlikte iyi sonuçlar alacağımız konusunda kendimize güvenimiz tam.