Zrozumienie ciągłej integracji i ciągłego wdrażania

Słyszałeś CI/CD, ale nie wiesz, co to jest?

W idealnym przypadku inżynierowie oprogramowania są zatrudniani do pisania kodu, który należy wysłać do środowiska produkcyjnego, aby firma, która potrzebuje produktu, mogła z niego skorzystać. Aby usatysfakcjonować firmę (często nazywaną użytkownikami/klientami), ważne jest, aby produkty były wolne od błędów.

Typowym podejściem stosowanym przez inżynierów oprogramowania jest praca w oddziałach i tworzenie pull requestów, które aktualizują główną gałąź o nową aktualizację, która została wykonana. Przyjęliśmy praktykę pisania testów, aby upewnić się, że nowe zmiany nie wprowadzają błędów. Gdy programiści w większości przypadków pracują nad funkcją, często nie tworzą żądania ściągnięcia, dopóki całkowicie nie skończą z funkcją. Co się dzieje, gdy są gotowi, to to;

  • Spędzają dużo czasu, próbując zaktualizować swoją bazę kodu o zmiany, które zaszły w branży produkcyjnej podczas pracy.
  • Robiąc to, muszą naprawić szereg konfliktów scalania.
  • Istnieje również możliwość przerwania gałęzi produkcyjnej, co wpływa na tych, którzy wyciągają z gałęzi, zanim problem zostanie zauważony i naprawiony.

Jeśli kiedykolwiek byłeś w takiej sytuacji, zgodzisz się, że może to być uciążliwe – nikt nie lubi tak spędzać dnia pracy.

Jakie jest rozwiązanie?

Ciągła integracja

Aby zapobiec scenariuszom, o których wspomniałem powyżej; zespoły inżynierskie mogą przyjąć praktykę zwaną ciągłą integracją – jak sama nazwa wskazuje, polega ona na ciągłej integracji zmian kodu dokonywanych przez deweloperów we wspólnej gałęzi/repozytorium. Kod, który ma zostać zintegrowany, musi przejść zweryfikowany test, aby upewnić się, że nie psuje aplikacji. Dopiero gdy test przejdzie pomyślnie, jest on zintegrowany

Aby to zrozumieć, wyobraźmy sobie prawdziwy scenariusz, w którym występuje zespół 10 programistów. Deweloperzy ci tworzą lokalnie gałąź, w której piszą kod do implementacji pewnych funkcji. Zamiast wysyłać żądania ściągnięcia po zakończeniu korzystania z tej funkcji, wybierają wysyłanie żądań ściągnięcia, ponieważ wprowadzają niewielkie zmiany. Przykładem takiej zmiany będzie stworzenie nowego modalu, przy założeniu, że deweloper pracuje nad funkcją pozwalającą użytkownikom na zarządzanie poszczególnymi zadaniami w aplikacji. Zamiast czekać na zakończenie funkcji zadania, aby zastosować się do wzorca ciągłej integracji, programista wypycha tę niewielką zmianę (w porównaniu z tym, nad czym pracuje) i tworzy żądanie ściągnięcia w celu scalenia z kodem.

Zanim ta nowa zmiana zostanie zintegrowana, należy przeprowadzić serię testów.

Zespoły inżynierów oprogramowania korzystają z narzędzi takich jak Travis CI do tworzenia tych procesów integracyjnych i testów. Dzięki takim narzędziom testy są zautomatyzowane, tak że uruchamiają się natychmiast po przesłaniu żądania ściągnięcia do gałęzi docelowej wybranej podczas instalacji.

Wyniki testów są generowane, a programista, który utworzył żądania ściągnięcia, może zobaczyć wyniki i wprowadzić niezbędne zmiany. Korzyści z trzymania się tego wzorca integracji kodu w jak najmniejszym stopniu i posiadania zweryfikowanego testu do uruchomienia są;

  • Zaangażowany zespół może wiedzieć, co spowodowało niepowodzenie procesu kompilacji lub testu. Zmniejsza to możliwość wysłania błędu do produkcji.
  • Jeśli zespół zautomatyzuje proces, będzie miał luksus czasu na skupienie się na produktywności.

Ważną rzeczą, na którą należy zwrócić uwagę w tej praktyce, jest to, że zachęca zespół do częstego wypychania kodu do głównej gałęzi. To będzie nieskuteczne, jeśli inni członkowie zespołu nie wyciągną z głównej gałęzi, aby zaktualizować swoje lokalne repozytorium.

Rodzaje testów

