Amarengo

Articles and news

Configuration de Jenkins Pour Android: Comment j’ai géré les défis auxquels j’ai fait face

Dans cet article, je vais documenter mon parcours pour parvenir à un système d’intégration continue pleinement fonctionnel à l’aide de Jenkins. Cette configuration convient à mon environnement de travail qui a plusieurs projets utilisant les mêmes 4 modules pour la logique métier.

Tout d’abord, j’ai téléchargé Jenkins sur le site officiel. Ensuite, j’ai ouvert le terminal et exécuté la commande suivante:

java -jar jenkins.war --httpPort=9091

J’ai spécifié un port différent du 8080 habituel pour le rendre unique et éviter toute erreur, au cas où un autre service utiliserait Jenkins.

Après avoir terminé toutes les étapes de configuration, il est important de s’assurer que les plugins suivants sont installés:

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

Ces plugins garantiront que Jenkins dispose des outils suffisants pour construire un projet Android.

L’étape suivante consiste à configurer les paramètres suivants dans Jenkins:

  1. Configuration de JDK pour Jenkins

J’ai découvert que la section JDK se présentait comme suit après avoir cliqué sur Gérer Jenkins – > Configuration globale de l’outil:

Configuration JDK de base

J’ai ensuite cliqué sur Ajouter JDK puis rempli le formulaire suivant:

Ajouter une vue d’installation JDK

J’ai tapé un nom qui représente la version sélectionnée et j’ai choisi la version de l’installation à partir de java.sun.com (Remarque: Jenkins posera des questions sur les informations de votre compte Oracle afin d’installer le JDK).

Sur la même page de configuration globale de l’outil, j’ai ensuite trouvé les paramètres du plugin Gradle dans lesquels j’ai ajouté une installation Gradle qui a la même version que la Gradle utilisée dans mes projets. Pour éviter toute confusion supplémentaire, j’exécute des projets avec Gradle wrapper dont je discuterai plus en profondeur dans la section à venir.

Vue d’installation Gradle

Je me suis également assuré que le nom représente la version sélectionnée pour éviter toute confusion.

Normalement, Gradle recherchera le local.fichier de propriétés dans le projet pour récupérer l’emplacement du SDK Android. Mais en utilisant Jenkins, j’ai découvert que cela n’était peut-être pas toujours le cas, en particulier lors de l’utilisation du wrapper Gradle.

Pour éviter les erreurs de génération, j’ai ajouté ANDROID_HOME dans les variables d’environnement Jenkins. Ceci est réalisé via Manage Jenkins -> Configure System, puis en cochant la case variables d’environnement ici:

Section des propriétés globales

et ajouter une variable avec le nom ANDROID_HOME et remplir la valeur avec le chemin d’accès au SDK.

Ajouter la variable d’environnement

Après avoir accompli toutes ces étapes, j’ai commencé à créer un nouvel élément dans Jenkins. La plupart de mes projets reposent sur 4 modules Android principaux qui sont inclus dans le référentiel Git en tant que sous-modules Git.

La configuration d’un nouvel élément est assez facile si vous n’avez pas de sous-modules:

Nouvelle page d’élément

Entrez simplement le nom, sélectionnez Projet Freestyle et cliquez sur OK.

Ensuite, allez dans Gestion du code source. J’utilise normalement Git et configure le dépôt:

Section de gestion des sources

Insérez l’URL du dépôt et ajoutez des informations d’identification si vous ne l’avez pas déjà fait. Maintenant, l’astuce ici consiste à vous assurer que si vous utilisez un lien HTTPS pour le dépôt, vous devez ajouter des informations d’identification de type nom d’utilisateur et mot de passe, sinon si vous utilisez SSH, ajoutez les informations d’identification de type SSH.

Si vous avez des sous-modules dans le dépôt git, le moyen le plus simple de gérer cela consiste à utiliser des comportements supplémentaires – > Add-> Comportements de sous-modules avancés et à effectuer les opérations suivantes:

  1. Vérifiez récursivement mettre à jour les sous-modules
  2. Dans le chemin du dépôt de référence à utiliser lors de la mise à jour du sous-module, ajoutez le nom du dossier du sous-module utilisé dans le dépôt parent.
  3. Dans mon cas, le parent et les sous-modules peuvent utiliser les mêmes informations d’identification, j’ai donc vérifié Utiliser les informations d’identification de la télécommande par défaut du référentiel parent.

Comportements avancés des sous-modules

Ajoutez autant de ceux-ci que le nombre de sous-modules inclus et assurez-vous également que si l’URL du dépôt parent est HTTPS, les sous-modules se lient à l’intérieur.gitmodules doit également utiliser HTTPS. Il en va de même pour SSH.

Pour réussir à construire le projet, Jenkins doit appeler le script Gradle. Le moyen le plus efficace est de dire à Jenkins d’exécuter le wrapper Gradle du projet et de définir les tâches (clean, assembleDebug, etc…)

Ajouter un menu d’étape de construction

Appelez la section de script Gradle

Afin d’éviter une erreur de refus d’autorisation, Make Gradlew executable est coché et les tâches sont spécifiées.

Jenkins comprend une grande variété d’actions à prendre lorsque la construction est terminée.

La façon la plus simple de publier automatiquement le projet sur le play store à l’aide des plugins de publication Android play Store se trouve ici.

Quelques remarques sur la publication dans le magasin

Lors de la soumission d’un nouvel APK dans le magasin, le code de version doit être incrémenté. Pour automatiser cela, j’ai créé cet extrait pour référence.

De plus, lors de l’ajout de la partie Modifications récentes dans Jenkins, assurez-vous de sélectionner la même langue que celle trouvée dans la description de la liste de magasins:

La dernière section est de savoir comment déclencher automatiquement les builds. Pour mon projet, le contrôle de version de mon choix est bitbucket. Afin de le configurer, j’ai suivi ce wiki. Cependant, il y a un problème, pour que les webhooks fonctionnent, vous devez avoir Jenkins sur un paramètre de serveur Web. Au départ, je ne l’ai pas fait, donc le webhook n’a pas fonctionné. J’ai surmonté cela en déclenchant d’autres builds après la construction réussie d’un certain projet. Cela a résolu mon problème car je développe principalement les 4 sous-modules principaux dans un projet factice puis les tire dans tous les autres projets.

Cela peut être fait dans la section Déclencheurs de construction juste au-dessus de la construction:

Section des déclencheurs de construction

Mes prochaines étapes consisteront à tirer parti de Jenkins et des tests automatisés, à la fois via des tests JUnit et des tests d’instrumentation Android.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.