Należę do grupy programistów z 5 zespołami, w sumie około 40 programistów. Postępujemy zgodnie z metodologią Scrum, z 3-tygodniowymi sprintami. Mamy ciągłą konfigurację integracji (Jenkins), a proces kompilacji zajmuje kilka godzin (z powodu obszernych automatycznych testów). Zasadniczo proces rozwoju działa dobrze.
Obserwujemy jednak, że po kilku dniach od nowego sprintu nasza kompilacja często staje się niestabilna i pozostaje chwiejna, dopóki nie zakończy się „zatwierdzenie zatrzymania”. Negatywnym skutkiem tego jest to, że kroki kompilacji daleko w dół potoku, zwłaszcza testy interfejsu użytkownika / sieci Web nie są wykonywane przez kilka dni (ponieważ są uruchamiane tylko w przypadku „zielonej” kompilacji). W związku z tym nowo wprowadzone błędy są często wykrywane bardzo późno podczas sprintu.
- Każde zatwierdzenie jest weryfikowane na podstawie podstawowego zestawu testów. Po zweryfikowaniu zmiana jest przekazywana do master po przejrzeniu kodu (Gerrit)
- Podstawowe testy jednostkowe są uruchamiane co 30 minut, a czas trwania jest krótszy niż 10 minut
- Testy integracyjne przeprowadzane są co 2 godziny, czas trwania 1 godzinę
- Testy interfejsu użytkownika / sieci Web działają na udanych testach integracyjnych i trwają kilka godzin
W zależności od tego, kto jest odpowiedzialny za stabilność kompilacji podczas sprintu (ta odpowiedzialność jest przekazywana podczas sprintu), mogą istnieć pośrednie, „zatrzymania zatwierdzenia” ad hoc, aby przywrócić kompilację do stabilnej.
Chcemy więc:
- Nasze zespoły programistów opracowują i zatwierdzają zmiany podczas sprintu bez przeszkód
- Nasz proces kompilacji ma zostać porzucony, jeśli krok kompilacji zakończy się niepowodzeniem, ponieważ kolejne wyniki kompilacji mają niewielkie znaczenie
- Nasz proces kompilacji w celu dostarczenia programistom wysokiej jakości informacji zwrotnych na czas
Biorąc pod uwagę (2), punkty (1) i (3) wydają się ze sobą sprzeczne. Czy ktoś ma dobrą praktykę, jak sobie z tym poradzić?
( Obecnie tracimy punkt (2) i zezwalamy na kontynuowanie kompilacji nawet w przypadku nieudanych kroków kompilacji. Nie mam jeszcze żadnych informacji zwrotnych na temat tego, jak wpływa to na naszą jakość )
Dzięki, Simon
several hours
jest prawdziwy problem. oznacza to, że połączone rozwiązanie jest zbyt duże i zbyt szerokie. Powinieneś szukać rozwiązania tego komponentu, a następnie mieć małe fragmenty kodu jako pakiety (dostępne w ten lub inny sposób we wszystkich głównych językach na wszystkich platformach). Tak więc wszelkie zmiany zostałyby wprowadzone tylko w komponentach i zostaną wykryte znacznie szybciej. Pełna wersja zasadniczo po prostu połączy już połączone elementy, a także będzie szybsza. Następnie można by tylko uruchomić niektóre testy, aby upewnić się, że właściwe komponenty zostały rozwiązane.