TFS Team Foundation Build: Update Version

Jan Holan       25. 8. 2011       TFS       5873 zobrazení

V minulé části jsme změnou Build Template a úpravou projekt souborů přizpůsobily výstup Team Foundation Buildů. V této části si build proces rozšíříme o automatické generování file version u assembly souborů a změnu jména výstupního adresáře podle čísla verze.

K tomu využijeme dříve připravené MSBuild tasky:

Opět jako v minulé části provedeme některé změny v Build Template souboru. Pokud nechcete popisované změny provádět ručně, výsledná template je k dispozici ke stažení zde.

Provedeme následující kroky:

  1. Soubor XAML build template otevřeme do Workflow designeru.
  2. V sekci Arguments workflow designeru přidáme následující vstupní argumenty:
    TasksPath In String "c:\BuildBinaries"
    CheckInUpdatedVersion In Boolean False
    BaseVersion In String "1.0.0.0"
    ReleaseLocation In String  
  3. Označíme první sekvenci workflow Sequence a v sekci Variables přidáme proměnnou BuildVersion typu String.
  4. Nyní potřebujeme provést inicializaci proměnné BuildVersion. K tomu nám postačí aktivita Assign (ze sekce Primitives), která umožňuje zadat výraz pro nastavení proměnné (to je jednodušší, než tvořit vlastní aktivitu). Aktivitu umístíme do sekvence mezi aktivity Get the Build a Update Drop Location.
  5. Aktivitu pojmenujeme “Initialize BuildVersion”, parametr To aktivity nastavíme na BuildVersionValue nastavíme na následující výraz (výraz se definuje v jazyce VB): 
    New Version(Version.Parse(BaseVersion).Major, Version.Parse(BaseVersion).Minor, (DateTime.Today - New DateTime(2000, 1, 1)).Days, _
      (CInt(New TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second).TotalSeconds / 2))).ToString()

    InitializeBuildVersion
  6. Ještě provedeme změnu adresáře pro Drop Location, vyhledáme aktivitu ”Update Build Number for Triggered Builds” v “Update Drop Location”. Místo aktivity BuildNumberFormat použijeme opět Assign aktivitu, její jméno nastavíme na “Assign BuildNumber”, To na BuildDetail.BuildNumber a Value na BuildVersion.
    Tím jsme změnili, že umístění Drop adresáře bude následující:
    <Drop Location Root>\<Jméno buildu>\<Build verze>
  7. Vyhledáme aktivitu “Run MSBuild for Project” (v “Try Compile, Test, and Associate Changesets and Work Items” / “Try Compile and Test” / “Compile and Test” / “For Each Configuration in BuildSettings.PlatformConfigurations” / “Compile and Test for Configuration” / “If BuildSettings.HasProjectsToBuild” / “Compile the Project”).
  8. Změníme vlastnost CommandLineArguements na tento výraz:
    String.Format("/p:SkipInvalidConfigurations=true;TeamBuildOutDir=""{0}"";TasksPath=""{1}"";CheckInUpdatedVersion={2};BuildVersion={3} {4}",
            BinariesDirectory, TasksPath, CheckInUpdatedVersion, BuildVersion, MSBuildArguments)
    Tím budeme mít při volání MSBuildu kromě proměnných z minula ještě nastaveny hodnoty TasksPath, CheckInUpdatedVersion a BuildVersion, které se dále použijí při spouštění MSBuild tasků doplněných v projekt souboru. Nastavení provádíme z předem vytvořených argumentů a proměnné BuildVersion.
  9. Poslední úpravou build template bude rozšíření o možnost zkopírování výstupu buildu do nastaveného adresáře. Použijeme na to připravený vstupní argument ReleaseLocation, pokud bude nastavený, budeme provádět kopírování do cesty <ReleaseLocation>\<Build verze>.
    CopyToReleaseLocation
    Mezi aktivity “Run On Agent” a “Check In Gated Changes for CheckInShelveset Builds” v hlavní sekvenci vložíme aktivitu If (v sekci Control Flow) a do ní, do sekce Then vložíme aktivitu CopyDirectory. If pojmenujeme “If ReleaseLocation Is Set” a podmínku nastavíme na výraz:
    Not String.IsNullOrEmpty(ReleaseLocation)
    CopyDirectory pojmenujeme “Copy To Release Location”, source nastavíme na: BuildDetail.DropLocation a Destination na: System.IO.Path.Combine(ReleaseLocation, BuildVersion).

Úpravu build template XAML souboru máme hotovou, soubor zavřeme a uložíme a nesmíme zapomenou provést jeho Check In.

V definici buildu v záložce Process nyní nově přibydou nastavení CheckInUpdatedVersion, TasksPath, BaseVersion a ReleaseLocation. CheckInUpdatedVersion určuje, zda se má změněná verze v souborech AssemblyInfo uložit na server, TasksPath nastavuje cestu, kde je na build serveru umístěna assembly s našimi MSBuild tasky. BaseVersion slouží pro nastavení Major a Minor čísel verze, které se použijí v názvu výstupního adresáře. A poslední ReleaseLocation slouží k nastavení cesty, do které se verze zkopíruje (pokud bude nastavena).

Do projekt souborů buildovaného solution také přidáme (pokud jsme to již neprovedli) volání MSBuild tasků UpdateVersion a GetLatestAssemblyInfo tak jak bylo popsáno ve článku Update Version MSBuild Task s podporou TFS SC (změna spočívá v přidání definice UsingTask a v úpravě sekcí BeforeBuild a AfterBuild).

Při volání tasku UpdateVersion se použijí připravené parametry CheckInUpdatedVersion a BuildVersion. Tím, že je číslo verze vygenerováno již ve workflow a je předáno do parametru tasku UpdateVersion, je zajištěno, že pokud buildujeme více solutions, bude jejich verze stejná.

V definici buildu je dále možné nastavit TasksPath, cestu na assembly našich MSBuild tasků. Do nastaveného adresáře (c:\BuildBinaries) je nutné na build serveru nahrát používanou knihovnu VersionBuildTask.dll.

Výsledek nyní tedy je, že v Drop Folder automatizovaného buildu máme adresář pojmenovány vygenerovaným číslem verze (.NET konvencí) a stejné číslo verze mají i všechny vytvářené assembly ve všech buildovaných solutions. Dále je také možné nastavit adresář, do kterého bude výstup zkopírován.


Některé odkazy, kterými jsem se inspiroval při změně build template:
http://blogs.msdn.com/b/willbar/archive/2010/01/21/generating-custom-build-number-in-tfs-build-2010.aspx http://geekswithblogs.net/jakob/archive/2010/09/01/tfs-team-build-2010-how-to-place-the-build-output.aspx http://www.wintellect.com/cs/blogs/jrobbins/archive/2009/11/09/tfs-2010-build-number-and-assembly-file-versions-completely-in-sync-with-only-msbuild-4-0.aspx

 

hodnocení článku

0 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback