Jednym z kryteriów testu Joela są codzienne kompilacje. Chodzi o to, że jeśli kompilacja zostanie zepsuta, ktokolwiek ją złamał, jest w pobliżu, aby ją naprawić. Jeśli kompilacji nie można naprawić, wszyscy będą musieli sprawdzić starą wersję i popracować nad nią. Rozumiem, że może to być dość złe w scentralizowanej kontroli wersji, w której ważne jest unikanie scalania i rozgałęziania w jak największym stopniu, ale to brzmi jak niewielka uciążliwość dla rozproszonej kontroli wersji. Czy zgadzasz się z tym? Czy istnieją inne powody, dla których codzienne kompilacje są ważne?
joel-test
version-control
builds
Casebash
źródło
źródło
Odpowiedzi:
Myślę, że należy tutaj zauważyć, że regularne kompilacje pomagają wykrywać błędy wcześniej niż później . Nie musi to być codzienne, ale często wystarczające. Idealnie może również uruchomić testy jednostkowe.
Celem jest ustalenie, kiedy kompilacja pęka przed końcową fazą testowania, i znalezienie ich jak najszybciej.
Wystarczy go skonfigurować, aby zbudować swoją główną gałąź rozwoju.
Używamy go w pracy (chociaż budujemy co godzinę) i często, gdy zapominamy o konfiguracji, o problemach dowiadujemy się na kilka godzin przed wydaniem.
źródło
Musisz dodać trochę do tego (i @GoodEnoughs):
Zdecydowanie nie - to, co robi kompilacja „serwerowa”, mówi ci, że twoja magistrala zbuduje się i przekaże swoje testy mniej więcej od czystego (im mniej jest konfiguracji, którą musisz wykonać w swoim środowisku).
Zastanawiam się nad przejściem na DVCS, ale nawet jeśli to zrobisz, wyciągniesz moją ciągłą integrację z moich zimnych, martwych rąk.
Na przykład: rozwijasz funkcję „a” rozwija funkcję „b” rozpowszechnianą, czy nie, w pewnym momencie musisz to wszystko połączyć - jeśli podczas zatwierdzania zapomnisz dodać plik, który aplikacja zbuduje na twoim komputerze, ale nigdzie indziej. Kiedy więc pchniesz kompilację do swojego „pnia”, uruchomi się ciągła integracja, a kompilacja zakończy się niepowodzeniem, a będziesz wiedział i miejmy nadzieję, że zanim ktoś wyciągnie twój nie tak kompletny kod, będziesz mógł podjąć kroki.
Jeśli pracujesz nad projektem z wieloma programistami, musisz być w stanie określić, skąd pochodzą wersje wydania - w efekcie tułowia - jest to prawdą niezależnie od tego, jak działa kontrola wersji.
Jeśli dodałeś funkcję - szczególnie tę, na której inni ludzie są zależni - być pewnym, że kiedy zostanie zmuszona do „życia”, buduje i przechodzi testy w innym miejscu niż środowisko programistyczne. Co więcej, wdrażam z kompilacji z mojego serwera kompilacji - w taki sposób określa się kompilację „ostateczną”. Ostatecznie zamierzam uruchomić kompilacje wdrażania uruchamiane przez użytkownika. Jego nie jest dobre powiedzenie, że można pracować wokół niego - nie można, jeśli jest to potrzebne (i nie kodowany okrągłe pola dev w biurze, aby znaleźć i popełnić brakujące pliki).
Czy to wszystko jest trochę mocne? Nie wiem - ale mój serwer kompilacji jest jedną z tych rzeczy, których nie mam, nie chcę oddawać.
źródło
Uważam, że codzienne wersje są bardzo ważne. Jeśli masz rozproszony zespół w różnych strefach czasowych, najlepiej jest znaleźć czas, który jest w przybliżeniu „na koniec dnia” dla większości zespołu. Ponadto, jeśli codzienne wersje mają automatyczny komponent testowy, jest to bardziej pożądane.
W czasach centralnych systemów kontroli źródła zalecałbym ciągłe kompilacje działające co 5-10 minut, gdy cokolwiek zmienia się w kodzie źródłowym. Ponieważ błąd kompilacji może spowolnić większość zespołu. W przypadku organizacji korzystających z rozproszonych systemów kontroli źródła ciągłe budowanie może nie być tak potrzebne, ponieważ programiści rzadziej bezpośrednio dotykają „nieskazitelnej” bazy kodu.
źródło
Idealnie, chyba że budujesz coś masywnego, którego budowa zajmuje ponad pół dnia, budowałbyś więcej niż raz dziennie. Po skonfigurowaniu serwera ciągłej integracji, takiego jak Hudson lub TeamCity , kompilacje będą się odbywać automatycznie, zazwyczaj co godzinę lub przy każdym zatwierdzeniu, a otrzymasz powiadomienie, jeśli wystąpią jakiekolwiek problemy.
Jest to dobry sposób na wczesne wykrywanie błędów, szczególnie jeśli uruchamiasz automatyczne testy w ramach kompilacji. Jest to szczególnie przydatne do znajdowania błędów konfiguracji, gdy kompilacja działa na komputerze jednego programisty, ale nie działa gdzie indziej, ponieważ coś zostało pominięte w repozytorium lub środowisku.
Bardziej zaawansowane serwery ciągłej integracji pozwalają również śledzić metryki w czasie (np. Procent pokrycia kodu, czas kompilacji, wiersze kodu itp.)
źródło
Codzienne kompilacje są w porządku. Zdecydowanie ich potrzebujesz, jeśli nie masz nic innego, ale szczerze mówiąc, myślę, że test Joela jest obecnie trochę przestarzały.
Moim zdaniem powinieneś budować nieprzerwanie przez cały dzień, uruchamiając przypadki testowe na poziomie jednostki, systemu i funkcjonalności oraz idealnie pakując i wdrażając na etapie podobnym do środowiska w tym samym czasie, jednocześnie sprawdzając, czy posiadane mechanizmy kontroli wersji i bazy danych, które masz na miejscu działają zgodnie z oczekiwaniami.
Jeśli czasy kompilacji lub wdrażania są zbyt długie, rozważ optomizację niektórych z tych problemów z dyskami fizycznymi lub programowymi, szybszymi połączeniami internetowymi, kompilacjami równoległymi itp. Czas, który zaoszczędzisz dzięki szybkiemu rozpoznawaniu przerw w kompilacji, dość szybko poprawi koszty sprzętu .
źródło
Codzienne wersje nie są ważne. Codzienne kompilacje, które zawsze są udane, są (lub te, w których jest przerywane tylko przez godzinę). Posiadanie CI, gdy kompilacja jest zepsuta, 70% czasu nie jest zbyt przydatne, ponieważ jeśli rzecz jest w większości zepsuta, nie pomaga to zidentyfikować błędu.
źródło
Myślę, że powinno to być codzienne budowanie, testowanie i wdrażanie na serwerze pomostowym.
Ideą „codziennej kompilacji” jest zawsze mieć coś gotowego do uruchomienia przez testerów i kierowników projektów, aby każdy miał pojęcie o tym, jaki jest rzeczywisty stan projektu.
W przeszłości w przypadku aplikacji komputerowych po „codziennej kompilacji” tester lub kierownik projektu mógł natychmiast uruchomić aplikację, więc nie trzeba było wspominać o kroku wdrażania.
źródło