Cóż, planuję użyć narzędzia ciągłej integracji w projekcie i jestem unikalnym programistą. Potrzeba przychodzi, ponieważ
- Jednym z celów jest uczynienie go wieloplatformowym, a posiadanie narzędzia integracyjnego pomaga w sposób niejawny (podstawowy) sprawdzić aplikację na kilku platformach po wprowadzeniu zmian w repozytorium integracji (lub centralnym, lub czymkolwiek innym, będą używane jako wiarygodne).
- Projekt jest budowany długoterminowo, więc będę musiał później współpracować z zespołem. Nie planuję nikogo rekrutować do 2012 roku, więc ciągła integracja może poczekać chwilę, aż 1. stanie się priorytetem.
Poza przygotowaniem do pracy na różnych platformach i w zespole nie widzę takiej potrzeby. Najważniejsze jest mieć oprogramowanie do kontroli źródła i mieć kilka repozytoriów do przechowywania kopii zapasowych. Pomoże Ci to skonfigurować narzędzia do budowania wokół niego, gdy zajdzie taka potrzeba.
Jeśli chodzi o czas kompilacji, używam Mercurial i konfiguruję repozytorium integracji, które nie jest repozytorium pracy zespołowej. Pchaj zmiany w repozytorium pracy zespołowej, aż poczuję, że nadszedł czas, aby system integracji spróbował zbudować. Następnie przechodzę z repozytorium pracy zespołowej do repozytorium integracji, co uruchomi kompilację. Następnie dodam również skrypt, który będzie pobierał repozytorium pracy zespołowej w repozytorium integracji raz dziennie.
Zakładam, że pracuję prawie cały dzień nad moim projektem, ale nie zawsze jest to prawdą. Musisz ustawić czas kompilacji zależny od tego, jak często potrzebujesz kompilacji. W firmie produkującej gry, w której wcześniej pracowałem, korzystaliśmy z CruiseControle, która co godzinę budowała pełną wersję. W razie potrzeby moglibyśmy również wymusić kompilację.
W przypadku projektu domowego jeden raz dziennie może być już „często”. Głównym wymaganiem byłoby umożliwienie użytkownikowi wymuszenia uruchomienia kompilacji.
Kiedy jestem jedynym, który się zobowiązuje, po prostu buduję i testuję, zanim faktycznie popełniam. Zwykle używam celu makefile, takiego jak:
To konfiguruje, buduje, uruchamia wszystkie testy (świadomy valgrind), uruchamia włókna itp. Ponieważ wiem, że będę jedynym, który pcha, tak naprawdę nie potrzebuję mocy czegoś takiego jak Hudson.
Dodatkowo, w środowisku, w którym kilka oddziałów zasila główne repozytorium, jeśli wszyscy wykonają polecenie pull zawsze przed zatwierdzeniem lub wypchnięciem, serwer CI może być trochę przesadzony. Dobrze napisana zasada, że autor cokolwiek zepsuł ostatnią kompilację, kupuje pizzę w piątek, zwykle zapewnia sprawne działanie :)
Jeśli dojdzie do sytuacji, w której projekt jest wyraźnie podzielony na podsystemy, które mają swoich liderów, naprawdę musisz rozważyć użycie czegoś takiego jak Hudson. Ktoś może przetestować lokalnie, przegrać wyścig z innym podsystemem i ostatecznie popchnąć coś toksycznego.
Ponadto, jeśli utrzymujesz widelec szybko zmieniającego się projektu (na przykład własny zestaw łatek do jądra Linuksa), powinieneś naprawdę rozważyć użycie czegoś takiego jak Hudson, nawet jeśli jesteś „solo” w tym projekcie. Jest to szczególnie prawdziwe, jeśli rozgałęziasz / przestawiasz bezpośrednio z głównej linii.
źródło
make: don't know how to make sense. Stop
. Argh!Nie powiedziałbym, że to po prostu fajny bonus, powiedziałbym, że jest niezbędny dla wysokiej jakości inżynierii oprogramowania dla naszych solowych artystów. Większość z nas pozwoli nieco obniżyć swoje standardy jakości, jeśli spieszy im się, jeśli uznają, że łatwo to później naprawić. Jeśli popełnisz oprogramowanie w tym stanie, zasadniczo masz bezwartościową bazę kodu zapisaną w twojej kontroli źródła.
Jeśli przestrzegasz poprawnie (to znaczy, nie pomijasz testów i upewniasz się, że kompiluje się przy każdym zatwierdzeniu) CI zmusza cię do przestrzegania wyższego standardu jakości niż w przypadku, gdybyś po prostu i tak go zatwierdził.
źródło
Ważne jest, jeśli chcesz skrócić czas oczekiwania, aby sprawdzić, czy wszystko idzie dobrze. Chociaż możesz sprawić, by IDE skompilowało dla ciebie rzeczy, gdy tylko zapiszesz, nie uruchamia to automatycznie testów jednostkowych, więc mam serwer CI, aby uruchomił testy jednostkowe i raporty pokrycia przypadków testowych oraz inną analizę jakości mojego kodu, jak tylko to możliwe. Pcham to.
Jedyne, co muszę zrobić, to przesunąć moje bieżące zmiany do kontroli wersji i mogę wrócić do kodowania. I podczas gdy myślę o kodowaniu, system CI jest zajęty robieniem długich, skomplikowanych raportów dotyczących jakości, które będę oglądał od czasu do czasu, gdy mój mózg się uspokoi.
Mam osobną maszynę VMWare na tym samym laptopie, która wykonuje kompilacje kodu, który wypycham. Aby to zrobić, po prostu otrzymuję obraz VMWare pod klucz Linux i instaluję jenkins za pomocą apt-get i dokonuję kilku drobnych zmian w konfiguracji.
źródło