Amarengo

Articles and news

Jenkins instellen voor Android: hoe ik omging met de uitdagingen waarvoor ik stond

In dit artikel zal ik mijn reis documenteren om een volledig werkend continu integratiesysteem te bereiken met behulp van Jenkins. Deze setup past bij mijn werkomgeving die meerdere projecten heeft met behulp van dezelfde 4 modules voor business logic.

Ten eerste heb ik Jenkins gedownload van de officiële website. Toen opende ik de terminal en liep het volgende commando:

java -jar jenkins.war --httpPort=9091

ik heb een andere poort gespecificeerd dan de gebruikelijke 8080 om het uniek te maken en fouten te voorkomen, in het geval dat een andere service Jenkins gebruikt.

na het voltooien van alle installatiestappen, is het belangrijk om ervoor te zorgen dat de volgende plugins zijn geïnstalleerd:

  1. Git-plug-in
  2. Gradle-plug-in
  3. Android Lint-plug-in
  4. Google Play Android Publisher-plug-in

deze plug-ins zorgen ervoor dat Jenkins over voldoende tools beschikt om een Android-project te bouwen.

De volgende stap is het instellen de volgende instellingen in Jenkins:

  1. het opzetten van JDK voor Jenkins

ik ontdekte de JDK-sectie om er als volgt uit zien na het klikken op Beheren Jenkins -> Globale Configuratie Hulpprogramma:

Basic JDK configuratie

vervolgens heb ik klikte Toevoegen JDK dan vol tot het volgende formulier:

voeg JDK Installatieweergave

Ik heb een naam getypt die de geselecteerde versie weergeeft en heb de versie van Install gekozen van java.sun.com (opmerking: Jenkins zal vragen naar uw oracle account info om de JDK te installeren).

op dezelfde algemene Toolconfiguratiepagina vond ik de Gradle-plugin-instellingen waarin ik een Gradle-installatie heb toegevoegd die dezelfde versie heeft als de Gradle die in mijn projecten wordt gebruikt. Om verdere verwarring te voorkomen, run ik projecten met Gradle wrapper die ik in meer diepte in de komende sectie zal bespreken.

Gradle installatieweergave

ik heb er ook voor gezorgd dat de naam de geselecteerde versie weergeeft om verwarring te voorkomen.

normaal gesproken zal Gradle de lokale doorzoeken.eigenschappen bestand in het project om de Android SDK locatie op te halen. Maar bij het gebruik van Jenkins, ontdekte ik dat dit misschien niet altijd het geval is, vooral bij het gebruik van de Gradle wrapper.

om bouwfouten te voorkomen, heb ik ANDROID_HOME toegevoegd aan de Jenkins omgevingsvariabelen. Dit wordt bereikt door Jenkins -> systeem configureren en vervolgens de omgevingsvariabelen aan te vinken hier:

globale eigenschappen sectie

en het toevoegen van een variabele met de naam ANDROID_HOME en het vullen van de waarde met het pad naar de SDK.

voeg omgevingsvariabele

na het bereiken van al deze stappen, begon ik een nieuw item aan te maken in Jenkins. De meeste van mijn projecten vertrouwen op 4 hoofd android modules die zijn opgenomen in de git repository als Git submodules.

een nieuw item instellen is vrij eenvoudig als u geen submodules hebt:

nieuwe Item pagina

voer de naam in en selecteer Freestyle project en druk op OK.

ga vervolgens naar broncodebeheer. Normaal gesproken gebruik ik Git en stel ik de repo in:

sectie bronbeheer

voeg de repo-URL in en voeg referenties toe als u dat nog niet hebt gedaan. Nu is de truc hier om ervoor te zorgen dat als u gebruik maakt van een HTTPS link voor de repo, dan moet je gebruikersnaam en Wachtwoord type referenties toe te voegen, anders als het gebruik van SSH voeg dan de SSH type referenties.

als je submodules in de git repo hebt, dan is de makkelijkste manier om hiermee om te gaan door extra gedrag – > Add – >geavanceerde submodules gedrag en het volgende te doen:

  1. Controleer recursief submodules
  2. bijwerken in het pad van de referentie-repo die gebruikt wordt tijdens het bijwerken van de submodule, voeg de naam van de submodule-map toe die gebruikt wordt in de bovenliggende repo.
  3. in mijn geval kunnen zowel parent als submodules dezelfde referenties gebruiken, dus heb ik gecontroleerd gebruik referenties van standaard remote van parent repository.

geavanceerde submodules gedrag

Voeg zoveel van deze als het aantal opgenomen submodules en ook ervoor zorgen dat als de bovenliggende repo url is HTTPS, dan de submodules link binnen .gitmodules zouden ook HTTPS moeten gebruiken. Hetzelfde geldt voor SSH.

om het project succesvol te kunnen bouwen, moet Jenkins het Gradle script aanroepen. De meest efficiënte manier is om Jenkins te vertellen om de Gradle wrapper van het project uit te voeren en de taken te definiëren (clean, assembleDebug, enz…)

Voeg Bouwen stap menu

Beroepen Gradle Script Sectie

om te voorkomen dat toegang geweigerd fout, Maken Gradlew uitvoerbaar is ingeschakeld en de taken worden opgegeven.Jenkins omvat een groot aantal acties die moeten worden ondernomen wanneer de bouw voltooid is.

de meest eenvoudige manier om het project automatisch te publiceren op de play store met behulp van de Android play store publishing plugins kunt u hier vinden.

een paar opmerkingen over het publiceren naar de winkel

bij het indienen van een nieuwe APK naar de winkel, moet de versiecode worden verhoogd. Om dit te automatiseren, maakte ik dit fragment ter referentie.

bovendien, bij het toevoegen van theRecent Wijzigingen deel in Jenkins, zorg ervoor dat u dezelfde taal als de taal gevonden in de beschrijving van de winkel notering:

De laatste paragraaf is hoe trigger bouwt automatisch. Voor mijn project is het versiebeheer van mijn keuze bitbucket. Om het op te zetten, volgde ik deze wiki. Er is echter een addertje onder het gras, om de webhooks te laten werken moet je Jenkins hebben op een webserver instelling. In eerste instantie deed ik het niet zodat de webhook niet werkte. Ik overwon dit door het activeren van andere builds nadat een bepaald project met succes is gebouwd. Dit loste mijn probleem op aangezien ik voornamelijk de 4 belangrijkste submodules ontwikkel in een dummy project en ze vervolgens in alle andere projecten Trek.

dit kan worden gedaan in de Build Triggers sectie net boven Build:

Build Triggers sectie

mijn toekomstige stappen zullen zijn om gebruik te maken van Jenkins en geautomatiseerde testen, zowel door jUnit tests en Android instrumentatie testen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.