Skuteczny sposób zapewnienia „czystego systemu łupków” dla ciągłej usługi integracji


10

Chcemy skonfigurować usługę ciągłej integracji (CI) dla naszego projektu. Ta usługa CI powinna kontrolować wszystkie aspekty życia projektu, w tym wdrożenie.

Oznacza to, że chcemy, aby agent CI przy każdej iteracji pobierał czysty system (szczególnie Ubuntu Server), wdrażał tam nasz projekt i przeprowadzał testy.

Prawdopodobnie sami piszemy usługę CI od zera, ponieważ nasz ekosystem jest raczej niezwykły. Pytanie brzmi: jak skutecznie zapewnić czysty system łupków dla każdej iteracji CI?

Wdrożenie projektu zainstaluj kilka pakietów Debiana, konfiguruje kilka stron nginx, a także instaluje niektóre pakiety w menedżerze pakietów specyficznych dla języka implementacji (LuaRocks), w całym systemie. Nic bardziej nachalnego (jak sądzę). Dlatego ważniejsze jest, aby móc szybko ustawić czyste konto (w ciągu minuty na nowoczesnym sprzęcie, szybciej - lepiej) niż zapewnić absolutną izolację i czystość.

Widzę dwa sposoby, jak zrobić to, czego potrzebujemy:

  • Albo załóż jakieś więzienie (na przykład lxc).
  • Lub zainstaluj maszynę wirtualną, która może wykonywać migawki i używać ich.

Ale w tym momencie nie mam wystarczających informacji do podjęcia decyzji.

Co byś doradził Jakieś inne opcje? Jakieś konkretne nazwy narzędzi?

Uwaga: usługa CI byłaby uruchomiona w gościu Citrix XenServer. Płatne rozwiązania są OK, jeśli ceny są rozsądne. (Zwykle nie są rozsądne w tej dziedzinie.) Zdalne rozwiązania CI nie są w porządku.

Odpowiedzi:


5

Spójrz na szefa kuchni / włóczęgę . Nie jestem pewien, czy będzie wystarczająco szybki, ale coś do zbadania.

Na wypadek, gdybyś nie był zaznajomiony z Chef, jest to serwer zaprojektowany w celu umożliwienia prostego udostępniania serwerów w oparciu o kod. Polecam rzucić okiem na jeden z webcastów. Transmisja internetowa szefa kuchni Django

Vagrant, veewee, kucharz-solo i nóż-solo. Myślę, że to dotyczy większości tego, co chcesz robić.

Vagrant Post na blogu Wpis na blogu pokazujący szybką konfigurację serwera za pomocą Vagrant.


Dziękuję Ci. Czy chcesz podać więcej szczegółów w swojej odpowiedzi?
Alexander Gladysh

Nie użyłem tego sam do tego, więc mogę tylko opublikować kilka linków, które moim zdaniem powinny pomóc.
Philip Tinney,

13

Spójrz na Jenkins . Posiada wtyczki, które pozwalają na uruchamianie kompilacji na maszynach wirtualnych w VMWare lub VirtualBox lub w chmurze Amazon / a Eucalyptus . W przypadku maszyn wirtualnych działających w chmurze można określić skrypt inicjujący, w którym można wykonać takie kroki, jak instalacja pakietów.


Dzięki, ale Jenkins jest serwerem CI i chciałbym wiedzieć o sposobach samodzielnego zbudowania go.
Alexander Gladysh

2
@AlexanderGladysh Dlaczego chcesz na nowo wynaleźć koło? Kompilacje Jenkins mogą uruchamiać wszystko, od tworzenia plików po skrypty zwykłej powłoki, a ponadto ma solidny interfejs, doskonałą obsługę i wiele wtyczek. Nawet jeśli twoja kompilacja jest bardzo skomplikowana, musi to być gdzieś skrypt powłoki, który Jenkins może uruchomić
TheLQ

Nawet jeśli nie chcesz używać Jenkinsa, myślę, że najlepszym rozwiązaniem będzie coś opartego na chmurze. Możesz dostosować obraz maszyny, aby zapewnić żądane oprogramowanie, a także dodać konfigurację i kod do przetestowania podczas uruchamiania instancji, aby skrócić czas uruchamiania.
Lars Kotthoff,

W każdym razie, Jenkins, czy nie Jenkins, czego użyć, aby szybko uzyskać czyste migawki systemu operacyjnego? (Proszę przestać wspominać o chmurach innych firm - należy je uruchomić na naszych własnych serwerach.)
Alexander Gladysh

