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