lørdag den 6. juni 2009

MSBuild og custom Tasks

Vi bruger MSBuild som basis for vores natlige build og test af vores aktive projekter. Man kan læse mere om de overordnede koncepter omkring MSBuild her.

De fleste af de projekter som kører i denne natlige cyklus løber igennem en række faste punkter og enkelte projekter har derudover en række special punkter. De faste punkter er typisk:

  1. Hent den seneste code fra source control
  2. Opdater versionen og tag source control så den præcise kode benyttet til at udføre det givne build kan hentes igen på tagget
  3. Compiler de konkrete projekter og producer konkret output i form af executables og assemblies
  4. Kør tests på de compilede assemblies
  5. Zip alt output sammen og kopier til netværksdrev
  6. Send email med rapport til et antal modtagere

Rimelig standard cyklus som producerer konkret output der kan benyttes og en rapport og en email der fortæller om kvaliteten af den natlig build. De fleste af disse punkter kan opnåes ved at kombinere de eksisterende Tasks der bliver leveret med MSBuild og Tasks fra allerede eksisterende biblioteker der kan hentes f.eks. her og her.

Helt afhængig af det konkrete projekt er der dog typisk en række andre punkter som indgår i listen af punkter i den natlige build. Nogle af disse punkter kunne vi ikke helt opfylde med eksisterende Tasks og vi har derfor implementeret en række custom Tasks som opfylder vores behov. Det er meget nemt at implementere sådanne custom Tasks og inkludere dem i vores autobuild cyklus. Du kan finde en god og hurtig introduktion til hvordan custom Tasks kan implementeres her.

Nogle eksempler på custom Tasks som vi har kørende er:

  • SourceHeaderTask som indsætter en konfigurerbar header i vores kildekode filer som f.eks. en copyright notice
  • CodeInspectTask som ud fra et regulært udtryk kan løbe vores kildekode igennem og finde linjer med f.eks. TODO som indikerer hvad vi mangler at tage hånd om
  • PB6Task som er en Task vi gør meget brug af i vores device projekter da den kører PlatformBuild 6 og bygger CE images og SDK
  • SolutionFileParserTask som ud fra en solution file returnerer alle file inkluderet i alle project i denne solution. Denne task bruges primært til at få et håndtag til alle disse filer som kan sende ind i andre Tasks så som SourceHeaderTask nævnt ovenfor
  • PEVerifyTask som kører PEVerify for at sikre at vores assemblies er IL korrekte hvilket er vigtigt specielt hvis IL manipuleres direkte af f.eks. obfuscatorer eller ILMerge

Ud over disse tasks har vi også implementeret en custom logger som hjælper os med at producere en god rapport og sikrer at emails sendes ud selv om enkelte skridt i listen måtte fejl. Læs mere om custom logger i MSBuild her.

0 kommentarer:

Send en kommentar