Amarengo

Articles and news

Configurar Jenkins Para Android: Cómo enfrenté los desafíos que enfrenté

En este artículo, documentaré mi viaje para lograr un sistema de integración continua que funcione completamente utilizando Jenkins. Esta configuración se adapta a mi entorno de trabajo, que tiene varios proyectos que utilizan los mismos 4 módulos para la lógica empresarial.

En primer lugar, descargué Jenkins del sitio web oficial. Luego abrí la terminal y ejecuté el siguiente comando:

java -jar jenkins.war --httpPort=9091

He especificado un puerto diferente al 8080 habitual para hacerlo único y evitar errores, en caso de que otro servicio esté usando Jenkins.

Después de completar todos los pasos de configuración, es importante asegurarse de que los siguientes complementos estén instalados:

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

Estos complementos garantizarán que Jenkins tenga las herramientas suficientes para crear un proyecto de Android.

El siguiente paso es configurar los siguientes ajustes en Jenkins:

  1. Configuración de JDK para Jenkins

Descubrí que la sección JDK se veía de la siguiente manera después de hacer clic en Administrar Jenkins- > Configuración global de herramientas:

Configuración básica de JDK

Luego hice clic en Agregar JDK y luego rellené el siguiente formulario:

Agregar vista de instalación de JDK

Escribí un nombre que representa la versión seleccionada y elegí la versión de Install from java.sun.com (Nota: Jenkins le preguntará sobre la información de su cuenta de Oracle para instalar el JDK).

En la misma página de Configuración de Herramientas Globales, encontré la configuración del complemento de Gradle en la que agregué una instalación de Gradle que tiene la misma versión que el Gradle utilizado en mis proyectos. Para evitar más confusiones, corro proyectos con Gradle wrapper, que analizaré con más profundidad en la próxima sección.

Gradle vista de la instalación

también me aseguro de que el nombre representa a la versión seleccionada para evitar la confusión.

Normalmente, Gradle buscará en el local.archivo de propiedades en el proyecto para recuperar la ubicación del SDK de Android. Pero al usar Jenkins, descubrí que esto podría no ser siempre el caso, especialmente cuando se usa el envoltorio de Gradle.

Para evitar errores de compilación, agregué ANDROID_HOME en las variables de entorno Jenkins. Esto se logra a través de Administrar Jenkins – > Configurar sistema y luego marcar la casilla variables de entorno aquí:

Sección de propiedades globales

y agregar una variable con el nombre ANDROID_HOME y rellenar el valor con la ruta al SDK.

Añadir la Variable de Entorno

Después de la consecución de todos estos pasos, empecé a crear un nuevo elemento en Jenkins. La mayoría de mis proyectos se basan en 4 módulos principales de Android que se incluyen en el repositorio Git como submódulos de Git.

Configurar un nuevo elemento es bastante fácil si no tienes submódulos:

Página de nuevo elemento

Simplemente ingrese el nombre y seleccione Proyecto de estilo libre y presione Aceptar.

A continuación, vaya a Administración de código fuente. Normalmente uso Git y configuro el repositorio:

Sección de administración de fuentes

Inserte la URL del repositorio y agregue credenciales si aún no lo ha hecho. Ahora el truco aquí es asegurarse de que si está utilizando un enlace HTTPS para el repositorio, entonces necesita agregar credenciales de tipo de nombre de usuario y contraseña, de lo contrario, si usa SSH, agregue las credenciales de tipo SSH.

Si tiene submódulos en el repositorio de git, la forma más fácil de lidiar con esto es a través de comportamientos adicionales – > Agregar->Comportamientos avanzados de submódulos y hacer lo siguiente:

  1. Marque actualizar submódulos recursivamente
  2. En la ruta del repositorio de referencia que se utilizará durante la actualización de submódulos, agregue el nombre de la carpeta de submódulos que se utiliza en el repositorio principal.
  3. En mi caso, tanto el módulo principal como los submódulos pueden usar las mismas credenciales, así que comprobé Usar credenciales del repositorio remoto predeterminado del repositorio principal.

Advanced sub-módulos de comportamientos

Añadir tantos como el número de submódulos incluido y también asegurarse de que si el padre de repos dirección url HTTPS, entonces los submódulos de enlace en el interior .gitmodules también debe usar HTTPS. Lo mismo se aplica a SSH.

Para compilar correctamente el proyecto, Jenkins necesita invocar el script de Gradle. La forma más eficiente es decirle a Jenkins que ejecute el envoltorio Gradle del proyecto y defina las tareas (limpiar, Ensamblar, etc.)…)

Agregar menú Paso de compilación

Invocar la sección de script de Gradle

Para evitar el error de denegación de permisos, se selecciona Make Gradlew executable y se especifican las tareas.

Jenkins incluye una amplia variedad de acciones que se deben tomar cuando se complete la compilación.

La forma más sencilla de publicar automáticamente el proyecto en play store utilizando los complementos de publicación de Android play Store se puede encontrar aquí.

Algunas observaciones sobre la publicación en la tienda

Al enviar un nuevo APK a la tienda, el código de versión debe incrementarse. Para automatizar esto, hice este fragmento de código como referencia.

además, cuando la adición de theRecent parte de los Cambios en Jenkins, asegúrese de que usted seleccione el mismo idioma que el idioma se encuentra en la descripción de la lista de la tienda:

La sección final es cómo accionar genera automáticamente. Para mi proyecto, el control de versiones de mi elección es bitbucket. Para configurarlo, seguí este wiki. Sin embargo, hay un problema, para que los webhooks funcionen, debe tener Jenkins en una configuración de servidor web. Al principio, no lo hice para que el gancho web no funcionara. Superé esto activando otras compilaciones después de que un determinado proyecto se construyera con éxito. Esto resolvió mi problema, ya que principalmente desarrollo los 4 submódulos principales en un proyecto ficticio y luego los tiro en todos los demás proyectos.

Esto se puede hacer en la Sección Disparadores de compilación justo encima de Compilación:

Sección de disparadores de compilación

Mis pasos futuros serán aprovechar Jenkins y las pruebas automatizadas, tanto a través de las pruebas JUnit como de las pruebas de instrumentación de Android.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.