Strategia wdrożenia web aplikacji
Dariusz Ciesielski • 18/09/2020
Strategii wytwarzania, zarządzania i wdrażania web aplikacji w zespole jest co najmniej kilka. Dzisiaj chciałbym przedstawić wam strategie, którą ostatnio sami zastosowaliśmy w projekcie.
Załóżmy, że mamy niewielki zespół ok. 4-9 osób, projekt podzielony jest na backend oraz frontend (web aplikacja oraz aplikacja mobilna). Oznacza to, że potrzebujemy przynajmniej trzech repozytoriów oraz strategii utrzymania backendu w spójności z frontendem. Chcemy uniknąć sytuacji, w której zespół backendowy wydał nową funkcjonalność, lecz zespół frontendowy, nie zdążył dostosować swoich aplikacji pod nową wersję API.
Oczywiście możemy użyć wersjonowania API lub wykorzystać strategie Feature Flags, lecz oba te podejścia dokładają swój narzut czasowy i implementacyjny. Jako że nasz projekt jest jeszcze młody, tym samym zmiany zachodzą dynamicznie, uznaliśmy, że potrzebujemy czegoś bardziej elastycznego.
W naszym przypadku mamy 3 główne branche development
, test
, demo
oraz tworzymy feature branch
dla każdej nowej funkcjonalności.
Do tej pory działaliśmy w poniższy sposób:
- Frontendowcy używali API z brancha
test
. - Tworzyliśmy
feature branch
. - Po skończonej implementacji tworzyliśmy Merge Request.
Po przejściu Code Review mergowaliśmy
feature branch
do branchadevelopment
. - Kiedy chcieliśmy wrzucić zmiany z brancha
development
na branchtest
pytaliśmy się frontendowców, czy możemy.- Jeżeli tak, mergowaliśmy branche.
- Jeżeli nie, czekaliśmy na zielone światło od frontendoców.
Podejście to miało jednak duży minus. Przeważnie dochodziło do wrzucenia kilku nowych funkcjonalności do API, z którego korzystali frontendowcy,
tym samym, nie zawsze zauważono, iż jedna z funkcjonalności nie powinna zostać jeszcze wrzucona. Szczególnie w przypadku funkcjonalności,
które były tzw. funkcjonalnościami Breaking Change
.
Obecnie mamy poniższą strategię:
- Frontendowcy używają brancha
development
zamiasttest
. - Tworzymy
feature branch
. - Po skończonej implementacji tworzymy Merge Request
- Jeżeli zaimplementowana funkcjonalność nie zmienia obecnego "kontraktu" (o tym za chwilę opowiem) API,
po skończonym Code Review od razu mergujemy
feature branch
do branchadevelopment
. W takim przypadku nie jesteśmy w stanie zepsuć obecnie działającego frontu, ponieważ nasza funkcjonalność nie wpływa na niego. - Jeżeli zaimplementowana funkcjonalność zmienia "kontrakt" API, oznaczamy Merge Request literkami
BC
(Breaking Change). Po skończonym Code Review, pytamy się frontendowców, czy dostosowali swoje aplikację pod nową funkcjonalność, jeżeli tak mergujemyfeature branch
nadevelopment
, jeżeli niefeature branch
, czeka na dostosowanie frontendu.
- Jeżeli zaimplementowana funkcjonalność nie zmienia obecnego "kontraktu" (o tym za chwilę opowiem) API,
po skończonym Code Review od razu mergujemy
Takie podejście zawsze zapewnia nam spójność pomiędzy backendem, a frontendem. Nie jesteśmy w stanie zepsuć frontendu nowymi zmianami.
Na dodatek nie musimy utrzymywać kilku wersji tego samego endpointu po stronie backendu.
Oprócz tego zapewnia nam także spójność w kolejnych etapach/pozostałych branchach, np. development
<-> test
Wróćmy teraz do wcześniej wspomnianej kwestii kontraktu i definicji pojęcia Breaking Change
.
Za Breaking Change
uznaje się zmiany, które nie są wstecznie kompatybilne z kontraktem, jakie przyjmuje API z "klientami".
Przeważnie są to zmiany w parametrach, jakie przyjmuje API lub struktura odpowiedzi jakie, API zwraca.
Ogólnie rzecz ujmując, jeżeli jakakolwiek zmiana po stronie API burzy komunikację z, chociaż z jednym "klientem" od strony frontendowej,
zmiana ta może zostać uznana jako Breaking Change
.
Oprócz powyżej opisanej strategii omawialiśmy w zespole także dwie inne, lecz tylko ta dała nam możliwość szybkiego wdrażania kolejnych funkcjonalności. Oczywiście nie twierdze, że jest to jedyna słuszna strategia, aczkolwiek w naszym przypadku się sprawdza.
Jeżeli obecnie uczestniczysz w kilku osobowym projekcie i macie problemy z utrzymaniem spójności pomiędzy API, a "klientami" frontendowymi, zachęcam do wypróbowania powyższej strategii i sprawdzenia, czy w Twoim zespole także spełni swoją funkcje.