63 mikroserwisy, kilkadziesiąt osób w projekcie.
Aby przetestować swoje zmiany, które chcę wrzucić, muszę postawić całą aplikację lokalnie. Odpala 30 min.
Pytanie: na środowiskach (szczególnie produkcyjnych) też wszystkie są stawiane na raz, w jednej wielkiej deploymentowej choreografii? ;)
Pobieram kody i wszystko rozjebane.
Naprawiam: a to ktoś mapera zgubił, a to ktoś wersji nie podbił, certyfikatu nie dodał, a to corsa dołożył, a to zmiana w jednym mikroserwisie kłóci się ze zmianą w drugim. Po 4 godzinach wreszcie działa.
Kolejnego dnia pobieram świeże kody i wszystko rozjebane.
Brzmi jak "robimy mikroserwisy ale nie mamy CI". Widziałem już mikroserwisy z manualnym CD (mój ulubiony antywzorzec Red Flag Law
, nie trzeba nawet tych 60+ mikroserwisów żeby zapewnić dzień zabaw i przygód dla wszystkich) ale bez CI z prawdziwego zdarzenia to już grubo.
Pierwsze co bym zrobił:
- zrobiłbym CI (żeby coś się budowało jak są zmiany na głównym branchu, developie, czy co tam macie) żeby było jakiekolwiek, na Jeninsie, TeamCity, Github Actions, tym Gitlabowym - obojętnie, byle był automat
- zrobiłbym żeby to CI odpalało się też na PRach i je uwalało
- zrobiłbym żeby odpalało jakieś testy (jakiekolwiek, jeśli prawie nie ma) i nie dawał wyłączyć. A jak jest źle z testami, to żeby jeszcze krzyczało i waliło po oczach, jak coverage spadnie - nie po to, żeby był jakiś super coverage pod politykę firmy/architekta, tylko żeby niepisanie testów było bardziej upierdliwe niż pisanie
- zrobiłbym w ustawieniach repozytoriów, żeby nie dało się commitować na masterze i koniec
- próbowałbym przepchnąć obowiązkowe CR, choć mogłoby się skończyć "przyklepywaniem" PRów na ślepo
- najlepiej zrobiłbym jeszcze
fast-forward-only
, żeby nie było że ktoś naplecie precla i popsuje bo nie zrobił rebase i bawił się nieaktualnym KasztanDTO
:)
- jak już robicie te majkroserwisy w
jakiejś
chmurze, więc zacząłbym rzeźbić jakikolwiek CD i zarządzanie infrastrukturą jak kodem tj. upakować co potrzebne dla danego serwisu w Kubernetesy, Terraformy, Dockery itp. itd. i zakończyć ten smutny odręczny ulepek
- Czy nie powinno być jakiś testów integracycjnych dla deweloperów tak bym nie musiał stawiać całej apki za każdym razem?
Można, jak najbardziej, jeszcze jak - np. przez wycięcie zależności danego serwisu z WireMock
- Czy nie powinno być jakiegoś środowiska do robienia burdelu, najlepiej dla każdego programisty osobno albo chociaż na 3-4?
Tak, od tego to powinny być środowiska developerskie, najlepiej takie że zrobisz klik-klik
i masz, potem klik-klik
i zaorasz.
- Aplikacja postawiona lokalnie i tak sięga do chmur, czy tak powinno być czy moze dane powinny być zamockowane dla profilu lokalnego?
Idealnie nie jest, ale jeśli nie chcesz odpalać lokalnie na atrapach (in-memory, Localstacku itp - tak potrzebujesz prawdziwego środowiska bo wszystkiego tak nie sprawdzisz) to może nie być wyjścia. Gorzej, że wpinając się lokalnie wpinasz się.. do czego? Zapewne do zasobów używanych już przez jakieś środowisko, albo majstrujesz w nich ręcznie (żeby je sobie stworzyć). W najlepszym razie wpinasz się do deva... tylko skoro dopominasz się o deva, to do czego tak naprawdę się wpinasz?
Nie pracowałem nigdy w dużym projekcie, może to tak wszędzie zazwyczaj wygląda?
Nie wiem jak jest wszędzie, choć obstawiam, że każdy ma swoje grzeszki i swoje błędy ;)