Integración continua combinando Jenkins, iOS 9 y XCode 7.

Publicado el 29/10/2015 - Actualizado el 26/12/2016

Introducción

La ejecución de pruebas al código fuente es un eslabón fundamental durante el proceso de desarrollo de software. Realizar todas las pruebas a un sistema significa emplear gran cantidad de recursos durante su ejecución y en ocasiones las pruebas pueden tomar bastante tiempo en terminar.

Cada vez que se termina una tarea deben realizarse todas las pruebas para garantizar la calidad. Si el programador tiene que ejecutar las pruebas, su trabajo se verá retrasado por la demora que implica este proceso. Para evitar esta situación se delega la actividad de revisión a sistemas de integración continua con mayores capacidades de procesamiento. Estos sistemas pueden ser configurados para realizar tareas en los horarios menos activos para maximizar el rendimiento. Una vez terminada la tarea el sistema envía las notificaciones del resultado a los usuarios interesados.

En el presente artículo se muestra cómo configurar un proyecto para iOS 9 dentro del flujo de integración continua utilizando Jenkins.

Construya su Pipeline como Código

Ya puede definir sus procesos de Integración Continua y Despliegue Continuo (CI/CD) como si fuera código en Jenkins 2.0 para sus proyectos en iOS 9. Tareas como construir, pruebas, cobertura de código, estilo de código, reportes y notificaciones pueden estar descritas en un solo fichero.

Si desea saber cómo hacerlo siga este enlace y lea la segunda versión del artículo actual.

¿Cómo funciona?

Jenkins puede ser configurado para realizar la ejecución de pruebas a los proyectos para iOS 9. En el repositorio de Jenkins se encuentra el plugin XCode integration que nos permitirá compilar el código fuente y ejecutar las pruebas implementadas.

El plugin XCode integration realiza la ejecución de la pruebas y el resultado se escribe en un fichero con formato XML dentro del proyecto. El fichero XML generado tiene la misma estructura de los ficheros obtenidos al realizar pruebas con JUnit. Por tal motivo se va a utilizar el plugin JUnit para mostrar el resultado de las pruebas ejecutadas en el proyecto para iOS 9. El plugin Test Result Analyzer nos va a permitir mostrar el resultado de las pruebas en gráficos para un mejor entendimiento.

Pre requisitos

Para realizar los pasos del artículo deberá cumplir con los siguientes requerimientos:

  • Tener instalado Jenkins.
  • Tener instalado XCode 7.
  • Tener creado un proyecto para iOS 9 con pruebas unitarias implementadas.

Jenkins puede ser instalado en cualquier sistema operativo. Sin embargo, si se tiene instalado en una máquina con sistema operativo distinto a Mac OS deberá además incorporar los siguiente:

  • Tener una máquina con sistema operativo Mac OS 10.10.5.
  • Configurar la máquina Mac OS como Nodo en Jenkins para la ejecución de tareas.
  • Tener instalado XCode 7 en la máquina Mac OS.

Código fuente

En caso de no tener creado un proyecto para iOS 9 con estas características puede acceder al código fuente utilizado en este artículo.

Utilice la versión 1.0.0 del código.

Entorno

La configuración del entorno donde fue desarrollado el artículo es la siguiente:

### Sistema de integración continua ###
             SO: Ubuntu 14.04
        Jenkins: 1.635
   XCode Plugin: 1.4.9
   JUnit Plugin: 1.9
Test Results 
Analyzer Plugin: 0.2.1

### Nodo de Jenkins ###
          	 SO: Mac OS 10.10.5
       	  XCode: 7

### Proyecto iOS 9 ###
       Lengueje: Swift

Paso Uno – Instalar plugins a Jenkins.

Para instalar los plugins usted debe realizan los siguientes pasos:

  • Abrir Jenkins en el navegador web.
  • Navegar por Administrar Jenkins > Administrar Plugins.
  • Seleccionar el panel Todos los plugins.
  • Filtrar Xcode integration y seleccionar el plugins para instalarlo. Repetir esta operación, pero filtrando primero por JUnit Plugin y después por Test Results Analyzer Plugin.
  • Después de tener los tres plugins seleccionados se da clic en el botón Instalar sin Reiniciar.
  • Al terminar la instalación se da clic en el botón Reiniciar Jenkins.

Después de haber reiniciado el sistema se debe volver a Administrar Jenkins > Administrar Plugins y verificar que los plugins estén instalados correctamente. También se debe revisar la versión del plugin con la descrita en la sección Entorno.

Paso Dos – Crear nueva tarea de Jenkins.

Seleccionar Nueva Tarea en la página de inicio de Jenkins. Después llenar el campo Nombre de la Tarea con el valor que desee y seleccionar la opción Crear un proyecto de estilo libre. Para el ejemplo se ha utilizado time-table.

