20 Haziran 2014 Cuma

TFS Build yapılandırması: Bir günlük israf.

* TFS 2013 kullanılmıştır.

Visual Studio - TFS entegrasyonunda check-in kalitesini arttırmak için Build servisi belirli kurallara göre yapılandırılabilir.

10 dakikalık yapılandırmadan sonra sistemi çalışır hale getirmek için harcanacak bir günlük iş detayı 2. bölümde...

Genel yapılandırma ve ayarlar


TFS Administration Console'da Build Configuration sekmesinde servis ayarlarını "tfs service" kullanıcısından farklı bir kullanıcı ile aktif ettikten sonra (örn: Network Service, önerilen) Visual Studio Team Explorer'da istenen Proje için Builds > "New Build Definition" üzerinden istenen özelliklerde Build tanımlanır.

Servis kurulum detayları için : http://msdn.microsoft.com/en-us/library/ee259683.aspx





TFS Administration Console son durum:


Visual Studio üzerinde yeni Build Definition tanımlama:



Build ayarlarından Trigger sekmesinde hangi türde Build yapılacağı tanımlanıyor:
- Manual : İstendiğinde Team Explorer'dan başlatılabilir.
- Continous Integration : Her bir ekip üyesinin yaptığı her check in de Build başlatılması. Böylece geliştiricilerin birbiriyle uyumsuz compile time hataları check in yapıldığı zamanda yakalanır.
Gated Check-in : Ekip üyelerinin ısrarla problemli check-in yaptığı durumlarda işi daha katı bir kurala bağlamak için, her check in yapılırken önce localde başarılı merge ve build gerektirme sağlamak için.




Source Settings'de hangi solution (.sln)'ın Build'e dahil edilecek belirtiliyor.
Build Defaults'da Build çıktısının nereye konulacağı tanımı,
Process'de Build öncesi, build anı ve sonrası için tanımlamalar var.
Örneğin Compile'dan sonra Unit Testlerin çalıştırılması ya da Code Analysis raporu üretmek.

2. Bölüm : Tanımlanan Build'i düzgün çalışır hale getirmek


-Build tanımlanırken ilk çıkacak hata referans edilen Nuget paketleriyle ilgili olacaktır.
Yapılması gereken burda anlatıldığı üzere alttaki komutu çalıştırmak:
"nuget.exe restore path\to\my\solution.sln"
Detay
http://blogs.msdn.com/b/dotnet/archive/2013/08/12/improved-package-restore.aspx

Bunun için nuget.exe, target ve config dosyalarını da projeye eklemek gerekli.

-Permission hatası çıkarsa Build servis in tanımlı olduğu kullanıcı için C:\Build dizini ve alt dizin / dosyaları için tam yetki vermek gerekiyor. (ideal olmayan tanım)

-Aşağıdaki hata muhtemelen bu dizin üzerinde açık bir windows explorer içindir.
"Exception Message: The process cannot access the file 'C:\Builds\1\aaaa\src\bbbb\Main\Source\cccc\ddd\.nuget' because it is being used by another process. (type IOException)"


-Build sonrasında çıkan bir hata Solution dosyasında belirtilen Visual Studio versiyonun TFS sunucusunda olmaması.
Bu dizinde hangisinin kurulu olduğu görülebilir.
"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio"

Çıkan hata:
"C:\Builds\1\aaaa\bbb\src\ccc\Main\Source\ddd.WebUI\ffff.WebUI\kkkk.WebUI.csproj (1552): The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk."

Bu durumun çözümü ilgili Visual Studio versiyonunu kurmak yada daha basitçe var olan target için Buıild Definition/Process ayarlarında MSBuild Arguments da aşağıdaki değer gibi tanımlamak
/p:VisualStudioVersion=10.0

-Geliştirme yapılan ortam da var olan ama TFS sunucusunda kurulu olmayan .Net Framework sürümü.
Örneğin geliştirme yapılan windows da .NET 4.5.1 var ama TFS Build sunucusunda kurulu değilse Redistributable değil multitargeting pack kurulmalı:
http://www.microsoft.com/en-us/download/details.aspx?id=40772
Veya burdaki istenen versyion geliştirme yapılan ortamdan  Build sunucusunda aynı dizin altına kopyalanabilir:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework

-Bir diğer problem eğer projelerinizden biri Microsoft.Bcl.Build'i referans ediyorsa o proje için hata alınacaktır.
Hata: The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568

Çözüm o proje dosyasındaki (.proj) ilgili import ve target tanımını silmek (ideal olmayan yol)
Silinecek satırlar




İlgili nuget paketi update edildiğinde ilgili proje için aynı işlemi tekrar yapmak gerekecek.

Konuyla ilgili linkler:

http://blogs.msdn.com/b/dotnet/archive/2013/06/12/nuget-package-restore-issues.aspx
http://docs.nuget.org/docs/reference/package-restore-with-team-build (TFS 2013 öncesi için olduğu notu düşülmüş)


-Build e engel olmayan ama Warning üreten hata:
Found conflicts between different versions of same dependent. (Solution'daki projelerde kullanılan bir library'nin farklı sürümlerinin referansledilmesi durumu.)
http://social.msdn.microsoft.com/Forums/vstudio/en-US/faa1b607-50bb-48e3-bd5d-76f4fc02ad4c/ms-build-gives-warning-msb3247-found-conflicts-between-different-versions-of-same-dependent?forum=msbuild

http://stackoverflow.com/questions/18950949/tfs-build-2012-asp-net-mvc-msb3247-found-conflicts-between-different-version

Hiç yorum yok: