Zastanawiasz się, czym jest CI/CD?
Idealnie byłoby, gdyby praca inżynierów oprogramowania sprowadzała się do tworzenia kodu, który trafia bezpośrednio do środowiska produkcyjnego i jest od razu dostępny dla klientów. Aby produkt spełniał oczekiwania użytkowników, kluczowe jest, aby był on wolny od usterek.
Typowym schematem pracy jest tworzenie kodu w oddzielnych gałęziach, a następnie przesyłanie tak zwanych pull requestów, które mają za zadanie zaktualizować główną gałąź projektu. Dobrą praktyką jest pisanie testów, które pozwalają upewnić się, że wprowadzane zmiany nie powodują problemów. Często programiści, pracując nad nową funkcjonalnością, nie tworzą pull requestu do czasu, aż nie zakończą pracy. W efekcie:
- Sporo czasu zajmuje im aktualizacja kodu o zmiany, które zaszły w gałęzi produkcyjnej podczas ich pracy.
- Muszą rozwiązywać liczne konflikty podczas łączenia kodu.
- Istnieje ryzyko zepsucia gałęzi produkcyjnej, co negatywnie wpływa na innych programistów.
Jeśli kiedykolwiek znalazłeś się w takiej sytuacji, wiesz, że to frustrujące i nikt nie lubi tak spędzać dnia pracy.
Jakie jest wyjście z tej sytuacji?
Integracja ciągła
Aby uniknąć problemów opisanych powyżej, zespoły inżynierskie mogą wdrożyć tak zwaną ciągłą integrację. Jak sama nazwa wskazuje, chodzi o regularne łączenie zmian w kodzie dokonywanych przez programistów do wspólnej gałęzi projektu. Kod, który ma zostać zintegrowany, musi przejść serię testów, które potwierdzą, że nie powoduje on problemów w aplikacji. Dopiero po pozytywnym wyniku testów, kod jest włączany do głównej gałęzi.
Wyobraźmy sobie zespół 10 programistów. Każdy z nich tworzy lokalną gałąź i pracuje nad nową funkcją. Zamiast przesyłać pull requesty dopiero po zakończeniu pracy, programiści wysyłają je przy każdej mniejszej zmianie. Przykładowo, jeśli pracują nad funkcją zarządzania zadaniami i tworzą nowy modal, to po jego stworzeniu przesyłają pull request, nie czekając na zakończenie całej funkcji. W ten sposób, zamiast czekać do końca, programista wprowadza niewielką zmianę i tworzy żądanie scalenia.
Zanim zmiana zostanie zintegrowana, konieczne jest wykonanie testów.
Zespoły korzystają z narzędzi takich jak Travis CI do automatyzacji procesu integracji i testowania. Dzięki nim, testy są uruchamiane automatycznie, zaraz po przesłaniu pull requestu do wybranej gałęzi.
Po wykonaniu testów, programista otrzymuje wyniki i może wprowadzić ewentualne poprawki. Korzyści z tego podejścia są następujące:
- Zespół od razu wie, co spowodowało błąd kompilacji lub testu, minimalizując ryzyko wprowadzenia usterki do produkcji.
- Automatyzacja procesu pozwala zespołowi skupić się na produktywności.
Ważne jest, aby zespół regularnie wprowadzał zmiany do głównej gałęzi. Nie ma to sensu, jeśli członkowie zespołu nie będą aktualizować swoich lokalnych repozytoriów.
Rodzaje testów
Podczas pisania testów w procesie integracji, warto uwzględnić następujące rodzaje:
- Integracyjne – sprawdzają, jak współpracują ze sobą różne moduły oprogramowania.
- Jednostkowe – testują pojedyncze elementy kodu, takie jak funkcje lub metody.
- UI – weryfikują, czy oprogramowanie działa poprawnie z perspektywy użytkownika.
- Akceptacyjne – sprawdzają, czy oprogramowanie spełnia wymagania biznesowe.
Należy pamiętać, że nie trzeba implementować wszystkich rodzajów testów. Cześć z nich może być już opisana w kodzie.
Narzędzia do ciągłej integracji
Oto kilka narzędzi, które można wykorzystać w projektach:
- Travis CI – popularne narzędzie w świecie open-source, umożliwiające szybkie testowanie kodu.
- Circle CI – zapewnia elastyczność i kontrolę w automatyzacji procesu od commitu po wdrożenie.
- Jenkins – oferuje setki wtyczek do budowania, wdrażania i automatyzacji projektów.
Jeśli dopiero zaczynasz swoją przygodę z Jenkinsem, polecamy ten kurs Udemy, który wprowadzi cię w tajniki CI w środowisku Java i .NET.
Ciągłe wdrażanie
Nie ma sensu, aby gotowe funkcje czekały tygodniami lub miesiącami na wdrożenie. Zespoły, które stosują ciągłą integrację, powinny również jak najszybciej wdrażać zmiany na środowisku produkcyjnym.
Głównym celem ciągłego wdrażania jest udostępnianie użytkownikom nowych funkcji zaraz po ich zintegrowaniu z główną gałęzią.
Podobnie jak w przypadku ciągłej integracji, w procesie ciągłego wdrażania przeprowadzane są automatyczne testy i kontrole. Wdrożenie ma miejsce dopiero, gdy wszystkie testy zakończą się pomyślnie.
Aby zespół mógł czerpać korzyści z ciągłego wdrażania, musi mieć wdrożone następujące elementy:
- Automatyczne testowanie jest podstawą wszystkich praktyk inżynierskich. Kod, który ma zostać wdrożony, musi spełniać standardy ustalone przez zespół. Jeśli testy nie przejdą, zmiana nie jest wdrażana.
- Nawet automatyczne testy mogą nie wyłapać wszystkich błędów. Dlatego ważne jest, aby zespół mógł w każdej chwili wycofać wdrożone zmiany, przywracając poprzednią wersję kodu.
- Systemy monitorowania są potrzebne do śledzenia zmian, które zostały wprowadzone na środowisku produkcyjnym, co pozwala na szybkie wykrywanie i rozwiązywanie problemów zgłaszanych przez użytkowników.
Wspomniane wcześniej narzędzia do ciągłej integracji, często posiadają również funkcjonalności związane z ciągłym wdrażaniem. Warto zapoznać się z nimi.
Podsumowanie
Wydajność zespołu programistów ma kluczowe znaczenie dla sukcesu firmy. Warto wdrożyć praktyki, które ją wspierają, takie jak ciągła integracja i ciągłe wdrażanie.
Dzięki ciągłej integracji, zespoły mogą regularnie wprowadzać zmiany do głównej gałęzi. Ułatwia to szybkie wdrażanie nowych funkcji. Umożliwia to również zbieranie informacji zwrotnej od użytkowników, co pozwala firmie na wprowadzanie innowacji.
Warto również dowiedzieć się, jak skalować i optymalizować CI/CD.
Jeśli jesteś programistą i chcesz nauczyć się więcej o CI/CD, sprawdź ten świetny kurs.
Podobał ci się artykuł? Udostępnij go!
newsblog.pl