Z jakich ram Continuous Integration korzystasz i dlaczego? [Zamknięte]

21

Istnieje wiele różnych frameworków Continuous Integration (CI) i zastanawiam się, która z nich jest najbardziej popularna. Z jakich ram korzystałeś w firmach, w których pracujesz?

Czy jest jakiś powód, dla którego jeden szkielet CI jest bardziej popularny niż inny - być może ma to związek z oferowanymi przez niego funkcjami, rzeczami, które się z nim integrują, a może po prostu marketingiem?

Wydaje się, że ciągła integracja jest częściej używana w światach Java i .net niż powiedzmy ruby ​​lub python. Dlaczego to?

Richard Warburton
źródło
Jednym z powodów, dla których CI nie jest tak istotny w Ruby i Python, jest to, że języki są interpretowane, więc nie trzeba niczego kompilować. Ale to tylko moja osobista opinia ...
mliebelt,
1
@mliebelt - CI rozwija się nie tylko do kompilowania kontroli. Możesz uruchomić testy jednostkowe / integracyjne (nawet z innymi zależnymi projektami).
Apoorv Khurasia

Odpowiedzi:

31

Hudson lub Jenkins (ten drugi jest rozwidleniem tego pierwszego). Powód: jest prosty (prosty w instalacji i obsłudze) i ma dużą elastyczność. Wtyczki dodają prawie każdą funkcjonalność, o której mogę myśleć.

Kilka lat temu użyłem damagecontrol . Był również prosty w użyciu, ale nie miał wtyczek. Ale autor zdecydował, że zrezygnuje z prostego rozwiązania i zaczął opracowywać nową wersję, która składałaby się z różnych serwerów komunikujących się ze sobą (co do cholery?). To nie działało dobrze i projekt się poddał. Od jakiegoś czasu szukałem, ale ani tempomat (zbyt skomplikowany), ani kontinuum naprawdę mnie nie złapały. Do Hudsona działało to od pierwszej chwili.

Memento
źródło
Dodam też do tego porządny interfejs użytkownika.
Martijn Verburg,
Tak, podsumowałbym interfejs użytkownika w prosty w użyciu.
Mnementh,
5
CruiseControl był trudny do rozpoczęcia ... Hudson tak łatwo było uruchomić. Wtyczka Chuck Norris ( wiki.hudson-ci.org/display/HUDSON/ChuckNorris+Plugin ) jest koniecznością.
Sam Dolan,
Hudson jest naprawdę świetny. Chociaż chciałbym, żeby było lepiej w izolacji. Jeśli masz dużą liczbę różnych zespołów pracujących nad luźno powiązanymi projektami, potencjał do stawania sobie nawzajem na palcach jest dość wysoki.
Greg Gauthier,
Ten programista nadal nie może skonfigurować Hudsona do pracy w systemie Windows :(
Mchl,
16

Korzystam z TeamCity w pracy i w domu. Ma świetne wsparcie dla różnych kompilatorów i jest rozszerzalny poprzez wtyczki.

Brak radzenia sobie ze stosami XML do konfiguracji to ogromny plus w moich książkach, a darmowa wersja jest wystarczająca dla moich potrzeb domowych.

Jeden problem, na jaki natknąłem się w TeamCity, ma związek z próbą automatycznej wersji zestawów .NET. Musiałem skonfigurować stosunkowo skomplikowane obejście, ale gdy już było na miejscu, działało jak urok.

Adam Lear
źródło
Spróbuję TC w domu. Nie mieliśmy nic poza problemami z cruisecontrol.net.
Nikt
8

Osobiście używałem tylko CruiseControl i CruiseControl.Net. Powodem tego jest ekonomia. Są dość stabilne, a po ich skonfigurowaniu naprawdę niewiele trzeba zrobić, aby je utrzymać. Społeczność użytkowników jest zazwyczaj bardzo pomocna i można ją rozszerzyć na Twoje potrzeby.

To powiedziawszy, dostępnych jest kilka komercyjnych ofert (jedna od JetBrains, druga od Atlassian), które oferują lepszą konfigurację i wsparcie handlowe. Chciałem wypróbować te oferty, ale naprawdę nie miałem jeszcze okazji.

Narzędzia CI odgrywają ważniejszą rolę w przypadku języków skompilowanych niż języki interpretowane, ale nie oznacza to, że narzędzie CI jest marnowane na języki interpretowane. Jeśli masz kilka projektów, które są od siebie zależne, i chcesz mieć pewność, że zmiana nie zepsuje przypadkowo jej zależności - narzędzia CI są nieocenione.

Istnieją trzy ogólne klasy problemów, które narzędzia CI mogą pomóc złapać:

  1. Błędy kompilacji - jeśli podpis klasy zmienia się w sposób, który niszczy zależności, najlepiej wiedzieć o tym przed upływem godzin dostarczenia.
  2. Błędy logiczne - jeśli zachowanie klasy zmienia się w sposób przerywający zależności, najlepiej o tym wiedzieć wcześniej. Należy to sprawdzić za pomocą pewnego rodzaju testów automatycznych, najczęściej testów jednostkowych.
  3. Testy akceptacyjne - jeśli masz zautomatyzowany zestaw testów do uruchomienia na gotowym produkcie, najlepiej przeprowadzać je często.

Języki interpretowane nie są kompilowane, więc nie ma żadnych błędów kompilacji do wyłapania. Jednak dwa pozostałe problemy są na tyle powszechne, że narzędzia CI są przydatne w projektach w Ruby / Python / Perl / etc.

Kluczowym słowem zarówno w błędach logicznych, jak i punktach testowych akceptacji jest testowanie „automatyczne”. Jeśli nie masz zestawu testów, które można uruchomić na komputerze, naprawdę brakuje Ci większych zalet narzędzi CI. Zautomatyzowane apartamenty można budować z czasem, dzięki czemu możesz zacząć od małych.

Edytować

Zobacz ten ładny wykres dla porównań funkcji wielu narzędzi CI (z których wielu nie wiedziałem):

http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix

Berin Loritsch
źródło
Kompilowane / interpretowane rozróżnienie nie jest tak czarne i białe. Na przykład Perl ma fazę kompilacji, która jest uruchamiana podczas uruchamiania (i może być wywoływana osobno z opcją „-c”) w celu sprawdzenia błędów składniowych.
Andrew Medico,
To prawda. Ruby 1.9 i Python również mają fazy kompilacji. Błąd kompilacji klasy problemu dotyczy każdego języka, który ostrzeże Cię, jeśli klasa / zmienna / metoda referencyjna nie istnieje podczas kompilacji. Zdecydowanie dotyczy każdego statycznie wpisanego języka. YMMV w dynamicznych, ale silnie pisanych językach (takich jak Ruby i Python).
Berin Loritsch,
„po ich skonfigurowaniu naprawdę niewiele trzeba zrobić, aby go utrzymać” - czy nie dotyczy to wszystkich serwerów ciągłej integracji?
Bryan Oakley,
5

Team Foundation Server

Solid CI, ścisła integracja z Visual Studio i Git jako kontrola wersji . Widziałem bardziej elastyczne serwery CI, takie jak Hudson, ale ścisła integracja TFS z innymi produktami sprawia, że ​​doświadczenie jest tak płynne, że ma sens tylko dla mojego zespołu.

Ryan Hayes
źródło
Przez „inne produkty” rozumiesz „produkty Microsoft”. Nie krytykuję cię, ale MS tak ustrukturyzowało swój stos technologiczny, że do integracji z produktami MS potrzebujesz innych produktów MS lub dużo cierpliwości i / lub wytrwałości.
GKelly,
1
Kompletny nonsens. Posiadają API i SDK do prawie wszystkiego, co robią, nawet Kinect, ale programiści spoza MS nie wiedzą, ponieważ zakrywają uszy, gdy tylko słyszą Micros .. (link do TFS SDK) msdn.microsoft.com/ en-us / library / bb130146 (v = VS.80) .aspx
Luke Puplett
2

Używam zarówno CruiseControl.NET i Hudson . Niektóre z moich wersji są na jednej z nich, a niektóre na drugiej.

Czemu? Ponieważ nie jestem inżynierem budowy, a ten, który jest inżynierem budowy, ustawił ich w ten sposób!

Nie mam problemu ze sposobem konfiguracji moich kompilacji ani z reklamacjami dotyczącymi jednego z produktów. Zgłaszam wam, jakie rzeczy są tutaj, rzeczowo i mam nadzieję, że doceniacie tę perspektywę!

AKTUALIZACJA: Od kiedy opublikowałem odpowiedź, Hudson został rozwidlony i stał się Jenkins . Powyższe zalecenie dotyczy Jenkins.

azheglov
źródło
1

Puls . Zasadniczo jest to Just Works, co dla zapracowanego inżyniera budowy to wielka sprawa. Mają też naprawdę doskonałe wsparcie techniczne. Głównym powodem, dla którego tak bardzo to uwielbiam, jest to, że mamy ponad 250 projektów i radzi sobie z nimi bez czkawki; Nie mogę powiedzieć tego samego o Hudsonie.

ebneter
źródło
1

Nasz zespół pracuje głównie w języku Python, C ++ i Java. Używamy Buildbot dla CI. Początkowo zaczęliśmy od niego, ponieważ integruje się z Trac i ponieważ wydawało się to proste. Wierzę, że jest to preferowane środowisko CI w świecie Pythona.


źródło
1

Hudson. Czasami jest trochę wadliwy, a niektóre z bardziej interesujących wtyczek nie działają, ale przy odrobinie trzymania w ręce jest całkiem użyteczny.

Prawdopodobnie użyłbym zamiast tego Pulse, ale jeśli potrzebujesz budować na wielu platformach, kosztuje to> 5 000 $, co jest trochę dużo.

Steve
źródło
1

CruiseControl.NET do ciągłej integracji. Działa całkiem dobrze, chociaż przy bardzo dużej liczbie projektów kompilacji, które skonfigurowaliśmy w CruiseControl, aplikacja CCTray na pulpicie jest strasznie niereagująca, nawet przy długich interwałach odświeżania.

NAnt jest przeznaczony dla skryptów kompilacji uruchamianych w projektach CruiseControl. W przypadku bardziej złożonych skryptów kompilacyjnych rozszerzyliśmy NAnt o niestandardowe zadania C # NAnt, co jest bardzo miłe - pisanie kodu w C # jest znacznie przyjemniejsze niż tworzenie skryptów NAnt.

Jesteśmy sklepem Microsoft i teoretycznie przejdziemy do Microsoft Team Build 2010 po migracji naszego środowiska Team Foundation Server do 2010.

Brett Rogers
źródło
0

Pamiętaj, że powinieneś być w stanie zbudować aplikację z wiersza poleceń, niezależnie od tego, czy masz uruchomiony silnik CI, czy nie.

Oznacza to, że wszystko, co robi silnik CI, to systematyzacja wywołań kompilacji i możesz wybrać silnik, który najlepiej odpowiada Twoim konkretnym potrzebom.

PErsonally Lubię Hudsona przede wszystkim dlatego, że „czuje się” miło, ale wiem, że jeśli wszystko zawiedzie, mogę przejść na inny bez większego wysiłku. Jeśli tak, prawdopodobnie najpierw zbadałbym ten stworzony przez Atlassiana, ponieważ podoba mi się „wyczucie” innych programów, które tworzą.

Zauważ, że wymienność oznacza, że ​​nie ma znaczenia, w jakim języku są one napisane. Wierzę, że Java została wybrana dla wielu silników, ponieważ wiele obsługiwanych platform w połączeniu z wieloma łatwo dostępnymi elementami składowymi. Potrzebujesz serwera WWW - weź go. Potrzebujesz wielu współbieżnych wątków - po prostu ich używaj. Potrzebujesz rozszerzalności - wrzuć do słoika.


źródło
0

Zanim jeszcze usłyszałem termin „ciągła integracja” (było to w 2002 lub 2003 roku), napisałem nocny skrypt kompilacji, który łączył się z cvs, wziąłem czystą kopię głównego projektu i pięciu mniejszych podprojektów, zbudowałem wszystkie słoiki za pośrednictwem mrówki następnie zbudowały i ponownie wdrożyły plik WAR za pomocą drugiego skryptu mrówki, który używał zadań mrówki tomcat.

Uruchomił za pośrednictwem crona o 19.00 i wysłał e-mail z grupą załączonych plików wyjściowych. Korzystaliśmy z niego przez całe 7 miesięcy projektu i pozostawał w użyciu przez następne 20 miesięcy konserwacji i ulepszeń.

Działa dobrze, ale nadal preferuje hudson od skryptów bash, cron i ant.

sal
źródło