Amarengo

Articles and news

Konfiguracja Jenkinsa dla Androida: jak radziłem sobie z wyzwaniami, przed którymi stanąłem

w tym artykule udokumentuję moją podróż do osiągnięcia w pełni działającego systemu ciągłej integracji za pomocą Jenkins. Ta konfiguracja pasuje do mojego środowiska pracy, które ma wiele projektów wykorzystujących te same 4 moduły do logiki biznesowej.

najpierw ściągnąłem Jenkinsa z oficjalnej strony. Następnie otworzyłem terminal i uruchomiłem następujące polecenie:

java -jar jenkins.war --httpPort=9091

podałem inny port niż zwykły 8080, aby uczynić go unikalnym i uniknąć błędów, w przypadku gdy inna usługa używa Jenkinsa.

po wykonaniu wszystkich kroków konfiguracji, ważne jest, aby upewnić się, że następujące wtyczki są zainstalowane:

  1. Wtyczka Git
  2. Wtyczka Gradle
  3. Wtyczka Android Lint
  4. Wtyczka Google Play Android Publisher

te wtyczki zapewnią, że Jenkins ma wystarczające narzędzia do zbudowania projektu Android.

następnym krokiem jest skonfigurowanie następujących ustawień w Jenkinsie:

  1. konfigurując JDK dla Jenkinsa

odkryłem sekcję JDK, aby wyglądać następująco po kliknięciu Zarządzaj Jenkinsem – > globalna Konfiguracja narzędzia:

podstawowa konfiguracja JDK

kliknąłem Dodaj JDK i wypełniłem następujący formularz:

Add Widok instalacji JDK

wpisałem nazwę, która reprezentuje wybraną wersję i wybrałem wersję z Zainstaluj z java.sun.com (Uwaga: Jenkins zapyta o informacje o koncie Oracle w celu zainstalowania JDK).

na tej samej globalnej stronie konfiguracji narzędzia znalazłem ustawienia wtyczki Gradle, w których dodałem instalację Gradle, która ma tę samą wersję, co Gradle używane w moich projektach. Aby uniknąć dalszych nieporozumień, uruchamiam projekty z Gradle wrapper, które omówię bardziej szczegółowo w nadchodzącej sekcji.

Widok instalacji Gradle

upewniłem się również, że nazwa reprezentuje wybraną wersję, aby uniknąć nieporozumień.

Zwykle Gradle przeszukuje lokalny.Plik Właściwości w projekcie, aby pobrać lokalizację Android SDK. Ale podczas korzystania z Jenkinsa odkryłem, że nie zawsze może tak być, zwłaszcza przy użyciu opakowania Gradle.

aby uniknąć błędów kompilacji, dodałem ANDROID_HOME w zmiennych środowiskowych Jenkins. Osiąga się to poprzez Manage Jenkins – > Configure System, a następnie zaznaczenie pola zmiennych środowiskowych tutaj:

sekcja właściwości globalnych

i dodanie zmiennej o nazwie ANDROID_HOME i wypełnienie wartości ścieżką do SDK.

Add zmienna środowiskowa

po wykonaniu tych wszystkich kroków zacząłem tworzyć nowy element w Jenkinsie. Większość moich projektów opiera się na 4 głównych modułach Androida, które są zawarte w repozytorium Git jako podmoduły Git.

Konfiguracja nowego elementu jest dość łatwa, jeśli nie masz żadnych podmodułów:

strona nowego elementu

wystarczy wpisać nazwę i wybrać Freestyle project i nacisnąć OK.

następnie przejdź do zarządzania kodem źródłowym. Zwykle używam Git i konfiguruję repo:

sekcja zarządzania źródłami

wstaw adres URL repo i dodaj poświadczenia, jeśli jeszcze tego nie zrobiłeś. Sztuczka polega na tym, aby upewnić się, że jeśli używasz łącza HTTPS do repo, musisz dodać poświadczenia typu nazwy użytkownika i hasła, w przeciwnym razie, jeśli używasz SSH, dodaj poświadczenia typu SSH.

jeśli masz podmoduły w repo Gita, to najprostszym sposobem na poradzenie sobie z tym jest dodatkowe zachowanie – > Dodaj – >zaawansowane zachowania podmodułów i wykonanie następujących czynności:

  1. zaznacz rekurencyjnie Aktualizuj podmoduły
  2. w ścieżce referencyjnego repozytorium używanego podczas aktualizacji podmodułu, Dodaj nazwę folderu podmodułu używanego w repozytorium nadrzędnym.
  3. w moim przypadku zarówno rodzic, jak i podmoduły mogą używać tych samych poświadczeń, więc sprawdziłem Użyj poświadczeń z domyślnego zdalnego repozytorium nadrzędnego.

zaawansowane zachowania podmodułów

dodają ich tyle, ile zawiera liczba podmodułów, a także zapewniają, że jeśli nadrzędnym adresem URL repo jest HTTPS, to podmoduły łączą się wewnątrz .gitmodules powinien również używać HTTPS. To samo dotyczy SSH.

aby pomyślnie zbudować projekt, Jenkins musi wywołać skrypt Gradle. Najskuteczniejszym sposobem jest powiedzenie Jenkinsowi, aby wykonał Gradle wrapper projektu i zdefiniował zadania (clean, assembleDebug, itp…)

Dodaj menu krok budowania

wywołaj sekcję skryptu Gradle

aby uniknąć błędu odmowy uprawnień, sprawdź, czy gradlew jest wykonywalny, a zadania są określone.

Jenkins zawiera wiele różnych działań, które należy podjąć po zakończeniu kompilacji.

najbardziej prosty sposób na automatyczne publikowanie projektu w Sklepie play za pomocą wtyczek do publikowania w sklepie Android play store można znaleźć tutaj.

kilka uwag na temat publikowania w sklepie

podczas przesyłania nowego APK do sklepu, kod wersji musi zostać zwiększony. Aby to zautomatyzować, zrobiłem ten fragment dla odniesienia.

ponadto, dodając część zmian w Jenkins, upewnij się, że wybrałeś ten sam język, co język znaleziony w opisie dla listy sklepu:

ostatnia sekcja to automatyczne uruchamianie kompilacji. Dla mojego projektu, Kontrola wersji mojego wyboru jest bitbucket. Aby go skonfigurować, śledziłem tę wiki. Jest jednak haczyk, aby webhooki działały, musisz mieć Jenkinsa na ustawieniach serwera www. Początkowo nie robiłem tego, więc webhook nie działał. Pokonałem to, uruchamiając inne Kompilacje po pomyślnym zbudowaniu określonego projektu. To rozwiązało mój problem, ponieważ głównie rozwijam główne podmoduły 4 w projekcie pozorowanym, a następnie wciągam je we wszystkie inne projekty.

można to zrobić w sekcji Build Triggers tuż nad Build:

sekcja Build Triggers

moim przyszłym krokiem będzie skorzystanie z Jenkinsa i testów automatycznych, zarówno poprzez testy jUnit, jak i testy instrumentacji Androida.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.