Amarengo

Articles and news

Jenkins beállítása Androidra: hogyan kezeltem a kihívásokat, amelyekkel szembesültem

ebben a cikkben dokumentálom az utamat, hogy egy teljesen működő folyamatos integrációs rendszert érjek el a Jenkins segítségével. Ez a beállítás megfelel a munkakörnyezetemnek, amelynek több projektje ugyanazt a 4 modult használja az üzleti logikához.

először letöltöttem Jenkins-t a hivatalos weboldalról. Ezután kinyitottam a terminált, és a következő parancsot futtattam:

java -jar jenkins.war --httpPort=9091

megadtam egy másik portot, mint a szokásos 8080, hogy egyedi legyen, és elkerülje a hibákat, ha egy másik szolgáltatás használja a Jenkins-t.

az összes beállítási lépés elvégzése után fontos ellenőrizni, hogy a következő bővítmények telepítve vannak-e:

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

ezek a pluginok biztosítják, hogy Jenkins rendelkezik a megfelelő eszközökkel, hogy építsenek egy Android projekt.

a következő lépés a következő beállítások beállítása a Jenkins alkalmazásban:

  1. JDK beállítása Jenkins számára

felfedeztem a JDK részt, hogy a következőképpen nézzen ki, miután rákattintottam a Jenkins kezelése -> globális Eszközkonfiguráció elemre:

alapvető JDK konfiguráció

ezután rákattintottam a JDK hozzáadása elemre, majd kitöltöttem a következő űrlapot:

Add JDK Installation view

beírtam egy nevet, amely a kiválasztott verziót képviseli, majd kiválasztottam a verziót Install from java.sun.com (Megjegyzés: Jenkins Megkérdezi Az Oracle fiók adatait a JDK telepítéséhez).

ugyanazon a globális Eszközkonfigurációs oldalon megtaláltam a Gradle plugin beállításait, amelyekhez hozzáadtam egy olyan Gradle telepítést, amelynek verziója megegyezik a projektjeimben használt Gradle verzióval. A további félreértések elkerülése érdekében projekteket futtatok Gradle wrapper amelyet részletesebben tárgyalok a következő részben.

Gradle telepítési nézet

a félreértések elkerülése érdekében azt is megbizonyosodtam arról, hogy a név a kiválasztott verziót képviseli.

normális esetben a Gradle a helyi keresést végzi.tulajdonságok fájlt a projektben letölteni az Android SDK helyét. De amikor Jenkins, rájöttem, hogy ez nem mindig ez a helyzet, különösen, ha a Gradle wrapper.

az építési hibák elkerülése érdekében hozzáadtam az ANDROID_HOME-ot a Jenkins környezeti változókhoz. Ezt a Jenkins kezelése – > konfigurálja a rendszert, majd jelölje be a környezeti változók négyzetet itt:

globális tulajdonságok szakasz

és hozzáad egy változót az ANDROID_HOME névvel, és kitölti az értéket az SDK elérési útjával.

Add környezeti változó

elérése után ezeket a lépéseket, elkezdtem létrehozni egy új elemet Jenkins. A legtöbb projektem 4 fő android modulra támaszkodik, amelyek a Git adattárban Git almodulokként szerepelnek.

új elem beállítása nagyon egyszerű, ha nincs almodulja:

új elem oldal

egyszerűen írja be a nevet, válassza a Freestyle project lehetőséget, majd nyomja meg az OK gombot.

ezután lépjen a forráskód-kezelés oldalra. Általában a Git-et használom, és beállítom a repót:

forráskezelés szakasz

helyezze be a repo URL-t, és adjon hozzá hitelesítő adatokat, ha még nem tette meg. Most a trükk itt annak biztosítása, hogy ha HTTPS linket használ a repóhoz, akkor hozzá kell adnia a felhasználónevet és a jelszó típusú hitelesítő adatokat, különben, ha SSH-t használ, akkor adja hozzá az SSH típusú hitelesítő adatokat.

ha vannak részmoduljaid a git repo-ban, akkor a legegyszerűbb módja ennek a további viselkedésnek – > Add -> haladó részmodulok viselkedések és a következők végrehajtása:

  1. ellenőrizze a
  2. almodulok rekurzív frissítését az almodul frissítése során használni kívánt referencia repo elérési útjában adja hozzá a szülő repóban használt almodul mappanevet.
  3. az én esetemben mind a szülő, mind az almodulok ugyanazokat a hitelesítő adatokat használhatják, ezért ellenőriztem a hitelesítő adatok használatát a szülőtár alapértelmezett távoli távoli részéből.

Advanced sub-modules behaviours

adjon hozzá annyi ilyen modult, amennyit az almodulok száma tartalmaz, és győződjön meg arról is, hogy ha a szülő repo url HTTPS, akkor az almodulok belül hivatkoznak .a gitmoduloknak HTTPS-t is használniuk kell. Ugyanez vonatkozik az SSH-ra is.

a projekt sikeres felépítéséhez Jenkinsnek meg kell hívnia a Gradle szkriptet. A leghatékonyabb módszer az, ha megmondjuk Jenkinsnek, hogy hajtsa végre a projekt Gradle wrapper-jét, és határozza meg a feladatokat (clean, assembleDebug stb…)

Add Build lépés menü

Invoke Gradle Script szakasz

annak érdekében, hogy elkerüljék engedély megtagadva hiba, hogy gradlew végrehajtható van jelölve, és a feladatok vannak megadva.

a Jenkins sokféle műveletet tartalmaz, amelyeket a build befejezése után kell végrehajtani.

a projekt Automatikus közzétételének legegyszerűbb módja a play Áruházban az Android play store közzétételi bővítmények használatával itt található.

néhány megjegyzés az áruházba történő közzétételről

amikor új APK-t küld a boltba, a verziókódot növelni kell. Ennek automatizálásához ezt a részletet referenciaként készítettem.

ezenkívül a Jenkins legutóbbi módosításainak hozzáadásakor ügyeljen arra, hogy ugyanazt a nyelvet válassza, mint amelyet az áruházi adatlap leírásában talál:

az utolsó szakasz az, hogyan lehet automatikusan kiváltani a buildeket. A projektemhez a választott verzióvezérlés a bitbucket. Annak érdekében, hogy beállítsam, követtem ezt a wikit. Van azonban egy fogás, ahhoz, hogy a webhookok működjenek, Jenkinsnek webszerver-beállításon kell lennie. Kezdetben nem tettem, így a webhook nem működött. Ezt legyőztem azzal, hogy egy bizonyos projekt sikeres felépítése után más építéseket indítottam el. Ez megoldotta a problémámat, mivel elsősorban a 4 fő almodulokat fejlesztem ki egy dummy projektben, majd az összes többi projektbe húzom őket.

ezt a Build triggerek részben teheti meg, közvetlenül a Build felett:

Build triggerek szakasz

a jövőben a Jenkins és az automatizált tesztelés előnyeit fogom kihasználni, mind a jUnit teszteken, mind az Android műszerezési teszteken keresztül.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.