Continuous Integration Marcin Daczkowski AIS.PL
Jeśli się czegoś boisz, rób to tak często jak tylko możliwe
Agenda Wprowadzenie Agile Development Składowe Jak wdrożyć? Demo Co to jest? Do czego służy? Jakie problemy rozwiązuje? Agile Development Składowe Jak wdrożyć? Demo
Wprowadzenie - Definicja Sposób wytwarzania oprogramowania bazujący na: częstej integracji prac członków zespołu automatycznej jej weryfikacji Cel: Minimalizacja błędów integracji skrócenie czasu ich wykrycia Ojcowie CI: Martin Fowler Kent Beck
Wprowadzenie - Zalety Oszczędność czasu Kod bazowy zawsze działa Brak lub ograniczona faza finalnej integracji Szybkie zgłaszanie błędów Automatyzacja tworzenia wydań Zwiększona zaufanie programistów Kod bazowy zawsze się buduje Ciągłe testy poprawności Redukcja ryzyka i kosztów
Rys historyczny „Prehistoryczyne” (?) podejście Schemat wytwarzania oprogramownia: Rozdziel zadania do pracy współbieżnej Integruj w końcowym etapie życia projektu Wysokie ryzyko porażki projektu SCM (ang. Source Code Management) Jedno repozytorium kodu Częściowa integracja podczas wgrywania zmian Techniki rozgłęziania(ang. branching) Samodzielnie niewystarczający dla realizacji idei CI
Najlepsze praktyki Pojedyncze repozytorium kodu Automatyzacja procesu budowania Automatyzacja testowania Środowisko pre-produkcyjne Częste integrowanie kodu w repozytorium Szybki proces budowania projektu Automatyzacja procesu wdrożenia
Schemat działania Programista pobiera kod do prywatnej przestrzeni Programista zapisuje zmiany w repozytorium Serwer CI buduje system Serwer CI uruchamia testy
Schemat działania (c.d.) Integracja zakończona sukcesem Serwer CI archiwizuje kod źródłowy Serwer CI wytwarza artefakty Serwer CI informuje programistów o sukcesie Integracja zakończona porażką Serwer CI informuje programistów o sytuacji wyjątkowej Programista zgłasza się na ochotnika Programista zapisuje poprawki w repozytorium
Agile Development Metodologie Agile eXtreme Programming Bądź zwinny bo wymagania ulegną zmianie Bądź elastyczny i używaj tylko tego co potrzebne eXtreme Programming Testy najpierw Programowanie w parach Częsta integracja Częste wydania Integracja sekwencyjna Zbiorowa odpowiedzialność (Scrum, XP)
Składniki Serwera CI Automatyczne budowanie Repozytoria kodu z wersjonowaniem Wyzwalacze budowania (MSBuild, NMaven, Visual Studio) (CVS, SVN, Perforce, SourceSafe) (po zmianach, zaplanowany, ręczny)
Składniki CI (c.d.) Testy Analiza kodu Archiwizacja wydań Jednostkowe Acceptance Testing Analiza kodu Przegląd jakości kodu Metryki Archiwizacja wydań Automatyczna instalacja (NUnit, VS Tests) (FitNesse, Watir) (FxCop, VS Code Analysis) (NDepend)
Składniki CI (c.d.) Wytwarzanie artefaktów Powiadomienia Dokumentacja Raporty Powiadomienia (DocProject, NDoc) (Testy: Wyniki, Czasy, Pokrycie; metryki i statystyki kodu ) (Mail, IM, Tray)
Składniki CI (c.d.) Interfejs użytkownika Rozszerzalność Administracja Dashboard Dostęp do raportów i statystyk Rozszerzalność
Jak wdrożyć? Stopniowa migracja starych projektów Szersze wykorzystanie CI w nowych Zależności między projektami Produkty CruiseControl.NET TeamCity
DEMO CruiseControl.NET
Pytania?
Zasoby http://www.martinfowler.com/articles/contin uousIntegration.html http://ccnet.thoughtworks.com http://www.jetbrains.com/teamcity/ http://www.extremeprogramming.org/rules/i ntegrateoften.html