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.
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 ;)