Technologická středa Continuous Integration with Maven and Hudson Vlastimil Menčík
© 2009 ET NETERA a.s. Continuous Integration Obsah 1.Motivace 2.Hudson 3.První pokus o CI 4.Maven 5.Druhý pokus o CI 6.Integrační testy
© 2009 ET NETERA a.s. Continuous Integration Motivace Všeobecně známá: Automatizace buildů, testování a deploymentu Včasné odhalení chyb Ušetření práce developerů, maintainerů i administrátorů Není potřeba shánět „někoho, kdo to buildne“ Úspora času a nervů
© 2009 ET NETERA a.s. Continuous Integration Hudson Open source CI nástroj Běží v servletovém containeru Podporuje SCM nástroje (CVS, SVN a další) Umí spouštět ant, maven, případně custom shell skripty Buildy lze plánovat časově, sledovat změny v SCM, případně spouštět řetězově
© 2009 ET NETERA a.s. Continuous Integration Hudson + ant Necháme Hudson buildovat naše projekty tak, jak jsou Jenom „trochu“ upravíme antovský buildfile Problém: už jsme mimo prostředí Eclipse Musíme kompilovat Musíme definovat kompilační classpath Musíme tedy udržovat classpath pro Eclipse i pro ant Uděláme další plugin do antu, který do bude dělat za nás?
© 2009 ET NETERA a.s. Continuous Integration Ukázka – JNP_JASPER_REPORTS
© 2009 ET NETERA a.s. Continuous Integration Hudson + ant Hlavním problémem jsou závislosti Udržovat classpath pro Eclipse i pro Hudson Hudson musí mít přístup do installu Pokud nechceme commitovat jary do SCM Dohromady ale získáme jenom automatizaci buildu Všechno další (řešení závislostí, spouštění testů, deployment) si musíme vyřešit sami v antu Tato cesta znamená hodně „programování“ v antu
© 2009 ET NETERA a.s. Continuous Integration Apache Maven Buildovací nástroj Koncepce se ale od Antu výrazně liší Convention over configuration Project Object Model (POM) Popis projektu – ne procedurální zápis buildu Obsahuje závislosti na dalších projektech Životní cykly buildu Fáze Pluginy
© 2009 ET NETERA a.s. Continuous Integration Maven - repositáře Centrální - Lokální – slouží hlavně jako cache Lze přidávat další V POMu V nastaveních instalace Mavenu Typicky firemní repositář a repositáře třetích stran Podpora proxování
© 2009 ET NETERA a.s. Continuous Integration Maven - pluginy Pugin má několik cílů (goals) MOJO = implementace cíle pluginu Cíle bývají automaticky spojené s určitou fází buildu Např. surefire:test s fází test Pluginů je hodně Jedním z nich je antrun – lze tedy volat ant Můžeme si napsat vlastní
© 2009 ET NETERA a.s. Continuous Integration Maven – integrace do IDE Plugin do Eclipse – m2eclipse Grafický editor POMu Spouštění buildů Vyváření Maven projektů Přidání závislostí do Eclipse classpath projektu
© 2009 ET NETERA a.s. Continuous Integration Ukázka – mavenized JNP_JASPER_REPORTS
© 2009 ET NETERA a.s. Continuous Integration Hudson + Maven Externí závislosti a classpath vyřešil přímo Maven Maven má i spoustu dalších výhod Tranzitivní závislosti ušetří spoustu času Na čem všem závisí Hibernate? Méně „programování“ v Antu Je potřeba řešit jenom „speciální“ případy „non-mavenized“ závislosti si musíme sami přidat do repositáře
© 2009 ET NETERA a.s. Continuous Integration Maven a testy Jednotkové testy Vestavěný surefire-plugin automaticky ve fázi „test“ Integrační testy failsafe-plugin Související fáze: pre-integration-test, integration-test, post- integration-test, verify Nasazení na integrační prostředí, běh testů, úklid, vyhodnocení testů (a případný fail buildu) Integrační prostředí vždy uklizeno (torn down) Výsledky testů se ukládají a lze je prohlížet v Hudsonu nebo někam publikovat
© 2009 ET NETERA a.s. Continuous Integration Ukázka – JNP_4_TICKETPRO
© 2009 ET NETERA a.s. Continuous Integration Převod jNP projektu na Maven Nemáme ETN Maven repository Přidat všechny ETN knihovny do lokálního repositáře Enhancování assetů Není plugin pro naší implementaci JDO Volání antu Native2Ascii a licence pro Xstandard vyřešeny pomocí existujících pluginů Nasazování na integrační prostředí Problém při použití Tomcat Manageru (PermGen space)
© 2009 ET NETERA a.s. Continuous Integration Pozorování Kombinace Hudson + Ant sama o sobě tolik nepřinese a i dlouhodobě je dost pracná Hudson + Maven vyžaduje značnou počáteční investici, přináší však mnoho výhod, které do budoucna můžou ušetřit velké množství práce Řadu výhod přináší samotný Maven i bez CI Bez jednotkových a integračních testů ztrácí CI efekt
© 2009 ET NETERA a.s. Continuous Integration Odkazy (vyhledávač artefaktů)
© 2009 ET NETERA a.s. Continuous Integration Závěr Prostor k diskuzi