Jak zorganizowana jest ciągła integracja w dużych firmach?

11

W mojej firmie często nie wykonuje się żadnej kompilacji pośredniej, aby sprawdzić, w jaki sposób każda gałąź funkcji / poprawki błędów jest łączona w dev. Jest tylko codzienna kompilacja, która zawsze wywołuje wiele testów zakończonych niepowodzeniem i kompiluje błędy. Powiedziano mi, że nie ma sensu tworzyć kompilacji dla każdego scalenia dla ponad 1000 programistów.

Przeszukałem więc organizację CI w firmach, które mają tyle programistów lub więcej (Microsoft, Facebook) i nic nie znalazłem. Może znawcy mogą mi wtedy powiedzieć?

Megamozg
źródło
@gnat Czy jesteś odpowiedni? Jak to jest powiązane? Poprosiłem o doświadczenie wewnętrzne i wskazałem na przykład firmy. Nie poprosiłem o obsługę klienta.
Megamozg,
11
@gnat Nie rozumiem, jak to się z tym wiąże. Megamozg: CI jest zorganizowany według modułu projektów, nie ma modułu z 1000 programistów. Więc jeśli jest zbyt wiele osób, zmniejsz swój projekt / moduł w mniejszej części.
Walfrat
@Walfrat jest całkowicie powiązany. Ta strona nie służy do przeprowadzania ankiet / ankiet wśród dużych firm na temat tego, jak ich firmy robią różne rzeczy. Jeśli ktoś jest ciekawy takich rzeczy, powinien skorzystać z kanałów wsparcia tych firm
gnat
@gnat Naprawdę nie rozumiem, w jaki sposób zastosowałeś link, który podałeś, szczególnie w komentarzu podanym w odpowiedzi na Walfrat. Na podstawie tego komentarza ten IMHO byłby właściwym linkiem (część dotycząca pytań typu ankiety) softwareengineering.meta.stackexchange.com/a/6490
Newtopian

Odpowiedzi:

12

Zasadniczo jest to problem ze skalowaniem. Dzielisz swoją pracę na moduły, którymi mogą być różne projekty i / lub różne funkcjonalności twojego produktu.

Miałbyś zespoły zajmujące się zestawami tych modułów. Każda z tych drużyn miałaby skonfigurowane cykle CI dla swoich zakresów i dopiero po przejściu ich odpowiednich cykli kod byłby wypychany do repozytoriów głównych, gdzie prowadzony byłby główny cykl CI.

Główny cykl CI najprawdopodobniej będzie się różnić od cykli CI na poziomie zespołu pod następującymi względami:

  • Cykle CI na poziomie zespołu nie muszą budować kodu całej firmy, tylko te moduły, za które są odpowiedzialne, i moduły zależne. Jeśli istnieją dwa moduły, które są całkowicie niezależne i znajdują się w różnych zespołach, nie byłyby częścią cyklu CI drugiego zespołu.
  • Cykle CI na poziomie zespołu mogą mieć znacznie bardziej szczegółowe automatyczne testy niż główny cykl CI. Cykl główny CI zawierałby testy sprawdzania czystości i testy regresji, które w zależności od wielkości rozwiązania głównego byłyby uruchamiane codziennie lub nawet co tydzień, ponieważ testy te mogą czasem trwać dłużej niż 24 godziny.

To, co musisz zrobić z tym podejściem, to zapewnić automatyczne wypychanie z lokalnych repozytoriów do repozytorium centralnego po przejściu lokalnego cyklu CI, aby programiści nie spędzili ogromnej ilości czasu na wypchnięciu kodu do repozytoriów centralnych.

Vladimir Stokic
źródło
7

Oprócz tego, co powiedział @Vladimir_Stokic, w niektórych zespołach (mój ma ~ 150 programistów), budujemy kompilacje częściej niż co 24 godziny. Ilekroć nastąpi zatwierdzenie, uruchamiamy 5-minutowy zegar. Po upływie 5 minut wszystkie zatwierdzenia, które nastąpiły podczas tego 5-minutowego interwału, są łączone i budowane. Kompilacja jest zwykle kompilacją przyrostową. Mamy osobnego konstruktora, który uruchamia testy jednostkowe dla każdej kompilacji, która wystąpi. Po zakończeniu kompilacji, jeśli w trakcie kompilacji były jakieś zatwierdzenia (co zajmuje od 1 do 45 minut w zależności od tego, co się zmieniło), wszelkie oczekujące zmiany są budowane i tak dalej. Mamy również kompilację nocną (czystą, pełną), ale kompilacje, które mają miejsce przy każdym zatwierdzeniu (z grubsza), bardzo szybko mówią nam, czy testy się nie powiodły.

użytkownik1118321
źródło