2009-07-20 7 views
7

Buduję serwer CI i naprawdę doceniam faktyczne doświadczenia i przegląd tego, co ludzie używają.Jak działa ciągła integracja?

Jakie są twoje procesy budowania? Czy istnieje coś takiego jak:

  • jednego godzinowej dla kodu i testów,
  • codziennie inny build MSI i kodu metryki,
  • itp

a także, co robi swój kompletny build wykorzystanie procesu? Używasz coś takiego:

  • zespołu miasta,
  • msbuild,
  • nunit - do badań,
  • NCover - dla pokrycia testowego
  • ndepend - dla metryk kodu,
  • sandcastle - dla dokumentacji przez komentarze do kodu,
  • testcomplete - dla testów QA,
  • itd.?

Udostępnij! ;)

+2

proszę zobaczyć: http://stackoverflow.com/questions/102902/what-is-a-good-ci-build -process – Shog9

+2

@ Shog9: Pytanie, na które się powołujesz, omawia CI na bardziej abstrakcyjnym poziomie (odważę się powiedzieć * meta *?), podczas gdy to pytanie wymaga konkretnych szczegółów implementacji. Sądzę, że różnią się na tyle, by utrzymać tę otwartą. – Treb

Odpowiedz

3

Przeprowadziliśmy podobną rozmowę na najnowszej konferencji CITCON w Ameryce Północnej (Continuous Integration and Testing), podczas której wszyscy podzieliliśmy się doświadczeniami i próbowaliśmy stworzyć mapę drogową od prostego CI po bardzo rozbudowane systemy CI i wydania.

Oryginalne notatki konferencyjne to here. Wraz z Flickr photostream. A cleaned up version jest również dostępny na blogu urbancode.

Australijczycy powrócił wątek na CITCON Brisbane i pencast tego jest dostępny

Nadzieja niektóre z tych środków są użyteczne.

2

Dla Java, mamy instancję Hudson sprawdzanie zatwierdzeń w repozytorium SVN, za każdy popełnić jest kompilacja, w którym wszystko jest kompilowany i wszystkie jednostki testowe są prowadzone przy użyciu Maven2. Również Hudson jest podłączony do instancji Sonar, która mówi nam o statystyce dotyczącej stylu kodowania i zasięgu testowania.

Sonar screenshot http://nemo.sonarsource.org/charts/trends/60175?sids=1024412,1025601,1026859,1073764,1348107,2255284&metrics=complexity,mandatory%5Fviolations%5Fdensity,lines,coverage&format=png&ts=1244661473034

słodkie :)

+0

Czy w przybliżeniu znasz liczbę wyświetleń dziennie? – Treb

0

W moim przypadku (w-domu zaprojektowanego/wybudowanych/obsługiwany system CB), zobowiązuje się do VCS w drzewie docelowym przez daną CB config automatycznie w kolejce do CB Żądanie (wiele żądań przychodzących podczas działania CB zostaje zwinięte w jeden, który zostanie uruchomiony zaraz po zakończeniu bieżącego procesu CB).

Każda instancja CB odpowiada na żądanie CB wykonując kroki budowania i testowania, do których jest skonfigurowana (rozdzielając je równolegle do "chmury" rozproszonych serwerów współdzielonych przez wszystkie instancje CB), rejestrując wyniki kompilacji i testów i od czasu do czasu (nie częściej niż skonfigurowana częstotliwość) uruchamianie "ciężkich testów" (które mogą trwać bardzo długo i NIE będą blokować nadchodzących żądań CB - ciężkie testy są całkowicie rozwidlone, chociaż dzienniki sprawiają, że dokładnie jest dokładnie przeciw której budowali oni).

"Synchronizuj z głową" (ta "głowa" byłaby "pnia" w innych VCS ;-), dla zależności, które nie są częścią drzewa śledzonego przez CB, może się zdarzyć za każdym razem (byłyby one lekkie, niezwiązane z produkcją lub eksperymentalne kompilacje) lub tylko w przypadku bardzo wyraźnych żądań integracji (to jest druga skrajność, w przypadku "gałęzi wydań" dla projektów/projektów, które SĄ krytyczne pod względem produkcji) lub z pośrednią tolerancją.