Pisząc testy, które będą częścią procesu integracji, oto kilka, które można zaimplementować w procesie:

  • Integracja – łączy poszczególne jednostki oprogramowania i testuje je jako grupę.
  • Jednostka – testuje poszczególne jednostki lub komponenty oprogramowania, takie jak metody lub funkcje.
  • UI – zapewnia, że ​​oprogramowanie działa dobrze z perspektywy użytkownika.
  • Akceptacja – testy, czy oprogramowanie spełnia wymagania biznesowe.

Ważne jest, aby pamiętać, że nie musisz testować ich wszystkich, ponieważ garść z nich może być już opisana w kodzie napisanym przez programistę.

Narzędzia do ciągłej integracji

Bez zagłębiania się, oto narzędzia, z których możesz zacząć korzystać w swoich bieżących lub nowych projektach;

  • Travis CI – znany w świecie open-source i obiecuje bezproblemowe przetestowanie kodu w ciągu kilku minut.
  • Koło CI – zapewnia moc, elastyczność i kontrolę, aby zautomatyzować proces od kontroli do wdrożenia.
  • Jenkins – zapewnia setki wtyczek wspierających budowanie, wdrażanie i automatyzację dowolnego projektu.

Jeśli jesteś nowy w Jenkins, sugeruję wzięcie tego Kurs Udemy nauczyć się CI z Java i .NET.

Ciągłe wdrażanie

Jak dobrze będzie, jeśli budowana funkcja będzie znajdować się w repozytorium przez tygodnie lub miesiące, zanim zostanie wdrożona w środowisku produkcyjnym. O ile zespoły inżynierskie mogą pracować nad integracją niewielkich zmian w głównej gałęzi, tak jak to się dzieje, mogą również wprowadzić te zmiany tak szybko, jak to możliwe, do środowiska produkcyjnego.

Celem ćwiczenia ciągłego wdrażania jest przekazanie wprowadzonych zmian użytkownikom, gdy tylko programiści zintegrują te zmiany w głównej gałęzi.

Podobnie jak w przypadku ciągłej integracji, podczas korzystania z ciągłego wdrażania przeprowadzane są automatyczne testy i kontrole, aby zapewnić weryfikację nowo zintegrowanych zmian. Wdrożenie ma miejsce tylko wtedy, gdy te testy zakończą się pomyślnie.

Aby zespół mógł odnieść korzyści z praktyki ciągłego wdrażania, musi mieć wdrożone następujące elementy;

  • Zautomatyzowane testowanie jest podstawą wszystkich praktyk inżynieryjnych. W przypadku ciągłego wdrażania kod, który ma zostać wdrożony, musi być zgodny ze standardem, który zespół ustanowił dla tego, co zamierza przekazać użytkownikom końcowym. W idealnym przypadku, jeśli nowa zmiana jest poniżej progu, test powinien zakończyć się niepowodzeniem i nie zostać zintegrowany. W przeciwnym razie staje się zintegrowany.
  • Pomimo przeprowadzania automatycznych testów jedno po drugim, możliwe jest, że niektóre błędy przenikną do środowiska produkcyjnego. W tym celu konieczne jest, aby zespół był w stanie cofnąć wprowadzoną zmianę – cofnąć wdrożenie. Powinno to przywrócić kod produkcyjny do stanu sprzed wprowadzenia nowej zmiany.
  • Systemy monitorowania są potrzebne do śledzenia zmian, które zostały wprowadzone do środowiska produkcyjnego. W ten sposób zespół może śledzić błędy, które użytkownicy napotykają podczas korzystania z wdrożonych zmian.

Wspomniane narzędzia do ciągłej integracji zapewniają również funkcjonalność konfiguracji systemu ciągłego wdrażania. Jest ich wiele, o których również możesz przeczytać.

Wniosek

Wydajność zespołu programistów ma kluczowe znaczenie dla sukcesu firmy. Aby zapewnić ich produktywność, należy przyjąć praktyki, które do tego zachęcają. Przykładami takich praktyk są ciągła integracja i wdrażanie.

Dzięki ciągłej integracji zespoły mogą codziennie przesyłać jak najwięcej kodu. Dzięki temu łatwo jest wdrożyć nowo dodane zmiany u użytkownika tak szybko, jak to możliwe. Wdrożenie tych zmian umożliwia uzyskanie informacji zwrotnej od użytkowników. Ostatecznie firma będzie mogła wprowadzać innowacje na podstawie otrzymanych informacji zwrotnych, co jest korzystne dla wszystkich.

Możesz również dowiedzieć się, jak skalować i optymalizować CI/CD.

Jeśli jesteś programistą i chcesz uczyć się CI/CD, sprawdź to genialny kurs.

Podobał Ci się artykuł? Co powiesz na dzielenie się ze światem?