RSS link icon

Installer un runner android pour Gitlab-CI

Publication : le 22 mai 2017 - Dernière modification : le 22 mai 2017

Ayant eu du mal à trouver comment faire tourner un runner pour Android dans Gitlab-CI, voici un récapitulatif de la chose.

Prérequis

  • une instance Gitlab: soit depuis l'instance officielle soit depuis votre propre instance;
  • un accès master sur votre projet Gitlab et/ou un accès administrateur;
  • un pc/serveur sous GNU/Linux avec les accès root qui fera tourner les runners. Nous utiliserons Ubuntu 16.04. Il possible d'utiliser des Windows ou des MacOS. Je préfère sous 'nux.
  • Docker installé sur le pc sous GNU/Linux;
  • ainsi que Git.

Installer gitlab-runner

Note : si vous préférez lire la documentation officielle : Install GitLab Runner using the official GitLab repositories ou Manual installation and configuration on GNU/Linux.

Connectez-vous à votre pc sous GNU/Linux.

Assurez-vous d'avoir les accès root sur votre pc puis ajoutez le repository officiel de Gitlab :

$ curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

Ensuite, installez gitlab-ci-multi-runner :

$ sudo apt-get update
$ sudo apt-get install gitlab-ci-multi-runner

gitlab-ci-multi-runner et gitlab-runner sont maintenant installés.

Inscrire le runner Android

Avant d'inscrire/enregistrer le runner, il faut récupérer quelques informations.

Shared Runner et Specific Runner

Il existe deux types de runners:

  • Les Shared Runners sont utilisables par tous les projets de l'instance Gitlab.
  • Les Specific Runners sont utilisables que pour un ou plusieurs projets spécifiés.

La différence entre les deux est assez facile à comprendre car leurs noms sont explicites.

Les tokens

Maintenant, il faut récupérer le token à donner plus tard au runner.

Info : Je n'ai pas vérifié mais je pense que les runners utilisent un système d'authentification OAuth. Pour plus d'informations sur les tokens, je vous invite à jeter un oeil sur la page Wikipédia d'OAuth.

Specific token

Chaque projet dans Gitlab possède un token propre. Ce dernier est à utiliser pour les Specific Runner. Pour le visualiser, depuis l'interface de Gitlab, ouvrez votre projet puis aller dans Settings -> CI/CD Pipelines.

Info : Pour voir l'onglet Settings, vous devez avoir un accès master ou administrateur sur le projet Gitlab.

Une sous-section "Specific Runners" contenant un URL et un token est affichée. Conservez ces deux informations.

IMG: Specific Runners section

Shared token

L'instance Gitlab possède un token général. Ce dernier est à utiliser pour les Shared Runner. Pour le visualiser, allez dans la section administrateur Admin Area représentée par une petite clé plate en haut à droite de l'interface de Gitlab.

Info : Pour voir l'icône Admin Area, vous devez avoir un accès administrateur sur l'instance Gitlab.

Ensuite, allez dans Overview -> Runners. Vous trouverez alors un token dans le premier paragraphe de cette section. Notez le bien pour la suite.

Inscription du runner

Afin d'inscrire/enregistrer le runner auprès de l'instance Gitlab, exécutez cette commande :

$ sudo gitlab-ci-multi-runner register

On nous demande alors plusieurs informations :

  • L'URL de l'instance Gitlab-CI. Fournissez celle récupérée précédemment. "https://gitlab.moninstance.com/ci" dans l'exemple.
  • Un token. Donnez soit le Specific Token si vous voulez un Specific Runner, soit le Shared Token pour un Shared Runner.
  • La "description" du runner. C'est ce qui servira de nom.
  • Un ou plusieurs tags. Je les utilise afin de spécifier le type de runner qui tourne. Par exemple android-T25-B25.0.3 pour un runner Android buildant pour Android 25 avec un builder en version 25.0.3.
  • Si un tag a été saisi, on vous demande si le runner peut être utilisé pour des pipelines ne spécifiant aucun des tags saisies. Par défaut, non. Je laisse ainsi généralement.
  • Si le runner doit être utilisé que par le projet ayant le token spécifié ou pas. Par défaut, non. Idem, je laisse tel quel.
  • L’exécuteur à utiliser. Dans notre cas, Docker. Évitez shell, c'est une source de faille dans votre système. (bien que pour les runners iOS on n'ait pas le choix. Apple...)
  • Si Docker a été sélectionné, on nous demande l'image. Dans notre cas, mettons : registry.gitlab.com/showcheap/android-ci:T25-B25.0.3.

Ce qui donne :

$ sudo gitlab-ci-multi-runner register
Running in system-mode.                            

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
https://gitlab.moninstance.com/ci
Please enter the gitlab-ci token for this runner:
U7fj-dsf_fGGpmMLKHJ
Please enter the gitlab-ci description for this runner:
runner-android25
Please enter the gitlab-ci tags for this runner (comma separated):
android-T25-B25.0.3
Registering runner... succeeded                     runner=8tB1zBiU
Please enter the executor: virtualbox, ssh, shell, parallels, docker, docker-ssh:
docker
Please enter the default Docker image (eg. ruby:2.1):
registry.gitlab.com/showcheap/android-ci:T25-B25.0.3
Runner registered successfully. Feel free to start it, but if it's running 
already the config should be automatically reloaded!

Le runner est inscrit auprès de votre instance Gitlab !

Exemple de pipeline

Voici un exemple de pipeline utilisant le runner :

image: registry.gitlab.com/showcheap/android-ci:T25-B25.0.3

before_script:
    - export GRADLE_USER_HOME=`pwd`/.gradle
    - chmod +x ./gradlew

cache:
  key: "$CI_COMMIT_REF_NAME"
  paths:
     - .gradle/

stages:
  - build

build:
  stage: build
  script:
     - ./gradlew assemble

Note : Ne me demandez pas pourquoi il faut re-spécifier l'image Docker dans le pipeline. Si quelqu'un a l'information, partagez-la moi. Je mettrais ainsi votre explication accompagnée de votre pseudo ;)

Sources