Drone CI est une plateforme d'intégration continue, comme Travis CI, Jenkins CI ou encore Gitlab CI. Cela permet d'exécuter des tests lorsque des commits sont poussés sur un projet sur Gzitea. Cet outil à l'avantage d'être léger et très puissant.
La VM est herbergée sur l'hyperviseur odin
. Elle a pour adresse IP 10.128.0.64
et est accessible via drone.adm.auro.re
.
Le service est lui accessible sur https://drone.auro.re/. La connexion s'effectue directement en se connectant à Gitea par OAuth.
Une personne se connectant au service sera invitée à autoriser Drone à lire l'intégralité de ses projets, y compris les projets privés (en adaptant la visibilité des tâches), puis à indiquer quels sont les projets à lier avec Drone.
Documentation utile : https://docs.drone.io/.
Le service Drone tourne sur la VM drone.adm.auro.re
.
La BDD Postgres de Drone est hebergée sur bdd.adm.auro.re
.
La BDD se nomme drone
et est gérée par l'utilisateur drone
.
Elle est rendue accessible en réseau vers la VM drone
.
La VM dispose de 32 Go de stockage, dont 25 Go dédiés au dossier /var
. Un tel stockage est nécessaire car l'intégration continue peut générer et construire des images pouvant peser quelques gigaoctets.
Un reverse proxy du service est effectué par nginx sur proxy-local.adm.auro.re
.
Le service écoute sur le port 8000.
Une copie locale des recettes dockers est accessible dans : /var/local/ansible-docker/drone-docker
.
L'installation n'est toutefois pas encore présente dans les recettes Ansible.
Elle est aussi accessible en ligne sur Gitea : https://gitea.auro.re/aurore/docker-drone.
git
L'utilisateur git
doit avoir l'uid
1000 et le gid 1000
. À Aurore il s'agit de l'utilisateur aurore
dans le LDAP. On va donc devoir créer un utilisateur avec un autre uid
. On choisit logiquement 1001.
$ sudo useradd -u 1001 git
La commande useradd
créer automatiquement un utilisateur avec même gid
que son uid
. On peut vérifier :
$ id 1001
uid=1001(git) gid=1001(git) groupes=1001(git)
La configuration de Drone se fait par des variables d'environnement, comme tout service Docker. Un fichier env.example
est présent dans le dépôt Gitea indiquant les variables à ajouter.
Hormis la connexion à la base de données, il est nécessaire de créer une application sur Gitea et de récupérer les identifiants OAuth de l'application. Pour ajouter une application, il suffit de se rendre sur https://gitea.auro.re/user/settings/applications, et renseigner les variables DRONE_GITEA_CLIENT_ID
et DRONE_GITEA_CLIENT_SECRET
. L'URL de retour doit être https://drone.auro.re/login.
Une fois ceci fait, en se rendant sur https://drone.auro.re, on est redirigé vers une page de Gitea pour demander si on souhaite autoriser Drone à avoir un droit en lecture sur nos projets, y compris les projets privés.
Drone tout seul fonctionne très simplement : il reçoit l'information via un webhook transmis par Gitea qu'il doit faire quelque chose, et il cherche ensuite un exécuteur disponible pour effectuer la tâche nécessaire.
Un exécuteur prend la forme d'un agent qui crée un conteneur Docker dans lequel il va exécuter les instructions demandées par le projet. L'utilisation d'un conteneur Docker favorise l'indépendance des données. Drone propose aussi de pouvoir exécuter directement les tâches sur un serveur en dur, ce que nous ne ferons pas pour des raisons de sécurité.
L'instance Drone est accompagnée de 5 exécuteurs Docker. Ils prennent la forme de conteneurs basés sur l'image drone/drone-runner-docker
, montant le volume /var/run/docker.sock
afin d'avoir l'autorisation de créer des nouveaux conteneurs. La configuration se trouve dans le même fichier docker-compose.yml
, se référer au dépôt Gitea.
Pour mettre à jour gitea on change le numéro de version dans le docker-compose.yml
:
image: drone/drone:1.9.2
On remplace 1.9.2
(le numéro de version au moment de l'installation, mais qui pourrait être autre chose au moment de la lecture de cette page) par le nouveau numéro de version que l'on peut trouver sur Docker Hub.
On procède de la même façon pour les exécuteurs.
Puis on relance docker :
$ sudo docker-compose up -d