InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji: – Innowacyjne metody monitorowania projektów informatycznych: Część 3: Ciągła integracja Bartosz Walter, Marcin Werla Szkolenie finansowane ze środków Europejskiego Funduszu Społecznego (75%) i budżetu państwa (25%) w ramach Zintegrowanego Programu Operacyjnego Rozwoju Regionalnego
Ciągła integracja – w teorii „…a common story of software projects: integration is a long and unpredictable process.”
Ciągła integracja – w teorii „But this needn't be the way.” – Martin Fowler (MF) „Continuous Integration” ation.html ation.html
Ciągła integracja – w teorii Pełna integracja: 1.Pełna rekompilacja całego kodu źródłowego 2.Stworzenie uruchamialnej postaci systemu i uruchomienie go w środowisku testowym 3.Uruchomienie wszystkich testów automatycznych Wszystkie kroki muszą zakończyć się sukcesem.
Ciągła integracja – w teorii Przykładowy scenariusz 1.Pobranie aktualnego kodu źródłowego z VCS 2.Wprowadzenie zmian w kodzie 3.Integracja na maszynie programisty 4.Synchronizacja kodu z VCS 5.Integracja na maszynie programisty 6.Przesłanie zmodyfikowanego kodu na serwer VCS 7.Automatyczna integracja na serwerze ciągłej integracji
Ciągła integracja – w teorii Zalety Zmniejsza ryzyko wystąpienia problemów integracyjnych Brak odrębnych sesji integracyjnych Zmniejszenie liczby błędów wykrywanych dopiero na etapie integracji Poprawa pracy zespołowej Ciągła integracja to jedna z podstawowych praktyk Extreme Programming. Extreme Programming
Ciągła integracja – w teorii Zalecane praktyki Pojedyncze repozytorium kodu źródłowego – „…you should be able to walk up to the project with a virgin machine, do a checkout, and be able to fully build the system.” – MF
Ciągła integracja – w teorii Zalecane praktyki Zautomatyzowane skrypty integracyjne – „…anyone should be able to bring in a virgin machine, check the sources out of the repository, issue a single command, and have a running system on their machine.” – MF
Ciągła integracja – w teorii Zalecane praktyki Zautomatyzowane testy – „ Imperfect tests, run frequently, are much better than perfect tests that are never written at all.” – MF
Ciągła integracja – w teorii Zalecane praktyki Częste przesyłanie zmian na serwer VCS – „ The more frequently you commit, the less places you have to look for conflict errors, and the more rapidly you fix conflicts.” – MF
Ciągła integracja – w teorii Zalecane praktyki Każda zmiana powoduje wykonanie integracji „The whole point of continuous integration is to find problems as soon as you can. Nightly builds mean that bugs lie undetected for a whole day before anyone discovers them.” – MF „ Daily builds are for wimps.” – Kent Beck
Ciągła integracja – w teorii Zalecane praktyki Integracja powinna być krótkim procesem „ Probably the most crucial step is to start working on setting up a staged build. The idea behind a staged build is that there are in fact multiple builds done in sequence.” – MF
Ciągła integracja – w teorii Zalecane praktyki Testuj w środowisku jak najbardziej zbliżonym do produkcyjnego „ If you test in a different environment, every difference results in a risk that what happens under test won't happen in production.” – MF
Ciągła integracja – w teorii Zalecane praktyki Ostatnia pozytywnie przetestowana postać binarna powinna być łatwo dostępna „ We've found that it's very hard to specify what you want in advance and be correct; people find it much easier to see something that's not quite right and say how it needs to be changed.” – MF
Ciągła integracja – w teorii Zalecane praktyki Informacje o statusie integracji powinny być łatwo dostępne „ Continuous Integration is all about communication, so you want to ensure that everyone can easily see the state of the system and the changes that have been made to it.” – MF
Ciągła integracja – w teorii „Bubble, Bubble, Build's In Trouble”
Ciągła integracja – w teorii „Bread as a display device” „…recently I saw someone experimenting with a dancing rabbit…” – MF
Ciągła integracja – w praktyce Typowa architektura: Programista Serwer VCS Serwer informacyjny Serwer testowy Serwer integracyjny
Ciągła integracja – w praktyce Serwery VCS: CVS CVS Subversion Subversion Perforce Perforce … scm.berlios.de/comparison/comparison.html
Ciągła integracja – w praktyce Narzędzia do automatyzacji: Make Make Ant, NAnt AntNAnt Maven Maven Ivy Ivy …
Ciągła integracja – w praktyce Narzędzia do testów: xUnit The Grinder The Grinder JMeter JMeter Marathon Marathon …
Ciągła integracja – w praktyce Narzędzia do ciągłej integracji: CruiseControl CruiseControl DamageControl DamageControl LuntBuild LuntBuild Continuum Continuum … ntegration+Server+Feature+Matrix
Ciągła integracja – w praktyce Pełna integracja (Maven): 1.Pełna rekompilacja całego kodu źródłowego (clean, compile) 2.Stworzenie uruchamialnej postaci systemu i uruchomienie go w środowisku testowym (test, build, install, … 1 ) 3.Uruchomienie wszystkich testów automatycznych (… 2 ) Np.: 1 Stworzenie pliku WAR, uruchomienie go na testowym serwerze aplikacji 2 Uruchomienie testów akceptacyjnych/integracyjnych napisanych przy pomocy JWebUnit, …
Ciągła integracja – w praktyce CruiseControl Darmowy, open-source Wersje dla Javy i.NET Składa się z dwóch aplikacji - Serwera integracyjnego - Aplikacji WWW do udostępniania wyników integracji Działa z wieloma systemami VCS Rozbudowane możliwości konfiguracji
Ciągła integracja – w praktyce CruiseControl – serwer integracyjny Jedna instalacja obsługuje wiele projektów Każdy projekt może mieć zdefiniowane kilka różnych integracji Dwie podstawowe możliwości konfigurowania okresu integracji
Ciągła integracja – w praktyce CruiseControl – serwer integracyjny Możliwość „opublikowania” wyników integracji na wiele różnych sposobów Możliwość zarządzania poprzez interfejs JMX Możliwość rozszerzania funkcjonalności własnymi pluginami Konfiguracja poprzez plik XML
Ciągła integracja – w praktyce … …
Ciągła integracja – w praktyce... (4) … … (16) … … (24) … … (6) … … (24) …
Ciągła integracja – w praktyce CruiseControl – aplikacja WWW Jedna instalacja obsługuje wiele projektów Wyświetlane strony są generowane na podstawie logów części integracyjnej CC Możliwy jest dostęp do pełnej historii integracji i artefaktów z integracji
Ciągła integracja – w praktyce CruiseControl – wady/zalety [+] Dojrzały (czyt. stabilny i przemyślany) [+] Bardzo elastyczny [+/–] Osobne aplikacje do integracji i prezentacji wyników [–] Ograniczone możliwości interfejsu WWW
Ciągła integracja Podsumowanie Ciągła integracja to jedna z praktyk XP i jest ściśle powiązana jest z innymi praktykami Pełne wdrożenie CI wymaga sporego nakładu pracy, ale… warto to zrobić Nawet „integracja” polegająca na rekompilacji kodu już coś daje Istnieje wiele narzędzi umożliwiających i ułatwiających zautomatyzowaną ciągłą integrację Dobrym narzędziem na początek jest CruiseControl
Ciągła integracja Pytania?
Ciągła integracja Dziękuję za uwagę!