Czy możesz uruchomić chmurę Eucalyptus / OpenStack / ... na własnych serwerach?
Lars Kotthoff,

2

Korzystałbym z infrastruktury VM i tworzyłem szablon podstawowy lub korzystałem z chmury, jak sugeruje @LarsKotthoff. Szybko je rozkręcasz i możesz być pewien, od czego zacząłeś.

Jednak ostatecznie będziesz potrzebować czegoś poza maszyną wirtualną, aby zorganizować to, co się dzieje (skonfiguruj maszynę i rozpocznij dowolny proces na maszynie). Spojrzałbym na Jenkinsa pod kątem jego zdolności do przechwytywania wyników skryptów do późniejszej kontroli.

Chociaż Jenkins zaczął jako serwer CI, wiele organizacji, z którymi współpracowałem, korzysta z niego znacznie więcej, ale tak naprawdę jest to narzędzie do rozpoczęcia (ręcznie lub zgodnie z harmonogramem) i przechwytywania wyników oraz sprawdzania, co się stało, zgodnie z oczekiwaniami. I jest bardzo elastyczny.


Dzięki, ale chciałbym skonfigurować rzeczy bezpośrednio w instancji Xen VM, a nie na zewnątrz - w mojej konkretnej sprawie jest to o wiele łatwiejsze do zorganizowania. Zajrzę do Jenkinsa, ale wciąż szukam bardziej wąskiego rozwiązania.
Alexander Gladysh

Proszę również rozwinąć temat dotyczący „korzystania z infrastruktury VM i tworzenia szablonu podstawowego”.
Alexander Gladysh

2

Chcemy skonfigurować usługę ciągłej integracji (CI) dla naszego projektu. Ta usługa CI powinna kontrolować wszystkie aspekty życia projektu, w tym wdrożenie.

Jenkins został wymieniony przez wielu. Możesz przejść od podstaw za pomocą skryptów, ale Jenkins zapewni ci taką samą elastyczność przy mniejszym nakładzie pracy.

Oznacza to, że chcemy, aby agent CI przy każdej iteracji pobierał czysty system (szczególnie Ubuntu Server), wdrażał tam nasz projekt i przeprowadzał testy.

Wdrożenie projektu zainstaluj kilka pakietów Debiana, konfiguruje kilka stron nginx, a także instaluje niektóre pakiety w menedżerze pakietów specyficznych dla języka implementacji (LuaRocks), w całym systemie. Nic bardziej nachalnego (jak sądzę). Dlatego ważniejsze jest, aby móc szybko ustawić czyste konto (w ciągu minuty na nowoczesnym sprzęcie, szybciej - lepiej) niż zapewnić absolutną izolację i czystość.

Tutaj przydają się obrazy maszyn wirtualnych. Możesz ustawić czysty obraz i pozwolić, aby każda maszyna uruchomiła jego rozwidlenie. Oryginalny obraz nigdy nie jest modyfikowany, ale twoje testy nie rozpoznają różnicy. Zdecydowanie powinieneś być w stanie uruchomić obraz bootstrap za minutę.

Płatne rozwiązania są OK, jeśli ceny są rozsądne. (Zwykle nie są rozsądne w tej dziedzinie.) Zdalne rozwiązania CI nie są w porządku.

Jeśli szukasz uruchomionych wielu maszyn jednocześnie, sprawdź Nimbulę (jestem bezwstydny; pracuję dla nich). W przypadku mniejszych wdrożeń jest on bezpłatny i umożliwia połączenie własnej chmury prywatnej do testowania ... lub cokolwiek innego. Pomiędzy Jenkinsem a plikiem aranżacyjnym możesz rozdzielić serwery hosta, przetestować klientów i wszystko inne, aby automatycznie uruchomić pełną gamę kodu testowego bez żadnej interakcji.


Ugh. Może dzisiaj jestem powolny, ale próbowałem przekopać się przez stronę Nimbula, ale nie widzę powodu, dla którego marketing mówi. Czy chcesz wskazać rozsądny tekst, który opisuje, jak zrobić to, czego potrzebuję? (Tj. Skonfigurowałem szablon maszyny gościa i ze skryptu utworzyłem instancję i zabiłem ją dla każdej sesji CI.)
Alexander Gladysh

@AlexanderGladysh Jest to przydatne, jeśli używasz wielu maszyn do budowania z / dużo pracy CI. Jest to bezużyteczne, jeśli nie masz wystarczającego obciążenia, aby uzasadnić klaster co najmniej 3 komputerów.
Jeff Ferland
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.