Czytałem trochę o serwerach CI takich jak Jenkins i zastanawiam się: w którym momencie jest to przydatne?
Ponieważ z pewnością w przypadku małego projektu, w którym miałbyś tylko 5 klas i 10 testów jednostkowych, nie ma prawdziwej potrzeby.
Tutaj mamy około 1500 testów jednostkowych, które przechodzą (na starych stacjach roboczych Core 2 Duo) w około 90 sekund (ponieważ tak naprawdę testują „jednostki”, a zatem są bardzo szybkie). Zasada jest taka, że nie możemy zatwierdzić kodu, gdy test się nie powiedzie.
Dlatego każdy programista uruchamia wszystkie swoje testy, aby zapobiec regresji.
Oczywiście, ponieważ wszyscy programiści zawsze uruchamiają cały test, wychwytujemy błędy z powodu sprzecznych zmian, gdy tylko jeden programiści pobierze zmianę innego (jeśli taki istnieje).
Nadal nie jest to dla mnie jasne: czy powinienem skonfigurować serwer CI taki jak Jenkins? Co by to przyniosło?
Czy jest to przydatne do zwiększenia prędkości? (w naszym przypadku to nie problem)
Czy jest przydatny, ponieważ można tworzyć stare kompilacje? (ale możemy to zrobić za pomocą Mercurial, sprawdzając stare obroty)
Zasadniczo rozumiem, że to może być przydatne, ale nie rozumiem dokładnie, dlaczego.
Wszelkie wyjaśnienia uwzględniające powyższe kwestie byłyby bardzo mile widziane.
źródło
Prawdopodobnie nie potrzebujesz jeszcze CI, ale myślę, że przyda się, gdy przejdziesz do fazy testowania. Jenkins jest konfigurowany w ciągu kilku godzin, co uprości testowanie i pomoże uniknąć głupich błędów (dzieje się tak zwłaszcza, gdy spieszycie się z szybką poprawką do produkcji).
źródło
Dla mnie CI staje się interesujące, jeśli twój zespół ma więcej niż 1 członka.
Musisz przestać myśleć o CI jako o „innym komputerze z uruchomionymi dla mnie testami”. CI o posiadaniu zdefiniowanego i zautomatyzowanego procesu kompilacji i zarządzania wydaniami.
CI to jedyny autorytatywny podmiot, który tworzy wersję oprogramowania. Jeśli nie opiera się na CI, to po prostu się nie stało.
Dzięki CI masz ograniczenia w automatyzacji wszystkiego, co pokaże wszystkie ręczne poprawki, hacki i skróty, które masz na swoim miejscu i po prostu nie działają z CI i należy go przede wszystkim unikać.
Problemy, których unika:
Zalety (po prostu zbyt wiele, by wymienić wszystkie):
źródło
Jest jeden podstawowy problem związany z ciągłą integracją (CI), który jest doskonale odzwierciedlony w twoim pytaniu: praktyki CI są trudne do wdrożenia i obrony, ponieważ oprogramowanie serwera CI nie jest łatwe do skonfigurowania, ani nie jest łatwe do uruchomienia i uruchomienia projektów przez CI serwer. Dzięki temu trudno jest naprawdę zrozumieć, gdzie w ogóle jest korzyść z przyjmowania CI.
Przede wszystkim CI dotyczy wglądu i jakości. Dobry CI przybliża Cię do twojego projektu, zapewnia odpowiednią informację zwrotną na temat wskaźników jakości, dokumentacji, zgodności ze standardami kodowania itp. Powinien zapewnić narzędzia do łatwej wizualizacji tego wszystkiego i umożliwić szybkie rozpoznanie i łatwe rozpoznanie powiąż zestaw zmian z określoną migawką wszystkich tych wskaźników projektu.
Jest nie tylko o bieganiu testy jednostkowe. Ani trochę! Co prowadzi mnie do jakości. CI obejmuje błędy, nie omija ich ani nie wyrzuca. To, co robi, to po prostu zapewnia narzędzie do wcześniejszego błędu, zamiast później. Tak więc tak naprawdę nie zatwierdzasz wcześniej przetestowanego kodu na serwerze CI. Chociaż powinieneś dążyć do zatwierdzenia czystego i nieuszkodzonego kodu, tak naprawdę używasz serwera CI, aby automatycznie uruchamiać program budujący integrację automatycznie za pomocą twojego kodu i sprawić, aby wszystko poszło dobrze. Jeśli tak, to fajnie! Jeśli nie, nie ma problemu - dobre praktyki CI mówią, że Twoim następnym priorytetem powinno być naprawienie tego, co się zepsuło. Które, na dobrym serwerze CI, powinno być dla ciebie łatwe do wskazania.
Wraz ze wzrostem wielkości zespołu integracja kodu każdego staje się naturalnie trudniejsza. Zadaniem scentralizowanego serwera CI powinno być testowanie wszystkich zintegrowanych części i odciążenie członków zespołu. Więc musisz mieć wszystkich, którzy zaczynają wcześnie (i jak najczystiej), a następnie monitorują status kompilacji (zwykle są wysyłane powiadomienia). I znowu, jeśli coś zostanie zepsute z powodu zatwierdzenia przez jakiegoś dewelopera, natychmiast staje się jego odpowiedzialnością, aby to naprawić i natychmiast przywrócić te automatyczne kompilacje do stanu OK.
Widzicie więc, moim zdaniem, każdy projekt korzysta z ciągłej integracji. Chodzi o to, że do tej pory i ze względu na zadziwiającą złożoność każdego serwera CI, którego znam, ludzie naprawdę odpierali praktyki CI przy mniejszych / prostszych projektach. Ponieważ ludzie mają lepsze rzeczy do roboty niż spędzanie dni na konfigurowaniu brzydkiego, zbyt złożonego, niedostarczającego i rozdętego oprogramowania.
Miałem dokładnie ten sam problem i to właśnie od około roku temu rozwijam Cintient w wolnym czasie. Moim założeniem było uproszczenie instalacji, konfiguracji i użytkowania oraz dostarczenie tych wskaźników jakości, których wszyscy inni zawodzą lub nie osiągają wyników. Tak więc po tej długiej odpowiedzi pojawia się moja bezwstydna wtyczka wskazująca łącze GitHub do projektu (który jest darmowy i open source, natch). Najwyraźniej ma też kilka fajnych zrzutów ekranu. :-) https://github.com/matamouros/cintient
Mam nadzieję, że ci pomogłem.
(UWAGA: Edytowane po komentarzu Bryana Oakleya na temat faktu, że powinienem poświęcić więcej czasu na opracowanie lepszej odpowiedzi. Myślę też, że miał rację.)
źródło