Continuous Integration

830 views
755 views

Published on

CruiseControl.Net and MSBuild.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
830
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Continuous Integration

  1. 1. CruiseControl.Net, MSBuild, Ant Průběžná integrace Automatizace buildu June 7, 2009 Presentation
  2. 2. Agenda <ul><li>CruiseControl.Net </li></ul><ul><li>MSBuild </li></ul><ul><li>Ant (Jakub Neubauer) </li></ul>June 7, 2009 Presentation
  3. 3. June 7, 2009 Presentation 1. CruiseControl.Net
  4. 4. CruiseControl.Net June 7, 2009 Presentation SVN CruiseControl.Net Dušan Radek Pepa commit update check for changes
  5. 5. CruiseControl.Net - fíčuras <ul><li>ccnet.thoughtworks.com </li></ul><ul><li>Port CruiseControl (java) </li></ul><ul><li>Nástroj na automatizované spouštění prakticky čehokoliv </li></ul><ul><li>B ěží jako service, pro ladění console </li></ul><ul><li>Podporuje mnoho VCS systémů </li></ul><ul><li>Podpora více „projektů“ </li></ul><ul><li>Fronty </li></ul><ul><ul><li>V rámci jedné fronty jsou projekty spouštěny sekvenčně </li></ul></ul><ul><li>Server, Dashboard, CCTray </li></ul><ul><li>Přímá podpora MSBuild a NAnt </li></ul>June 7, 2009 Presentation
  6. 6. CruiseControl.Net - konfigurace <ul><li>Konfigurace v XML souboru ccnet.config </li></ul><ul><li>Triggers – kdy se integrace spouští </li></ul><ul><ul><li>Schedule Trigger – např. pro noční build </li></ul></ul><ul><ul><li>Interval Trigger – když nastane změna </li></ul></ul><ul><ul><li>Project Trigger, Url Trigger </li></ul></ul><ul><li>Source Control </li></ul><ul><ul><li>Jaká adresa ve VCS se monitoruje </li></ul></ul><ul><li>Prebuild – příprava před integrací </li></ul><ul><ul><li>např. stažení dalších knihoven </li></ul></ul><ul><li>Tasks – vlastní integrace </li></ul><ul><ul><li>Spuštění build skriptu </li></ul></ul><ul><li>Publishers – reporty </li></ul><ul><ul><li>Merge XML souborů, maily, statistiky </li></ul></ul>June 7, 2009 Presentation
  7. 7. CruiseControl.Net – best practices <ul><li>Build script nezávislý na CCNet </li></ul><ul><ul><li>Integrační proces musí být spustitelný z vývojářova PC </li></ul></ul><ul><li>Konfigurace a nástroje ve VCS </li></ul><ul><ul><li>Auto-konfigurace </li></ul></ul><ul><li>Integrate Often – every few hours </li></ul><ul><ul><li>Čím dříve se na problém přijde, tím snadněji se odstraní </li></ul></ul><ul><li>Žádný commit když je broken build </li></ul>June 7, 2009 Presentation
  8. 8. CruiseControl.Net – antipatterns <ul><li>Pomalý integrační proces </li></ul><ul><ul><li>Vývojář by měl dostat info do 10 minut </li></ul></ul><ul><ul><li>Unit testy (skutečná izolace) </li></ul></ul><ul><ul><li>Inkrementální build </li></ul></ul><ul><ul><li>Rychlý stroj </li></ul></ul><ul><li>Update a commit po dlouhé době </li></ul><ul><li>Broken build nikomu nevadí </li></ul><ul><ul><li>Don't leave &quot;broken windows” </li></ul></ul>June 7, 2009 Presentation
  9. 9. CruiseControl.Net – další hračky <ul><li>Vista Sidebar Gadget link </li></ul>June 7, 2009 Presentation Big Visible Cruise link The Orb (Build Indicator Lamp) link ...a další link
  10. 10. CruiseControl.Ne t <ul><li>Odkazy </li></ul><ul><li>CruiseControl.Net </li></ul><ul><li>http://ccnet.thoughtworks.com/ </li></ul><ul><li>Fowler: Continuous Integration </li></ul><ul><li>http://martinfowler.com/articles/continuousIntegration.html </li></ul><ul><li>Redefine Your Build Process with CI </li></ul><ul><li>http://msdn.microsoft.com/cs-cz/magazine/cc337886(en-us).aspx?pr=blog </li></ul><ul><li>CI Antipatterns </li></ul><ul><li>http://www.ibm.com/developerworks/java/library/j-ap11297/ </li></ul><ul><li>Pr ůběžná integrace a CCNet </li></ul><ul><li>http://www.vyvojar.cz/Articles/556-prubezna-integrace-a-cruisecontrol-net.aspx </li></ul><ul><li>Dotazy? </li></ul>June 7, 2009 Presentation
  11. 11. June 7, 2009 Presentation 2. MSBuild
  12. 12. MSBuild <ul><li>Command-line nástroj pro automatizaci buildu </li></ul><ul><li>Součást .NET Framework </li></ul><ul><li>Umí buildit VS *.csproj a *.sln soubory </li></ul><ul><li>„ Něco jako Ant“ :-) </li></ul><ul><li>Shodný build systém jako VS2005 </li></ul><ul><li>Rozšiřitelný DLL knihovny s vlastními Tasky XML „knihovny“ Targetů </li></ul>June 7, 2009 Presentation
  13. 13. MSBuild – základy <ul><li>Build script ve formátu XML </li></ul><ul><li>Stejný formát jako VS *.csproj </li></ul><ul><li>Doporučená přípona: *.proj </li></ul><ul><li>Struktura souboru </li></ul><ul><li>Import jiných souborů </li></ul><ul><li>Deklarace Properties – dají se nastavit i z příkazové řádky nebo environment vars </li></ul><ul><li>Deklarace Items a jejich metadat (well-known item metadata) </li></ul><ul><li>Targets – pojmenované úkoly, které lze selektivně spouštět, jsou na sobě závislé </li></ul><ul><li>Targety se skládají z Tasků </li></ul>June 7, 2009 Presentation
  14. 14. MSBuild – built-in tasks June 7, 2009 Presentation MSBuild Task Reference
  15. 15. MSBuild – proměnné a items <ul><li>$(propertyName) - Odkaz na property </li></ul><ul><li>@(itemName) - Odkaz na kolekci items </li></ul><ul><li>%(itemName.metadata) - Vlastnost items </li></ul><ul><li>@(itemName->’…’) – Transformace items </li></ul>June 7, 2009 Presentation @(BuiltAssemblies) Gmc.Ginger.Data.dll, Gmc.Ginger.Domain.dll @(BuiltAssemblies->'$(ResultsPath)%(Filename).FxCop.xml') ResultsGmc.Ginger.Data.FxCop.xml, ResultsGmc.Ginger.Domain.FxCop.xml
  16. 16. MSBuild – customizace <ul><li>Cesty k nástrojům a nastavení prostředí může mít každý jinak – je zapotřebí mít možnost je měnit bez zásahu do build skriptů </li></ul><ul><li>Parametry příkazové řádky – pro jednorázovou změnu </li></ul><ul><li>Build.user – trvalé nastavení prostředí, importován v build skriptech </li></ul>June 7, 2009 Presentation
  17. 17. MSBuild – batching <ul><li>Podle použitých metadat prvků kolekce rozdělí MSBuild prvky do dávek a spustí task pro každou dávku zvlášť </li></ul><ul><li>Díky tomu nejsou potřeba cykly </li></ul><ul><li>Task Batching – na úrovni tasku </li></ul><ul><li>Target Batching – pomocí Inputs a Outputs, pro inkrementální build </li></ul>June 7, 2009 Presentation
  18. 18. MSBuild – incremental build <ul><li>Target má vlastnosti Inputs a Outputs Pokud jsou soubory specifikované v Inputs starší než soubory Outputs, target bude přeskočen </li></ul><ul><li>Pokud je na vstupu kolekce , target bude spuštěn pouze pro prvky, pro které neexistuje output nebo je starší než input </li></ul>June 7, 2009 Presentation Inputs Outputs Gmc.System.dll -> ResultsGmc.System.FxCop.xml Gmc.Ginger.Data.dll -> ResultsGmc.Ginger.Data.FxCop.xml Gmc.Ginger.Domain.dll -> ResultsGmc.Ginger.Domain.FxCop.xml
  19. 19. MSBuild – rozšiřitelnost <ul><li>Knihovny Targetů Např. Gmc.targets, UnitTest.targets v projektu Ginger </li></ul><ul><li>Vlastní Tasky Např. MSBuild Community Tasks šikovné pro práci s XML a XSLT, nahrazování řetězců, SQL, SVN... </li></ul><ul><li>Vlastní Logger – MSBuild mu přeposílá události během buildu CruiseControl.Net poskytuje vlastní logger, který formátuje build log do XML </li></ul>June 7, 2009 Presentation
  20. 20. MSBuild – co vše lze spouštět <ul><li>Co zahrnuje automatický build projektu Ginger: </li></ul><ul><li>Automatické vyhledání projektů (*.csproj) v produktu </li></ul><ul><li>Automatické přidání test projektů pro všechny projekty </li></ul><ul><li>Kompilace </li></ul><ul><li>Instalace (řešeno přes vlastní Target) </li></ul><ul><li>Unit testy s měřením coverage (per project) </li></ul><ul><li>Statická analýza pomocí FxCop </li></ul><ul><li>Analýza závislostí mezi DLL knihovnami </li></ul><ul><li>Zpracování a publikování HTML reportů </li></ul>June 7, 2009 Presentation
  21. 21. MSBuild <ul><li>Odkazy </li></ul><ul><li>MSBuild Overview </li></ul><ul><li>http://msdn.microsoft.com/en-us/library/wea2sca5.aspx </li></ul><ul><li>MSBuild Reference </li></ul><ul><li>http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx </li></ul><ul><li>An Introduction to MSBuild </li></ul><ul><li>http://www.codeproject.com/KB/books/msbuild.aspx </li></ul><ul><li>Dotazy? </li></ul>June 7, 2009 Presentation
  22. 22. June 7, 2009 Presentation PS: Kdo proboha vymyslel Office 2007???! Thank You.

×