Com compilar aplicacions Android amb Jenkins

En temps de desenvolupament de programari mitjançant metodologies àgils, Scrum i integració contínua, on tots els membres d’un equip integren el seu codi freqüentment i poden realitzar diverses pujades a el dia depenent de les tasques a desenvolupar, resulta imprescindible l’ús d’eines que permetin conèixer en tot moment l’estat del producte, les diferents versions i l’estat en què es troba.

Cada vegada que es realitza una pujada de codi a repositori, es realitza una integració que compila el codi font i verifica que s’ha realitzat correctament, obtenint un executable de l’aplicació. Per a aquest procés, en SDOS ens hem decantat per l’ús de Jenkins, un programari gratuït i de codi obert escrit en Java i està basat en el projecte Hudson.

Per què Jenkins?

Aquest sistema suporta eines de control de versions com SVN o GIT i pot executar projectes basats en Ant i Maven, Gradle, etc. A més, a l’ésser un projecte Open Source, és el més utilitzat pels desenvolupadors, comptant amb una gran comunitat de desenvolupament i suport.

Però Jenkins no és només una eina per a l’equip de desenvolupament, també serveix a l’ equip de QA: de la mateixa manera que possibilita l’execució de test automàtics o fins i tot l’ús de Sonarqube, just després de cada compilació permet comprovar la qualitat de la pujada.

Com utilitzar Jenkins amb Android?

en el desenvolupament Android, Jenkins pot servir per generar un .apk cada vegada que realitzem una pujada de codi a el repositori, guardant-la en un servidor FTP on tindrem un llistat de totes les versions generades.

En aquest post us expliquem com completar tot el procés. Comencem!

CREAR UN PROJECTE EN JENKINS

En primer lloc, vam crear un nou Job en Jenkins.

A continuació, seleccionem un nou projecte Freestyle per poder configurar-lo segons les nostres necessitats. Escrivim un nom i fem clic a D’acord.

CONFIGURAR LES SECCIONS DEL JOB

General

En aquesta secció definirem el següent:

  • Project name i description. És recomanable donar un nom intuïtiu a el projecte i una descripció concreta per saber què Job estem executant: a

  • quan es descarreguen els builds antics. És important definir un nombre màxim de build a guardar ja que no volem sobrecarregar la màquina ni omplir d’execucions nostre Job. Com a recomanació, ens quedarem amb les 10 últimes execucions realitzades. Si per necessitat de l’projecte necessitem que siguin més, podria augmentar-se el nombre, però hauria de ser només en casos puntuals.
    a
  • Paràmetres per executar el projecte. A la part general també definirem els paràmetres necessaris per a executar un Job. Per afegir hem de fer clic a This project is Parameterized i de seleccionar un Choice Parameter. Els paràmetres per a la compilació d’una app d’Android seran els següents:
    • Type. Per defecte en Android sempre apareixen dos tipus, debug i release, però poden afegir tipus personalitzats. En el nostre cas afegirem: Release, Preproduction i Debug.
    • Flavors. Un flavor defineix una versió customitzada de l’aplicació. Això ens permet definir diferents personalitzacions de l’aplicació depenent de la variant que necessitem. Per exemple, podríem tenir un flavor per a una demo de l’aplicació i un altre amb l’aplicació completa de pagament.
    • Git Parameter. Definirem com a paràmetre la branca que volem de l’repositori concret. Haurem de definir un valor per defecte per a les execucions automàtiques. Si tenim moltes branques en un mateix repositori, podem fer un filtre per nom de branca com, per exemple,. * _ Rc. * (Totes les branques que inclouen _rc, release candidate).

Pots trobar més informació sobre els paràmetres en aquest enllaç.

Source code management

en aquesta secció definirem el tipus de repositori que volem fer servir, en el nostre cas serà Git.

Una vegada que seleccionem l’opció de Git hem d’afegir:

  • URL de l’arxiu. On és guardat el codi de el projecte.
  • Credencials. Farem servir en usuari git prèviament afegit a Jenkins.
  • Branch. Especificarem la branca específica de el projecte que farem servir. Com ja l’hem triat una amb el paràmetre Git Parameter, li passem el valor d’aquest paràmetre amb $ Branch.

Build triggers

