Share via


TFS’in Özelleştirilmesi

PROBLEM TANIMI

  • Code Review Süreci,
    TFS 2015’in sunduğu code review süreci, checkout edilen kod için review request’i istenmesi ve isteğin incelenip cevap vermesi ile tamamlanmaktadır,
    Hali hazırda TFS’in sunduğu bu süreç code review yollanıp yollanmadığına ve sonuçlarının olumlu olumsuz olduğuna bakmaksınız checkin yapılmasına izin vermektedir,
    Checkin esnasında file’lar lock olduğu için changeset’e ait code review work item üzerinde bulunan dosyaların değişip değişmediği kontrol edilememektedir
  • Auto Review Süreci,
    Checkin sırasında Grup/Kişi/Folder/Team Project bazlı bazı kısıtlar istenmektedir, örnek kısıtlar;
    i. Forbidden Files,
    ii. Forbidden Folders,
    iii. Forbidden Extension-Folder,
    iv. Allowed Extensions,
    Bu kısıtların tanımlanması için TFS’in sistemi yeterli olmamaktadır, aksiyondan girilen herhangi bir proje yetki talebi bir otorite’den geçmeden alınabilmektedir.
  • TFS’in sunduğu Visual Studio ile entegre olabilen client side plugin’lerin kullanımı dağıtımda problem yaşabileceği için tercih edilmemektedir.
  • Çalışacak yapıya ait bazı konfigurasyonel paremetrelerin/yetkilerin tutulacağı bir yapıya ihtiyaç vardır, örnek;
    Codereview minimum kaç kişi tarafından onaylanmalı,
    Hangi team project’ler için code review süreci işletilmeli,
    Grup/Kullanıcı/Team Project/Folder/Yetki bilgileri,
  • Hazırlanacak yapının tek taraftan yönetilebilmesi adına work item policy ve comment policy gibi TFS’in sunduğu custom policy’lerinde yeni yapı üzerinde implemente edilmesi gerekmektedir,
  • Kullanılan branch yapısından dolayı Folder bazlı konfigurasyonlara ihityaç vardır TFS bunu destekleyememektedir. Team Project altındaki farklı development gruplarına ait farklı projeler bulunmaktadır
  • Gated checkinde unit test kontrolü yapılırken, tüm projede unit test kontrolü yapılması yerine sadece değişen dosyalara ait unit testlerin kontrolü yapılması adına, changeset’de bulunan dosyaların adı ve pathine ihtiyaç vardır.
  • Hazılanacak konfigurasyon yönetim veri sisteminin TFS’in default collection’ından farklı bir yerde tutulması gerekmektedir.

 

ÇÖZÜMLER

1) Code Review sürecinin yeniden tasarlanması,
a. Checkin notification evet üzerinde ilgili dosyalara erişilemediği için çalışma gated checkin içerisinde yapıldı,
b. Hali hazırda TFS’in code review süreci üzerine gated checkin sırasında araya girip code review kontrolü yapabilecek bir code activity projesi hazırlandı,
c. Hazırlanan proje içerisinde checkin yapılmak istenen file’lara ait code review bulunmadığına bakılır, code review bulunuyorsa, code review’lara ait response’lar analiz edilir, olumlu response’lara ait sayı tanımlı minimum olumlu response sayısından fazla ise checkin’e izin verilir.
d. Checkin izini sırasında file’lar üzerinde review sonrasında değişiklik olup olmadığına her bir dosyanın hash value’su kontrol edilerek bakılır.

2) Code Review öncesinde, checkin sırasında gated checkin öncesinde, checkin yapılan dosyalar ile alakalı kısıtları konumlandırmak için server side olan checkin notification eventi kullanıldı,
a. Checkin notification eventini içeren bir proje hazırlandı, hazırlanan proje TFS Server üzerinde plugins folder’ina library olarak eklenerek çalıştırılması sağlandı, herhangi bir şekilde client’lara dağıtılmasının önüne geçildi,
b. Kısıtlar implemente edilerek, herhangi bir kısıta uymayan dosyalar checkin sırasında red edilerek kullanıcıya bilgi verildi.
c. Kısıtların tanımlarına ulaşabilmek için bir başka proje daha hazırlandı.

3) Server Side hazırlanan checkin notification projesi ve gated checkin projeleri ile client üzerinde ekstra herhangi bir proje yazılmasına veya dağıtılmasına gerek kalmadı.

4) Konfigurasyon parametrelerinin ve yetkilerin tutulması için bir veri tabanı tasarlandı.

5) TFS’in sunduğu custom policy’ler yeni hazırlanan yapı üzerinde de implemente edildi.

6) Yetkilerin folder bazlı verilmesi sağlandı.

7) Gated checkin sırasında değişen dosyalara ait bilgilerin drop folder’da saklanmasını sağlayacak bir code activity yazıldı, gated checkin projesine dahil edildi.

8) Hazırlanan veri tabanı TFS’in default veritabanından ayrıştırıldı.

 

Veri Tabanı Tasarımı

Konfigürasyon parametrelerini saklamak için TFSConfiguration tablosu hazırlandı,

Grup ve User’lara ait bilgiler, CheckinGroups ve CheckinUsers tablolarında tutulmakadır,

Yetkilere ait bilgiler, CheckinPermissionTypes tablosunda bulunmaktadır,

CheckinUserFolder,CheckinUserFolderPermissions, CheckinGroupFolder ve CheckinGroupFolderPermissions tabloları ile permissionlar yönetilmektedir.

tfs_specialization

Solution Tasarımı

Hazırlanan .NET solution 4 farklı projeden oluşmaktadır.

CodeReviewBuildTemplate projesi ile code activity’ler build sırasında kullanılabilecek hale gelirler,
build sırasında alınması gereken BuildDetails gibi parametreler bu proje içerisinde verilir,

CheckinNotification Projesi ile checkinNotificationEvent yakalanır ve gerekli restrictionlar işletilir,

GatedCheckinReviewPolicy projesinde gatedCheckin’deki code review kontrol süreci işletilir,

PolicyConfiguration projesi ile tüm konfigürasyon bilgileri ve yetkiler veri tabanından alınır.