Spraw, aby było to niemożliwe, aby cokolwiek zwolnić bez naprawy testów.
- Niepowodzenie kompilacji, jeśli jakiekolwiek testy zakończą się niepowodzeniem
- Niepowodzenie kompilacji, jeśli jakiekolwiek testy zostaną zignorowane.
- Błąd kompilacji, jeśli zasięg testu spadnie poniżej określonego poziomu (więc ludzie nie mogą po prostu usunąć testów, aby obejść ten poziom).
- Użyj serwera CI, aby wykonać kompilacje wersji i zezwalaj tylko na kompilacje z dropu kompilacji serwera na UAT / staging / production / cokolwiek.
Faktem jest, że jeśli twoja kompilacja jest przerywana przez więcej niż około 15 minut na raz (i obejmuje to nieudane testy), to nie robisz ciągłej integracji .
„Opcja nuklearna” polega na tym, aby serwer kontroli źródła odmawiał zatwierdzania / sprawdzania danych przez użytkownika innego niż ten, który złamał kompilację. Oczywiście administrator musi być w stanie tymczasowo to obejść, jeśli dana osoba wyjedzie na wakacje - ale jeśli wszyscy wiedzą, że cały zespół jest spieprzony, dopóki nie naprawią swoich testów, szybko to rozwiążą.
Dobrą zasadą (która jest jeszcze lepsza, gdy jest zautomatyzowana) jest przywrócenie źródła do ostatniego znanego stabilnego zatwierdzenia po 15 minutach niepowodzenia kompilacji. Innymi słowy, jeśli nie możesz tego naprawić lub nie wiesz, co spowodowało przerwanie kompilacji lub testu, to cofnij go i działaj lokalnie, aż zostanie rozwiązany - nigdy nie zmuszaj innych programistów do poruszania kciukami, podczas gdy ty mierzysz problem, na którym im nie zależy.
PS Jeśli masz już wiele testów zakończonych niepowodzeniem, możesz użyć „progu końcowego” w CI. Skonfiguruj tak, aby kompilacja zakończyła się niepowodzeniem tylko wtedy, gdy wystąpi więcej niepowodzeń testowych niż ostatnim razem. To, wraz z regułą zasięgu, zmusi programistów do ostatecznej poprawy sytuacji testowej, jeśli będą chcieli móc dalej działać.
PPS Zdaję sobie sprawę, że niektórym może to wydawać się drakońskie, ale to wszystko zależy od twojej kultury. Jeśli dojdziesz do punktu, w którym ludzie po prostu nie pozostawiają zepsutej kompilacji lub testów nie powiodło się (mój zespół prawie nigdy tego nie robi, chociaż czasami muszę im przypominać), nie musisz przestrzegać najsurowszych zasad. Chociaż IMO zawsze powinieneś zawieść kompilacji na uszkodzonym teście jednostkowym. Testy integracji / przeglądarki mogą czasami zawieść.