Funkcje CI

Oto kilka funkcji, które można znaleźć w większości systemów CI.

Środowisko

Ważne jest, aby wybrać i zrozumieć środowisko sprzętu i oprogramowania, w którym system ma wykonywać przepływ pracy. W przypadku aplikacji na Androida ważne są te kwestie:

  • Platforma: Linux, Mac, Windows i ich wersje.
  • Dostępna pamięć: tworzenie aplikacji i uruchamianie emulatorów może zużywać dużo pamięci RAM. Często konieczne jest zmodyfikowanie parametrów takich jak rozmiar stosu JVM, aby uniknąć błędów dotyczących braku pamięci.
  • Wstępnie zainstalowane oprogramowanie: systemy CI zwykle udostępniają obrazy z dużą kolekcją dostępnych narzędzi, takich jak pakiet Java Development Kit (JDK), Android Software Development Kit (SDK), narzędzia do tworzenia, platformy i emulatory.
  • Architektura uruchomieniowa i zestaw instrukcji: ARM, x86. Jest to ważne w przypadku używania emulatorów.
  • Zmienne środowiskowe: niektóre są ustawiane przez system CI (np. ANDROID_HOME). Możesz skonfigurować własne, aby na przykład unikać umieszczania danych logowania na stałe w przepływie pracy.

Jest wiele innych aspektów, które warto wziąć pod uwagę, np. liczba dostępnych rdzeni oraz informacja o tym, czy wirtualizacja umożliwia uruchamianie emulatorów.

Dzienniki i raporty

Gdy dany krok się nie powiedzie, system CI powiadomi Cię o tym i zazwyczaj nie pozwoli scalić zmiany. Aby dowiedzieć się, co jest nie tak, poszukaj błędów w dziennikach.

Dodatkowo podczas tworzenia i testowania generowane są raporty, które są zwykle przechowywane jako artefakty konkretnej kompilacji. W zależności od systemu CI możesz użyć wtyczek, aby wizualizować wyniki tych raportów.

Czasy działania pamięci podręcznej i CI

Aby przyspieszyć ten proces, systemy CI korzystają z pamięci podręcznej kompilacji. W najprostszej formie zapisują one wszystkie pliki pamięci podręcznej Gradle po udanej kompilacji i przywracają je przed utworzeniem nowego. Działanie to zależy od funkcji pamięci podręcznej kompilacji Gradle i powinno zostać włączone w projekcie.

Oto kilka sposobów na skrócenie czasu działania i niezawodności:

  • Moduły: wykrywanie modułów, na które zmiana ma wpływ, oraz ich tworzenie i testowanie.
  • Pomijanie pamięci podręcznych: jeśli kompilacja zawiera skrypty zmodyfikowane przez dewelopera, zignoruj pamięci podręczne kompilacji. Bezpieczniej jest tworzyć od podstaw.
  • Testy fragmentowe: w szczególności testy z instrumentacją mogą pomóc w rozdzielaniu testów na wiele urządzeń. Obsługują je narzędzia Android Runner, urządzenia zarządzane przez Gradle i Laboratorium Firebase.
  • Kompilacje w postaci fragmentów: możesz podzielić kompilację między wiele instancji serwera.
  • Zdalna pamięć podręczna: możesz też używać zdalnej pamięci podręcznej Gradle.

Ponów nieudane testy

Niestabilne działanie odnosi się do testów lub narzędzi, które rzadko ulegają awarii. Zawsze staraj się wykrywać i rozwiązywać problemy, które generują niestabilne kompilacje i testy, ale niektóre z nich są trudne do odtworzenia, zwłaszcza w przypadku testów instrumentalnych. Typową strategią jest ponawianie prób w przypadku niepowodzenia, maksymalnie do maksymalnej liczby ponownych prób.

Nie ma jednego sposobu na skonfigurowanie ponownych prób, ponieważ mogą one mieć miejsce na wielu poziomach. W tabeli poniżej znajdziesz informacje o czynnościach, które możesz wykonać w przypadku niepewnego wyniku testu:

Błąd

Działanie

Emulator przez sekundę nie odpowiadał, co spowodowało przekroczenie limitu czasu

Ponowne uruchomienie nieudanego testu

Nie udało się uruchomić emulatora

Ponowne uruchamianie całego zadania

Podczas fazy płatności za pomocą kodu wystąpił błąd połączenia

Ponownie uruchom przepływ pracy

Ważne jest, aby rejestrować i śledzić, które części systemu są niestabilne, i inwestować w utrzymanie niezawodności i szybkości CI, bazując wyłącznie na ponownych próbach