En aquesta secció definirem el tipus d’activador que necessitem per executar el build. Si no afegim cap, només s’executarà quan nosaltres ho forcem. Des d’aquí també podem:

  • Realitzar una execució remota des d’un script.
  • Realitzar l’execució de forma periòdica, per exemple cada nit a les 00:00.
  • Realitzar una execució quan es produeixi un push o un New merge request al dipòsit.

per ara ho deixarem per defecte i l’executarem manualment.

Build environment

En aquesta secció definirem dues opcions:

  1. Elimina la carpeta de l’workspace abans de cada execució (per realitzar una execució neta).
  2. Afegir el timestamp a registre per tenir més informació.

Build

A la secció de l’Build afegirem una Execute shell per a executar les següents comandes:

  • chmod + x gradlew: dóna permisos d’execució a el fitxer gradlew per si no els té (per defecte ja els té).
  • ./gradlew: executa el fitxer gradlew a la màquina on està Jenkins que és un Linux (compte amb aquest fitxer!).
  • assemble: és l’ordre per a compilar una aplicació Android.
  • $ Flavor: flavour triat per a l’execució. Posem $ perquè se substitueixi el valor de l’paràmetre pel seleccionat de l’desplegable flavor en la secció general.
  • $ Type: type triat per a l’execució. Posem $ perquè se substitueixi el valor de l’paràmetre pel seleccionat de l’desplegable type en la secció general.

Post-build actions

Des d’aquesta secció realitzarem principalment tres accions :

  • Guardar l’artefacte generat. Desarem tots els fitxers .apk generats en la compilació de el projecte. Per defecte el guardarem a: ** / *. Apk a a
  • Enviarem el fitxer .apk dins de la carpeta / apks / a un servidor FTP. En el nostre cas, tenim un servidor anomenat NAS1 en què guardarem el Apk generat en una carpeta ja creada dins de l’servidor.Nota: per establir la connexió amb un servidor FTP hem d’anar a Manage Jenkins > Configureu Jenkins > Publish over FTP, i afegir les dades corresponents al nostre servidor.
    a
  • Envia correu cada vegada que s’acabi un Build utilitzant l’acció post-build Editable email Notification. La configuració que tindrem serà la següent: a

Pots copiar el contingut de l’missatge per defecte d’aquest HTML:

Default Subject

 Result of Build $BUILD_NUMBER ${JOB_NAME} Project.

Default Content

<html><p> Hello. </p><p>This mail is auto-generated as part of the Jenkins execution of the project <b>${JOB_NAME}</b> </p><h2> BUILD DETAILS: </h2><p> <b>Project Name:</b> ${JOB_NAME} <br> <b>Build URL:</b> ${BUILD_URL} <br> <b> Build Number: </b> ${BUILD_NUMBER} <br> <b>Build Status: </b> ${BUILD_STATUS} <br> <b>Type: </b> $Type <br> <b>Flavor: </b> $Flavor <br> <b>Branch: </b> $Branch <br> <b>Download APK: </b> ${BUILD_URL}/lastSuccessfulBuild/artifact/apks/ <br> <b>Log: </b> The log file is attached into this e-mail. <br> <b>Log URL: </b> ${BUILD_URL}${JOB_NAME}/lastBuild/console <br> <b>Changes: </b> ${CHANGES, format="List of changes: <li><ul> %m </ul><ul> %d </ul> <ul> %r </ul></li> <br>"} <br></p><p> Thank you & Regards. </p></html>

Aquesta template és genèrica per qualsevol projecte ja que fa servir les següents variables:

  • $ {JOB_NAME}. Nom de l’Job al Jenkins.
  • $ {BUILD_URL}. URL exacta de l’Job.
  • $ {BUILD_NUMBER}. Nombre de Build executat.
  • $ {BUILD_STATUS}. Estat en què ha finalitzat el Build.
  • $ Type. Tipus seleccionat a l’executar el Build.
  • $ Flavor. Flavor seleccionat a l’executar el Build.
  • $ Branch. Branch seleccionada a l’executar el Build, si no s’ha triat cap apareix el nom de la branch per defecte definida.
  • $ {CHANGES}. Mostra els canvis realitzats en el commit que ha activat el Build.
    • % a: autor de l’commit.
    • % m: missatge de l’commit.
    • % d: data de l’commit.
    • % r: nombre de commit.

Això donarà lloc a un correu electrònic com el que es mostra a continuació . Obtenim així el .apk generat de forma senzilla.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *