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.
źródło
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.
źródło
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.
źródło
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.
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ę.
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.
źródło