Automatizované buildovanie softvéru

V bývalej práci som sa naučil, že je výborné mať na softvérovom projekte bug tracker (používali sme, a ešte stále používam(e) FogBugz), verziovanie zdrojového kódu (Subversion alebo Mercurial Hg) a automatické buildy (CuiseControl­.NET). Mám skúsenosť s tým, že firmy používajú repozitár so zdrojovým kódom a bug tracker systém, ale málokedy majú nainštalovaný a funkčný systém, ktorý zautomatizuje kompiláciu a nasadenie aplikácie. Súvisí to aj s tým, že buildovacie systémy sa komplikovane nastavujú a treba sa o ne starať viacej, ako Subversion repozitár či bug tracker.

Pri mojich prvých automatických buildoch, ktoré som mal možnosť konfigurovať, som používal NAnt. Kolega bol expert na Ant, NAnt a ostatné veci okolo projektového manažmentu a pred niekoľkým rokmi bol NAnt jediný spôsob, ako jednoducho napísať skript, ktorý skompiluje zdrojový kód, spustí unit testy, vytvorí balíček aplikácie (ZIP so súbormi webovej aplikácie, alebo spustí nástroje pre vytvorenie inštalačného balíčku) a zarchivuje výsledný build. Toto sú základné veci, ktoré sa zídu snáď na každom projekte a v dobe .NET 1.0 a 1.1 bolo v NAnt-e potrebné skriptovať kompiláciu na úrovni jednotlivých zdrojový súborov a manuálneho volania. V prípade C# projektu to znamenalo zobrať všetky .cs súbory a použiť csc.exe kompilátor, nájsť výslednú DLL/EXE assembly a niečo s ňou spraviť. Nevýhoda tohto postupu bola, že treba všetko ručne písať a Visual Studio robilo vlastnú kompiláciu podľa projektového súboru .csproj a NAnt robil druhú podľa vlastných nastavení. Bol to však vynikajúci a silný nástroj, ako celý proces zautomatizovať.

S .NET Frameworkom 2.0 prišiel systém MSBuild, ktorý sa stal základom pre kompiláciu nielen zdrojového kódu, ale celého projektu. MSBuild spracuváva projektové súbory (.csproj, .vbproj) vo formáte XML a okrem kompilovania dokáže aj spracovať resource súbory .resx, XAML súbory, digitálne podpísať assemblies a skopírovať výsledné súbory do výstupného priečinku. MSBuild obsahuje pre každý typ projektu vlastnú sadu úloh, ktoré vedia, ako správne konkrétny typ projektu spracovať. Windows aplikácie teda dokáže správne pripraviť na Click-Once nasadenie a webové aplikácie zase zabaliť do balíčku, ktorý je možné poslať na IIS a nasadiť tak aplikáciu na web. A ani poslanie tohto balíčku nemusíte robiť ručne – MSBuild obsahuje úlohu, ktorá automaticky pošle balíček na IIS server.

Visual Studio a MSBuild sú spolu integrované a preto čo zmeníte vo Visual Studiu, to sa prejaví v projektovom súbore a MSBuild ho rovnako spracuje aj pri spustení z príkazového riadku. Vývojári teda po zmene nastavení projektu môžu zmenený projektový súbor uložiť do repozitáru a keď sa na serveri spustí automatický build, tak si môžu byť istý, že bude spustený s novými nastaveniami a nemusia pracne prekonfigurovávať a prepisovať buildovacie skripty. MSBuild je súčasťou základnej inštalácie .NET Frameworku a nie je potrebné mať nainštalované Visual Studio pre jeho použitie. Toto sa však týka použitia základných úloh dostupných v MSBuild. Po nainštalovaní si Visual Studia a Windows SDK sa do MSBuild pridajú nový typy úloh, ktoré vedia pracovať s novými funkciami potrebnými pre správne zbuildovanie projektov (napr. sa nainštalujú nástroje pre kompiláciu Entity Framework súborov). Na build serveri teda je potrebné mať nainštalované Visual Studio a Windows SDK a udržiavať ich aktuálne – podľa toho, ako to vyžadujú použité funkcie v projektoch – ale integrácia s build systémami je veľmi jednoduchá, pretože na skomplikovanie projektu stačí spustiť msbuild.exe z príkazového riadku.

Priamu podporu pre MSBuild má CruiseControl.NET a aj TeamCity a samozrejme Team Foundation Server (a určite aj ďalšie systémy, ja však poznám iba tieto).

One thought on “Automatizované buildovanie softvéru

  • No, vo vacsich firmach moze byt problem, ze build trva aj niekolko hodin – potom niektore vyhody automatickeho buildu po kazdom commite – najma ak tych commitov za den je niekolko desiatok padaju. Totiz cakat niekolko dni kedy sa ten vas build dostane na rad nie je efektivne :) Ale nocne buildy to istia :)

Comments are closed.