Nie, nie z dwóch powodów:
Prędkość
Zatwierdzenia powinny być szybkie. Na przykład zatwierdzenie, które zajmuje 500 ms., Jest zbyt wolne i zachęci programistów do dokonywania go oszczędniej. Biorąc pod uwagę, że w każdym projekcie większym niż Hello World będziesz mieć dziesiątki lub setki testów, uruchomienie ich podczas wstępnego zatwierdzenia potrwa zbyt długo.
Oczywiście sytuacja się pogarsza w przypadku większych projektów z tysiącami testów, które trwają kilka minut na architekturze rozproszonej lub tygodnie lub miesiące na jednej maszynie.
Najgorsze jest to, że niewiele można zrobić, aby przyspieszyć. Małe projekty w języku Python, które, powiedzmy, setki testów jednostkowych, trwają co najmniej sekundę na przeciętnym serwerze, ale często znacznie dłużej. W przypadku aplikacji C # będzie to średnio cztery-pięć sekund ze względu na czas kompilacji.
Od tego momentu możesz albo zapłacić dodatkowe 10 000 USD za lepszy serwer, co skróci czas, ale niewiele, albo uruchomić testy na wielu serwerach, co tylko spowolni.
Obie opłacają się dobrze, gdy masz tysiące testów (a także testów funkcjonalnych, systemowych i integracyjnych), co pozwala uruchomić je w ciągu kilku minut zamiast tygodni, ale to nie pomoże ci w przypadku małych projektów.
Zamiast tego możesz:
Zachęć deweloperów do przeprowadzenia testów silnie związanych z kodem, który zmodyfikowali lokalnie przed zatwierdzeniem. Prawdopodobnie nie mogą przeprowadzić tysięcy testów jednostkowych, ale mogą przeprowadzić pięć-dziesięć z nich.
Upewnij się, że znalezienie odpowiednich testów i ich uruchomienie jest w rzeczywistości łatwe (i szybkie). Na przykład program Visual Studio jest w stanie wykryć, na które testy mogą mieć wpływ zmiany wprowadzone od czasu ostatniego uruchomienia. Inne IDE / platformy / języki / frameworki mogą mieć podobną funkcjonalność.
Zachowaj zatwierdzenie tak szybko, jak to możliwe. Egzekwowanie reguł stylu jest OK, ponieważ często jest to jedyne miejsce, aby to zrobić, a ponieważ takie kontrole są często niezwykle szybkie. Wykonywanie analizy statycznej jest prawidłowe, gdy tylko będzie działać szybko, co rzadko się zdarza. Uruchomienie testów jednostkowych jest nieprawidłowe.
Przeprowadź testy jednostkowe na serwerze Continuous Integration.
Upewnij się, że programiści są automatycznie informowani, kiedy zepsują kompilację (lub gdy testy jednostkowe się nie powiodą, co jest praktycznie tym samym, jeśli weźmiesz pod uwagę kompilator jako narzędzie sprawdzające niektóre z możliwych błędów, które możesz wprowadzić do kodu).
Na przykład przejście do strony internetowej w celu sprawdzenia ostatnich kompilacji nie jest rozwiązaniem. Powinny być one automatycznie informowane . Wyświetlanie wyskakującego okienka lub wysyłanie wiadomości SMS to dwa przykłady tego, w jaki sposób mogą zostać poinformowani.
Upewnij się, że programiści rozumieją, że przerwanie kompilacji (lub nieudane testy regresji) nie jest w porządku, a jak tylko to się stanie, ich najwyższym priorytetem jest naprawa. Nie ma znaczenia, czy pracują nad funkcją o wysokim priorytecie, którą ich szef poprosił o dostarczenie na jutro: kompilacja się nie powiodła, powinni ją naprawić.
Bezpieczeństwo
Serwer hostujący repozytorium nie powinien uruchamiać niestandardowego kodu, takiego jak testy jednostkowe, szczególnie ze względów bezpieczeństwa. Czy te powody zostały już wyjaśnione w module CI na tym samym serwerze GitLab?
Z drugiej strony, jeśli twoim pomysłem jest uruchomienie procesu na serwerze kompilacji z haka przed zatwierdzeniem, spowolni to jeszcze bardziej zatwierdzenia.