Una vez creada la tarea se selecciona la opción Configuración para realizar los ajustes necesarios dentro de ella.

Paso Tres – Ejecutar la tarea solamente en el nodo de Mac OS.

Si la máquina que tiene instalado el sistema operativo Mac OS es un Nodo de Jenkins se tiene que restringir la ejecución de la tarea a este Nodo solamente.

Para lograrlo tiene que seleccionar la opción Restringir donde se puede ejecutar este proyecto. En el ejemplo se estableció Mac OS para el nombre del nodo.

Paso Cuatro – Obtener el código del proyecto.

La sección Configurar el origen del código tiene que ser configurado. En el artículo se utilizó el plugin de Git para obtener el código fuente desde un servidor local donde se encuentra publicado.

Paso Cinco – Configurar el Plugin XCode.

Para adicionar las funcionalidades del Plugin XCode se da clic en el botón Adicionar un Nuevo Paso y se selecciona la opción XCode.

El plugin consta de cuatro secciones: General build settings, Code signing & OS X keychain options, Advanced Xcode build options y Versioning. En este artículo solo necesitaremos realizar ajustes en dos de ellos: General build settings y Advanced Xcode build options.

Sección General build settings

Se establece en el campo Configuration al valor Debug. Por defecto el plugin establece el valor Release.

Sección Advanced Xcode build options

El esquema donde se realizan las pruebas tiene que ser establecido. El campo Xcode Schema File es el encargado de almacenar este valor. En el ejemplo se estableció TimeTable.

El campo Custom xcodebuild arguments se utiliza para agregar elementos personalizados a la ejecución. En este caso, es obligatorio escribir test para ejecutar las pruebas del proyecto.

De manera adicional, el parámetro -destination se ha agregado para realizar las pruebas en un dispositivo específico. En el ejemplo se configuró para iPhone 6 quedando de la siguiente manera: -destination 'platform=iOS Simulator,name=iPhone 6,OS=9.0'.

Las configuraciones descritas en esta sección son mostradas en la siguiente imagen.

Paso Seis – Configurar el Plugin JUnit.

El plugin JUnit es el encargado de mostrar los resultados de las pruebas realizadas en el proyecto. El plugin XCode genera un fichero xml dentro de la carpeta test-reports ubicada en la raiz del proyecto.

Lo importante es indicarle al Plugin JUnit el lugar donde se encuentra este fichero para que lo interprete y no muestre los resultados en la web de Jenkins.

Primero se da clic en el botón Añadir una acción y se selecciona la opción Publicar los resultados de test JUnit. Después se llena el campo Ficheros XML con los informes de tests con la ubicación del fichero XML generado por el Plugin XCode.

La siguiente imagen muestra la configuración del Plugin JUnit.

Hasta este punto ha quedado configurada la tarea. Para registrar los cambios se da clic en el botón Guardar al final de la pantalla.

Pongamos en marcha la tarea!!! Todo ha quedado listo para ver el resultado de la configuración.

Paso Siete – Ejecutar tarea en Jenkins.

Para comenzar su ejecución se da clic en el botón Construir ahora. La ejecución puede terminar de manera exitosa o no dependiendo de las pruebas realizadas en el proyecto.

Si se utiliza el código fuente propuesto por el artículo para la ejecución se obtendrá un resultado exitoso. Durante el proceso el nodo va a iniciar automáticamente el emulador de XCode para realizar las pruebas. El emulador mostrará la siguiente pantalla.

También puede ser consultada la consola de salida para esta tarea y revisar los resultados. A continuación mostraremos algunos fragmentos mostrados en la consola.

Paso Ocho – Mostrar los reportes de la tarea.

Revisar el estado de las pruebas es importante. Se da clic en la tarea creada y se mostrará un gráfico de tendencias de resultados.

Para obtener una vista detallada de los resultados se selecciona Últimos resultados de tests.

Mostrar resultados utilizando el plugin Test Result Analyzer

Dar clic en la tarea y seleccionar el enlace Test Result Analyzer.

Seleccionar Get Build Reports y se mostrará una tabla con los resultados de las pruebas.

Si se desea mostrar los resultados en gráficos se selecciona Generate Charts y se mostrarán reportes similares a la siguiente imagen.

Reflexiones finales

Automatizar las pruebas para proyectos en iOS 9 es posible. Delegar la ejecución de casos de pruebas a máquinas de mayor rendimiento simplifica el proceso de desarrollo software. Jenkins permite configurar nuestro entorno de trabajo para obtener estas metas, solo nos queda hacerlo.

Revisiones significativas

Publicado el 29/10/2015 - Actualizado el 26/12/2016