SysInf/materiały na wykład/.ipynb_checkpoints/03_ciągła_integracja_ewalua...

8.4 KiB

Systemy informatyczne analizy danych

3. Ciągła integracja i ciągła ewaluacja[wykład]

Filip Graliński, Krzysztof Jassem (2023)

Ciągła integracja

Ciągła integracja (CI) to praktyka rozwoju oprogramowania, w której:
  • zmiany w kodzie są regularnie przesyłane do centralnego repozytorium,
  • po każdym dołączeniu nowego kodu wykonywane są (automatycznie): kompilacja kodu i testy.

Główne przesłanki CI

Ciągła integracja (CI) to praktyka rozwoju oprogramowania, w której:
  • szybsze lokalizowanie błędów w kodzie,
  • ciągły wzrost jakości oporgramowania,
  • szybkie wydawanie nowych wersji.

Schemat CI/CD

Przebieg pracy w Ciągłej Integracji

  1. Take Integrated Code
  • Pobieram kod z repozytorium.
  • Instaluję kopię na swojej stacji roboczej.
  1. Do Your Part
  • Opracowuję nowy kod.
  • Opracowuję nowe testy jednostkowe.
  1. Build on your machine
  • Repeat
    • Kompiluję swój kod i buduję wersję wykonywalną,
    • Przeprowadzam testy jednostkowe,
  • Until
    • Kod się skompilował poprawnie oraz
    • Testy zakończyły się powodzeniem.
  1. Integrate with Repository
  • Przesyłam kod do repozytorium centralnego, skąd przesyłany jest do kompilacji i testów.
    • Przypadek 1. W międzyczasie ktoś dodał swój kod do repozytorium. Kompilacja lub testy się nie powodzą.
      • Go back to: Take Integrated Code
    • Przypadek 2. Tetsy się powodzą
      • Continue
  1. End Session
  • Gdy powiodły się wszystkie testy, mogę zakończyć sesję.

Maintain a Single Source Repository

  • Załóż mainline (linię główną):
    • Deweloperzy powinni większość pracy składać na mainline.
  • Nie nadużywaj odgalęzień (branchów). Jeśli już, to tylko w celu:
    • naprawy błędów,
    • tymczasowych eksperymentów,
    • oznaczania wersji publikowalnych.

Automate the Build

  • Wersja wykonywalna powinna być tworzona jednym poleceniem.
  • Dotyczy to zarówno repozytorium centralnego, jak i maszyn lokalnych.

Test Yourself

  • Pisz testy jednostkowe.
  • Uruchamiaj testy po każdej kompilacji.

Everyone Commits Everyday

  • Każdy powinien "codziennie" wypychać swój kod do linii głównej.
  • Umożliwia to wczesne wykrywanie konfliktów, gdyż...
    • Im wcześniej wykryje się konflikt, tym łatwiej go naprawić.
  • Postulat wymaga rozbicia projektu na małe kawałki.

Every Commit Should Build the Mainline

  • Nie odchodzisz od pracy z repozytorium, aż Twój kod nie przeszedł pełnych testów.
  • Korzystaj z systemów ciągłej integracji (Cruise Control, Jenkins).

Fix the Broken Builds Immediately

Co zrobić, jeśli jednak kod na "mainline" się nie buduje?
Znalezienie i poprawienie blędu jest priorytetem, ale:

  • Nie debugguj kodu na centralnym repozytorium.
  • Przywróć wersję wykonywalną na "mainline".
  • Debugguj kod na maszynie lokalnej.

Make it Easy to Run the Latest Executable

  • Każdy członek zespołu (nie tylko deweloper) powinien mieć możliwość łatwego uruchomienia ostatniej wersji stabilnej.
  • Jest to niezbędne do:
    • testowania integracyjnego (tester),
    • rozmów z klientem (zarząd lub sprzedawca),
    • prowadzenia projektu (kierownik zespołu).
  • W specjalnej lokalizacji przetrzymuj wersje stabilne - "do pokazania".

Keep the Build Fast

  • Maximum 10 minut na build + testy.
  • A jeśli testy trwają dłużej?
    • Testy dwuetapowe:
      • kompilacja + testy jednostkowe przy każdym commicie,
      • testy integracyjne co pewien czas (np. po commicie wszystkich deweloperów).

Clone the Environment

  • Przygotuj klon środowiska produkcyjnego:
    • ta sama wersja systemu operacyjnego
    • ta sama baza danych
    • te same biblioteki (nawet jak ich nie potrzebujesz)
  • Wszystkie testy przeprowadzaj na przygotowanym środowisku.

Everyone Can See What's Happening

System powinien informować użytkowników o swoim statusie.

Automate Deployment

  • Zautomatyzowanie wdrożenia polega na napisaniu skryptów, które instalują system w docelowym środowisku.
  • Pozwala to na szybką reakcję, gdy "coś się dzieje".

Narzędzia Ciągłej Integracji

https://www.katalon.com/resources-center/blog/ci-cd-tools/

  1. Jenkins
  2. Circle CI
  3. Team City
  4. Bamboo
  5. GitLab

Korzyści z Ciągłej Integracji

  • Minimalizacja ryzyka
  • Łatwiejsze szacowanie terminu zakończenia prac
  • Szybsza lokalizacja i naprawa błędów
  • Świadomość stanu prac u całego zespołu
  • Możliwość kontynuowania prac w przypadku odejścia dewelopera
  • Możliwość pracy w środowisku rozproszonym
  • Możliwość usunięcia bariery między wykonawcą i klientem