Pipeline monorepo trwa 40 minut
Monorepo ma 25 projektów (aplikacje i paczki). Każdy PR uruchamia lint, testy i build wszystkiego, co trwa 40 minut. Programiści łączą zmiany w duże PR-y, żeby rzadziej czekać, co zwiększa ryzyko.
Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.
Moje rozwiązanie
Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.
Pokaż, czego szuka rekruter, i modelową odpowiedź
Co sprawdza rekruter
- Czy znasz affected i cache zadań
- Czy umiesz zmierzyć, gdzie ucieka czas
- Czy myślisz o wpływie na sposób pracy zespołu
Odpowiedź seniora
Najpierw pomiar: czas każdego joba i kroku, co jest powtarzane i co czeka na co. Potem trzy zmiany. Uruchamianie tylko dotkniętych projektów (nx affected, turbo run --filter=...[origin/main]) na podstawie grafu zależności. Zdalny cache wyników zadań (Nx Cloud, Turborepo Remote Cache albo własny), więc niezmienione paczki nie budują się drugi raz. Równoległość: lint, typecheck i testy jako osobne joby, sharding testów E2E.
Do tego szybsze narzędzia (Vitest zamiast Jest, SWC lub esbuild), cache zależności (pnpm store) i concurrency z cancel-in-progress dla nowych pushy w tym samym PR. Pełny pipeline zostaje na main i nocą.
Cel: mediana poniżej 10 minut, śledzona na dashboardzie. Efekt uboczny, o który chodzi: mniejsze PR-y i częstsze wdrożenia.
Typowe wpadki
- Wyłączenie testów, żeby było szybciej
- Większe maszyny jako jedyne rozwiązanie
- Affected bez poprawnego grafu zależności, przez co nie testujemy tego, co trzeba
Dopytają o
- Co zrobisz, gdy cache da błędny wynik?
- Jak traktujesz zmiany w plikach globalnych (lockfile, tsconfig)?
- Jak zmierzysz wpływ na produktywność?