Amarengo

Articles and news

ställa in Jenkins för Android: Hur jag hanterade de utmaningar jag mötte

i den här artikeln kommer jag att dokumentera min resa för att uppnå ett fullt fungerande kontinuerligt integrationssystem med Jenkins. Denna inställning passar min arbetsmiljö som har flera projekt med samma 4 moduler för affärslogik.

för det första laddade jag ner Jenkins från den officiella webbplatsen. Sedan öppnade jag terminalen och körde följande kommando:

java -jar jenkins.war --httpPort=9091

jag angav en annan port än den vanliga 8080 för att göra den unik och undvika eventuella fel, om en annan tjänst använder Jenkins.

när du har slutfört alla installationssteg är det viktigt att se till att följande plugins är installerade:

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

dessa plugins kommer att se till att Jenkins har tillräckliga verktyg för att bygga en Android-projekt.

nästa steg är att ställa in följande inställningar i Jenkins:

  1. ställa in JDK för Jenkins

jag upptäckte JDK-avsnittet för att se ut som följer efter att ha klickat på Hantera Jenkins- > Global Verktygskonfiguration:

grundläggande JDK-konfiguration

jag klickade sedan på Lägg till JDK och fyllde sedan i följande formulär:

Lägg till JDK-installationsvy

jag skrev ett namn som representerar den valda versionen och valde versionen från Installera från java.sun.com Jenkins kommer att fråga om din Oracle-kontoinformation för att installera JDK).

på samma globala Verktygskonfigurationssida hittade jag sedan Gradle-plugin-inställningarna där jag lade till en Gradle-installation som har samma version som Gradle som används i mina projekt. För att undvika ytterligare förvirring kör jag projekt med Gradle wrapper som jag kommer att diskutera mer ingående i det kommande avsnittet.

Gradle installation view

jag såg också till att namnet representerar den version som valts för att undvika förvirring.

normalt söker Gradle den lokala.egenskaper fil i projektet för att hämta Android SDK plats. Men när jag använde Jenkins upptäckte jag att detta kanske inte alltid är fallet, särskilt när man använder Gradle wrapper.

för att undvika byggfel lade jag till ANDROID_HOME i Jenkins miljövariabler. Detta uppnås genom hantera Jenkins- > konfigurera systemet och markera sedan rutan miljövariabler här:

Global Properties Section

och lägger till en variabel med namnet ANDROID_HOME och fyller värdet med sökvägen till SDK.

Lägg till miljövariabel

efter att ha uppnått alla dessa steg började jag skapa ett nytt objekt i Jenkins. De flesta av mina projekt är beroende av 4 huvudsakliga android-moduler som ingår i Git-förvaret som Git-submoduler.

att ställa in ett nytt objekt är ganska enkelt om du inte har några undermoduler:

Ny artikelsida

ange bara namnet och välj Freestyle project och tryck på OK.

gå sedan till Källkodshantering. Jag använder normalt Git och ställer in repo:

Källhanteringsavsnittet

infoga repo-URL: en och Lägg till referenser om du inte redan har gjort det. Nu tricket här är att se till att om du använder en HTTPS-länk för repo, då måste du lägga till användarnamn och lösenord typ referenser, annars om du använder SSH sedan lägga till SSH typ referenser.

om du har undermoduler i git repo, är det enklaste sättet att hantera detta genom ytterligare beteende – > Lägg till – > avancerade undermoduler beteenden och gör följande:

  1. kontrollera rekursivt uppdatera undermoduler
  2. i sökvägen till referensrepo att använda under submodule uppdatering, lägga till submodule mappnamn som används i den överordnade repo.
  3. i mitt fall kan både förälder och submoduler använda samma referenser så jag kontrollerade använd referenser från standardfjärrkontroll av föräldraförvaret.

avancerade delmoduler beteenden

Lägg till så många av dem som antalet delmoduler ingår och även se till att om den överordnade repo url är HTTPS, sedan delmoduler länken inuti .gitmodules bör också använda HTTPS. Detsamma gäller för SSH.

för att lyckas bygga projektet måste Jenkins åberopa Gradle-skriptet. Det mest effektiva sättet är att berätta för Jenkins att utföra projektets Gradle wrapper och definiera uppgifterna (ren, assembleDebug, etc…)

Lägg till Byggstegsmeny

anropa Gradle Script avsnitt

för att undvika tillstånd nekas fel, gör Gradlew körbar kontrolleras och uppgifterna anges.

Jenkins innehåller en mängd olika åtgärder som ska vidtas när byggnaden är klar.

den mest rakt fram sätt att automatiskt publicera projektet på play store med hjälp av Android play store publicering plugins kan hittas här.

några kommentarer om publicering till butiken

när du skickar in en ny APK till butiken måste versionskoden ökas. För att automatisera detta gjorde jag detta utdrag som referens.

dessutom, när du lägger tillrecent ändrar del i Jenkins, se till att du väljer samma språk som det språk som finns i beskrivningen för butikslistan:

det sista avsnittet är hur man utlöser byggnader automatiskt. För mitt projekt är versionskontrollen av mitt val bitbucket. För att ställa upp, Jag följde denna wiki. Men det finns en fångst, för att webhooks ska fungera måste du ha Jenkins på en webbserverinställning. Ursprungligen gjorde jag inte så webhook fungerade inte. Jag övervann detta genom att utlösa andra byggnader efter att ett visst projekt har byggts framgångsrikt. Detta löste mitt problem eftersom jag huvudsakligen utvecklar de 4 huvudsakliga submodulerna i ett dummyprojekt och drar dem i alla andra projekt.

detta kan göras i avsnittet Build Triggers precis ovanför Build:

Build Triggers avsnitt

mina framtida steg kommer att vara att dra nytta av Jenkins och automatiserad testning, både genom jUnit-tester och Android-instrumentationstester.

Lämna ett svar

Din e-postadress kommer inte publiceras.