Próbuję dodać ciągłą integrację do projektu.
Według Wikipedii jednym z głównych elementów CI są kompilacje automatyczne. Jestem jednak zdezorientowany, co to dokładnie znaczy, ponieważ artykuły dotyczące automatyzacji i budowania wydają się nie zgadzać.
Specyficzne punkty zamieszania: co oznacza „automatyczna kompilacja” w kontekście:
- projekt wykorzystujący interpretowany język, taki jak Python lub Perl?
- budowanie ze źródła na maszynie użytkownika końcowego?
- aplikacja, która ma zależności, których nie można po prostu wstępnie skompilować i rozpowszechnić, na przykład bazę danych w lokalnym systemie RDBMS na komputerze użytkownika?
builds
ibuild
dlatego, że nie wiedziałem, którego użyć.Odpowiedzi:
Masz rację, zauważając, że w przypadku niektórych technologii krok kompilacji nie jest konieczny. Zalecam jednak szersze spojrzenie na interpretację terminu „automatyzacja kompilacji”. Pomyśl o „kompilacji” jako o następujących dwóch głównych składnikach:
Automatyzacja zatem oznacza po prostu automatyczne - dowolne - jeśli nie wszystkie - operacje (tzn. Niewymagające ręcznej interwencji). W zależności od technologii może to obejmować wiele różnych kroków:
Kroki transformacji:
Kroki zapewniania jakości:
W dzisiejszych czasach dobre narzędzia CI pozwolą Ci rozwiązać wszystkie te problemy. Początkowo większość sklepów jest zainteresowana automatyzacją kompilacji swojego kodu, ponieważ jest to pierwsze - i najbardziej widoczne - źródło problemów w konwencjonalnym tworzeniu oprogramowania.
źródło
Automatyczna kompilacja to opis procesu, który powinien obejmować następujące podstawy:
5.1 Udana kompilacja, sukces testu jednostkowego
Jest to proces bez użycia rąk, który powinien przebiegać bez ręcznej interwencji.
źródło
Moim zdaniem zautomatyzowana kompilacja jest czymś takim
Celem jest wdrożenie procesu wdrażania, który można powtórzyć - przeczytać: przetestować - aby przed wdrożeniem do produkcji mieć pewność, że wszystko pójdzie nie tak. Im mniej interakcji ludzi w procesach kompilacji i wdrażania, tym bezpieczniejsze będzie wydanie.
Jeśli masz nieskompilowany język, nadal możesz zbudować witrynę i skompresować ją, aby utworzyć pojedynczy artefakt.
Dobre narzędzie CI pozwoli ci napisać wiele zadań do procesu kompilacji, w tym uruchomienie testów jednostkowych. Będzie także prowadzić rejestr twoich udanych i nieudanych kompilacji, zasięg testów itp. Ale to nie jest część tego, co określiłbym jako kompilację automatyczną. (tj. Dobry proces automatycznej kompilacji zawiera te rzeczy, ale słabej nie można nazwać „automatyczną kompilacją”, ponieważ brakuje tych rzeczy.)
Sugerowałbym, aby testy integracyjne / regresyjne były uruchamiane jako część procesu wdrażania, a nie procesu kompilacji (chociaż, jeśli masz wygodne środowisko, możesz je wdrażać przy każdej kompilacji).
źródło
W przypadku języków interpretowanych rzeczy mogą zostać trafione lub pominięte. Niektóre wzajemnie przenikane języki mają kompilatory, ale najczęściej nie ma potrzeby ich używania. W takim przypadku zwykle po prostu skanowałbym kod w poszukiwaniu błędów składniowych i parsujących zamiast kompilacji lub od razu przystąpiłem do uruchamiania testów na kodzie.
Dla mnie oznaczałoby to, że możesz podać jedno polecenie, które użytkownicy końcowi mogą uruchomić, aby uzyskać najnowszą wersję programu, skompilować ją, skonfigurować i wdrożyć w razie potrzeby.
Obejmowałyby one część testową ciągłej integracji, ponieważ można automatycznie zniszczyć i zrekonstruować bazy danych, aby upewnić się, że skrypty są poprawne i że program poprawnie je testuje.
źródło
To, o czym dyskutujesz w swoim pytaniu, to tak naprawdę 3 różne koncepcje:
Ciągła integracja u podstaw wprowadza niewielkie zmiany i często synchronizuje je z „globalną prawdą”. Zamiast robić kasę i trzymać ją przez tydzień, programista powinien pracować nad zadaniami, które można wykonać w ciągu jednego dnia, aby jego kod nigdy nie był zbyt daleko zsynchronizowany z głównym repozytorium.
Aby to osiągnąć bez powodowania bólu zespołu (tj. Sprawdzanie źródła, które nie buduje ani nie psuje istniejącej funkcjonalności). Deweloper musi sprawdzić, czy jego kod nie „przerywa kompilacji”. Jeśli zostanie to wykonane ręcznie, spowoduje to dodatkowe obciążenie procesu programowania (pomyśl o projekcie, który zajmuje dużo czasu i / lub ma wiele współzależności, w których zmiana jednego wiersza kodu może mieć nieoczekiwany wpływ na aplikację).
Aby złagodzić tę sytuację, używamy innych technik, aby usunąć to obciążenie.
Korzystamy z automatycznych kompilacji, aby pobrać źródło i zbudować je opcjonalnie, uruchamiając zautomatyzowane testy, które sprawdzają, czy aplikacja działa tak, jak powinna (ten krok jest tak przydatny jak zestaw testów).
Kolejny etap ciągłej dostawy rozwiązuje Twój problem z bazą danych i innymi problemami. Chodzi o to, aby zapewnić pewien poziom wersjonowania bazy danych i innych czynników środowiska, abyśmy mogli jak najszybciej potwierdzić, że aplikacja działa w środowisku możliwie najbliższym produkcji .
źródło
„Zautomatyzowana kompilacja” oznacza, że możesz przejść z kontroli źródła do pakietu, który można wysłać za pomocą jednej (planowanej) akcji (zazwyczaj skryptu powłoki lub pliku wsadowego).
To, co dokładnie stanowi kompilację, w tym kontekście zależy w dużej mierze od tego, co dokładnie wysyłasz, w jaki sposób jest ona dostarczana i jakie kroki są wymagane dla różnych części stosu programistycznego, ale w każdym razie zaczynasz od co jest pod kontrolą źródła, a ty otrzymujesz produkt nadający się do wysyłki (lub komunikat o błędzie i zły kierownik projektu).
W przypadku prostego projektu w języku Python automatyczna kompilacja może składać się tylko z dwóch kroków - sprawdzenia źródeł i skopiowania odpowiednich plików do odpowiednich katalogów. W przypadku bardziej skomplikowanych projektów może to obejmować:
źródło