Jenkins: instalación y configuración para iOS y Android

En esta ocasión vamos a describir todo el proceso necesario para automatizar la generación de nuevas versiones. Esto nos ayudará a detectar rápidamente posibles errores en las aplicaciones. Para ello instalaremos Jenkins y lo configuraremos para soportar aplicaciones iOS y Android. Si también desarrollas apps de ambas plataformas necesitarás un host con macOS para poder generar las versiones de iOS. ¡Recupera ese Mac mini obsoleto que tienes por ahí!

Instalación y configuración del host

En primer lugar instalaremos la última versión disponible de macOS para partir de una base lo más limpia posible. En la web de soporte oficial de Apple están todas las indicaciones necesarias para reinstalar el sistema operativo con todas las opciones existentes.

Tras las instalación configuraremos nuestro Apple ID y algunos ajustes básicos para tener el host siempre activo, accesible y disponible.

El primer ajuste será configurar una IP estática para tenerlo localizado dentro de nuestra red. Desde la página de soporte puedes conocer todas las opciones disponibles con las instrucciones para configurarla.

Un vez configurada pasaremos a los ajustes de Energía. ¡No nos gustaría que se suspenda o se quede apagado el host si se va la luz!. Para esto tendremos que activar varias opciones dentro del «Economizador» en «Preferencias del Sistema».

  • Impedir que el ordenador entre en reposo automáticamente cuando se apaga la pantalla.
  • Activar el ordenador para permitir el acceso a la red.
  • Arrancar automáticamente tras un corte de suministro.

Por último, solo queda tener activado el acceso remoto con «Sesión remota» y «Compartir pantalla» desde «Compartir» en las «Preferencias del Sistema» también. De esta forma tendremos acceso completo mediante SSH y VNC.

Una vez configuradas todas las opciones ya podemos instalarlo en un lugar donde no se sobrecaliente y desconectar el resto de periféricos si queremos.

Jenkins CI Jenkins

Llegados aquí nos conectamos mediante «Compartir pantalla» para descargar e instalar Jenkins desde la web oficial. El proceso es muy sencillo, tan solo hay que seguir los pasos que nos va indicando.

Una vez terminada la instalación cerramos el instalador (y lo borramos) y damos permisos de administrador al usuario que nos ha creado durante el proceso (Jenkins).

Desde nuestro navegador abrimos la url de Jenkins (ip-del-host:8080) para configurarlo. Una vez conectados solicita la contraseña de administrador. Para facilitar la configuración inicial instalaremos los plugins recomendados.

Como último punto, instalaremos dos plugins que nos serán necesarios para la ejecución de las tareas que vamos a configurar.

  • GitLab Plugin.
  • EnvInject Plugin.

El primero nos facilitará la integración con GitLab, generándonos hooks para cada tarea. Con el segundo, podremos generar variables de entorno durante la ejecución de la tarea de parámetros que necesitaremos en pasos posteriores.

Entorno

Antes de comenzar a crear las tareas en Jenkins es necesario tener Xcode y el SDK de Android configurados y funcionales. Para la instalación y gestión del SDK hemos optado por instalar Android Studio. De esta forma nos podrá detectar las versiones necesarias en cada proyecto y simplificarnos su descarga.

iOS

Un vez que tenemos todo configurado solo nos queda crear las tareas para cada aplicación. En este caso, instalaremos el plugin Xcode Integration para simplificar el proceso al máximo. ¡Recuerda reiniciar Jenkins para poder usar el plugin!

Ahora necesitamos crear la credencial para que Jenkins pueda firmar y distribuir automáticamente nuestras aplicaciones. Para esto tenemos que crear una credencial del tipo «Apple Developer Profile» y subir nuestro fichero .developerprofile que tendremos que exportar desde Xcode. Es muy importante importar el contenido de este fichero en el llavero del sistema en el Keychain del host de Jenkins. ¡Si no lo hacemos no se podrá firmar la aplicación!

Ahora ya tenemos todo lo necesario, por lo que crearemos una tarea de «Estilo Libre» y le daremos un nombre identificativo para empezar a configurarla.

El primer paso será configurar el origen del código en «Source Code Management». Seleccionaremos la opción que se adapte a nuestro entorno y configuraremos los parámetros necesarios para poder acceder al código (autenticación, rama, etc). Marcaremos las opciones Delete workspace before build starts  y Add timestamps to the Console Output en la sección «Build Enviroment» para que cada ejecución comience con un entorno limpio.