To chyba nie wierzchołek praktyki inżynierskiej, ale w zakresie jego możliwości sprawdza się dobrze dla nas, dla naprawdę szerokiej gamy projektów o bardzo zróżnicowanej krytyczności, ciężaru zależności i c ;-).

2

W poprzednim projekcie używaliśmy dwóch serwerów luntbuild oraz serwera SVN.

Pierwsza maszyna luntbuild została użyta do zbudowania projektu - przyrostowa budowa + testy jednostkowe dla każdego zatwierdzenia, a następnie oczyścić test kompilacji + jednostki + pełne opakowanie instalacyjne w nocy.

Druga maszyna luntbuild była używana jako urządzenie testujące do testowania integracji. Jak tylko pierwsza maszyna zakończy budowanie instalacji nocnej, to ją podniesie, zainstaluje na sobie i uruchomi pełny zestaw testów integracyjnych (oparty na junitach sterownik swing gui), więc każdego ranka inżynierowie testowi otrzymają instalację wraz z raport kontroli poczytalności, aby mogli zdecydować, czy chcą wziąć nową kompilację, czy nie.

2

Używamy CruiseControl.net jako naszego serwera CI w połączeniu z nant. Większość kompilacji (mamy około 30 kompilacji) jest uruchamiana przy zmianach. Niektóre, mniej ważne, ciężkie kompilacje uruchamiane są tylko raz na noc, dotyczy to także buildów konserwacyjnych, które czyszczą większość normalnych buildów.

Dla naszych buildów kodu C/C używamy zastrzeżonego systemu kompilacji, który jest w stanie dystrybuować kompilacje kodu do każdej maszyny dostępnej w firmie (np. IncrediBuild, ale o wiele bardziej elastycznej). W przypadku naszych buildów C# bezpośrednio wywołujemy devenv.com, ale używamy NUnit do uruchamiania testów jednostkowych. Nasze testy jednostek C++ używają naszej własnej frameworki, a ich działanie prowadzi do xml, który jest bardzo podobny do NUnit. Dla niektórych dodatkowych sprawdzeń kodu uruchamiamy pclint każdej nocy. Na razie nie ma jeszcze zasięgu kodowania, co jest odrobiną wstydu.

Używamy również systemu do przygotowania finałów zbudowanych z naszego produktu. To tylko pierwszy krok, nadal wymaga pewnych ręcznych działań.

2

Procesy Build - mamy 4 aktualnie aktywnych oddziałów dużej bazy kodu, który buduje dla prowadzimy ciągły. Na każdym oddziale mamy buduje w podziale na dwa etapy:

  • Szybkie Continuous build, który biegnie po każdym popełnić tak, że możemy uzyskać opinię o łamanego kodu lub połamanych testy integracyjne jak najszybciej
  • Pełna zautomatyzowana kompilacja, która działa dwa razy dziennie, co gwarantuje, że kod będzie budowany od zera od początku do końca.

Nasz proces kompilacji jest koordynowany przez Zed Builds And Bugs i obejmuje Ant, Pozwól, Maven, JUnit, Findbugs, skrypty powłoki (historyczne), w całym systemie Windows, Linux, AIX, HP i Solaris.

Jesteśmy obecnie w procesie tym więcej roll-upy z trendów historycznych i statystyk, dzięki czemu możemy zobaczyć z wyższego poziomu, jak proces dev zmierza.

0

Jenkin jest najlepszym narzędziem do Continuous-Integration (CI). CI to nic innego jak częste integrowanie kodu w repozytorium (SCM). Ponadto, Integracja SCM w jenkins do budowania kodu.

Możesz ustawić częstotliwość odpytywania w jenkins. aby za każdym razem, gdy zmiany były dokonywane i dokonywane w SCM, Jenkins spróbuje stworzyć kompilację. W ten sposób działa ... ciągła integracja.