Co oznacza „automatyczna kompilacja”?


15

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?

2
Oznaczono mnie zarówno buildsi builddlatego, że nie wiedziałem, którego użyć.

Odpowiedzi:


14

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:

  • Proces tworzenia artefaktów źródłowych transformacji (kod, schemat bazy danych, dokumentacja itp.) Wdrożonych dla użytkownika końcowego.
  • Zastosowanie środków zapewniania jakości podczas wspomnianej transformacji

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:

  • Kompilacja
  • Łączenie
  • Opakowanie
  • Rozlokowanie
  • Migracja danych
  • Utworzyć kopię zapasową
  • Powiadomienie

Kroki zapewniania jakości:

  • Ostrzeżenia / błędy kompilatora
  • Testy jednostkowe
  • Testy integracyjne
  • Testy systemu
  • Uwierzytelnianie przy wdrażaniu

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.


21

Automatyczna kompilacja to opis procesu, który powinien obejmować następujące podstawy:

  1. Pobierz najnowszy kod z Kontroli źródła
  2. Skompiluj najnowszy kod do pliku wykonywalnego
  3. Uruchom testy (testy jednostkowe, testy systemowe, testy integracyjne) względem skompilowanego kodu
  4. Wdróż ukończony plik wykonywalny w znanej lokalizacji do wdrożenia.
  5. Opublikuj wyniki kompilacji.
    5.1 Udana kompilacja, sukces testu jednostkowego

Jest to proces bez użycia rąk, który powinien przebiegać bez ręcznej interwencji.


3
Ponieważ zostało to wyraźnie zadane, możesz wspomnieć, że kroki, które nie mają zastosowania, są opcjonalne. Na przykład, jeśli Twoja aplikacja to kilka skryptów w języku Python, krok 2 może być niczym lub może być tak prosty, jak skompresowanie kodu do jednego pliku. Całkowicie dopuszczalne jest, aby nie mieć kroku kompilacji.
Bryan Oakley,

@BryanOakley To jest sprawiedliwe. Odpowiednikiem braku kompilacji skryptów może być zapewnienie, że wszystkie twoje zależności, jeśli takie istnieją, są odpowiednio zebrane w tym momencie. Na przykład wszelkie dodatkowe biblioteki innych firm wymagane przez skrypt Pythona powinny zostać uwzględnione, aby były uwzględnione we wszystkich poniższych krokach. Jest to również niepotrzebne, jeśli wiadomo, że maszyna docelowa i kompilacyjna ma zawsze wszystkie wymagane biblioteki.
Sheldon Warkentin,

2

Moim zdaniem zautomatyzowana kompilacja jest czymś takim

  • odbywa się automatycznie, zgodnie z harmonogramem lub przy każdym zatwierdzeniu kontroli źródła
  • tworzy zestaw artefaktów, które można wdrożyć po prostu na dowolnym serwerze

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).


Przydatne może być także zaplanowanie kompilacji i umożliwienie programistom rozpoczęcia automatycznej kompilacji za pomocą jednej akcji (jeśli są to dwie akcje, to nie jest tak naprawdę zautomatyzowana, prawda?) W naszym przypadku kompilacja dla niektórych systemów jest zbyt tęsknię za rozpoczęciem każdego zatwierdzenia, więc jest to zgodne z harmonogramem i na żądanie.
David Thornley,

@DavidThornley: Tak. To się przydaje. Większość narzędzi CI pozwala na rozpoczęcie kompilacji poza ustalonym harmonogramem. Ale znowu, nie przestaje być automatyczną kompilacją, ponieważ nie ma tej opcji. Przestałby to być automatyczna kompilacja, gdyby deweloper zawsze musiał ją uruchomić.
pdr

1
a project using an interpreted language, such as Python or Perl?

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.

budowanie ze źródła na maszynie użytkownika końcowego?

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.

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?

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.


1

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 .


1
Świetne punkty ... szkoda, że ​​większość ludzi nie czyta do samego końca wątku i nie głosuje.
hotshot309

0

„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ć:

  • kompilowanie, łączenie
  • przeprowadzanie automatycznych testów
  • tworzenie pakietów instalatora
  • instalacja
  • modyfikowanie bazy danych
  • tworzenie kopii zapasowych (na wypadek konieczności wycofania)
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.