También podremos configurar Triggers que provocarán que se ejecute la tarea de forma automática, pero esto lo dejaremos para un próximo post donde profundizaremos en configuraciones más avanzadas. ¡Pronto en sus pantallas!

En este momento ya tenemos todo preparado para empezar a generar nuestra aplicación. Lo primero que tenemos que hacer es añadir en primera posición el paso «Import developer profile» y seleccionar el que hayamos creado antes para poder firmar el ipa que se genera.

Por último tenemos que añadir el paso más importe, el encargado de generar y firmar el ipa. Para esto tenemos el paso de Xcode, el encargado de hacer todo el proceso que habitualmente hacíamos desde nuestro propio Xcode. Como podréis comprobar las opciones que ofrece este plugin nos deberían de sonar a todos, por lo que las configuraremos en base a las necesidades de nuestra aplicación. Es importante dejar las opciones de Development Team en blanco y pasarnos por las opciones ocultas de Settings y Advanced Xcode build options.

Si queremos generar un ipa marcaremos Generate Archive y Pack applicaction, build and sign .ipa. Una vez más, las opciones son las que ya conocemos. Tendremos opciones para seleccionar cómo queremos exportar el ipa e incluir Bitcode entre las más destacables.

Ahora ya solo queda ejecutar la tarea con Build Now y analizar los resultados. Es probable que la primera vez falle y tengas que realizar varios ajustes. ¡Analiza todos los logs que ofrece para detectar el problema!

Android

Para Android necesitaremos el plugin Android Signing Plugin y declarar la variable de entorno ANDROID_HOME. Esta variable se declara en la configuración global de Jenkins. Busca el apartado de «Variables de entorno» y registra la variable junto con la ruta donde tengas instalado el SDK.

Al igual que en iOS, tendremos que generar una credencial para firmar los apks que vamos a generar. En esta ocasión crearemos una del tipo certificado en la que adjuntaremos nuestro certificado en formato PKCS12 junto con su contraseña.

El proceso es muy similar al de iOS, por lo que nos centraremos en la configuración del apartado Build. Es aquí donde encontraremos todas las diferencias y donde indicaremos como crear y firmar la aplicación.

Para generar nuestro apk tenemos que añadir el paso «Invoke Gradle script». En este paso marcaremos Use Gradle Wrapper y nos aseguramos de que sea ejecutable durante su ejecución. Con el paso ya añadido solo nos queda indicar en tasks la tarea de gradlew queremos ejecutar.

Si no conoces todas las disponibles vete al directorio de tu proyecto y ejecuta el siguiente comando:

./gradlew tasks

Del resultado que nos ofrece, nos interesa la sección Build tasks donde aparecen todas las tareas existentes. Para generar el apk deberás fijarte en las que comienzan por assemble.

Una vez que tienes localizada ya la tarea que tienes que ejecutar solo queda añadir el paso encargado de firmar el apk generado. Para esto busca y añade al final el paso «Sign Android APKs».

En esta ocasión también te sonarán las opciones que te ofrece. Tan solo tienes que seleccionar el Key Store creado al principio y el alias usado para la aplicación. Como es posible que te interese firmar cualquier apk generado en el paso o pasos anteriores, introduce «**/*.apk» en APKs to Sign y marca Archieve Signed APKs. De esta forma firmarás todos los apks que se hayan generado durante el proceso.

Ahora que todo ha funcionado y tienes los apks generados, entra en la pantalla principal de la tarea para poder descargarlos. ¡Recuerda que solo se mantienen los apks de la última ejecución!

Siguientes pasos

Con este post hemos visto cómo instalar y configurar tareas básicas para nuestras aplicaciones en Jenkins. En los siguientes posts profundizaremos en configuraciones más avanzadas y analizaremos opciones para automatizar el versionado de las aplicaciones. También aprovecharemos para adaptar nuestros proyectos con el objetivo de facilitar la integración y revisaremos las opciones disponibles para automatizar la publicación de las aplicaciones generadas.

 



¿Te gusta este post? Es solo un ejemplo de cómo podemos ayudar a tu empresa...
Sobre Sergio García

Desarrollador iOS.

Queremos tu opinión :)