GitLab CI
GitLab embarque son propre service d'intégration continue et de déploiement continu, sous l'appellation GitLab Continuous Integration (CI) & Continuous Delivery (CD). L'outil proposé est complètement intégré à l'environnement GitLab, il est similaire aux solutions de type Jenkins ou Travis.
Informations
Comme d'habitude avec GitLab, la documentation officielle est claire, illustrée et toujours à jour :
Contexte Forge INRAE
La partie CI/CD de GitLab fonctionne avec des runners, c'est à dire une ou plusieurs machines qui exécutent les instructions que vous souhaitez dans le cadre de l'intégration / déploiement continu.
L'ajout de Specific Runners est très simple (voir la documentation).
Shared Runners
Afin de simplifier l'utilisation de GitLab CI/CD pour tous, l'équipe d'administration de Forge INRAE met à disposition des Shared Runners. Ces runners sont partagés, utilisables par tous, pour l'ensemble des projets de Forge INRAE.
Si aucun Specific Runners n'est configuré au niveau de votre projet / groupe, vous utiliserez par défaut les Shared Runners disponibles.
Condition d'utilisation des Shared Runners
Il est demandé à l'ensemble des utilisateurs de surveiller le temps d'exécution des jobs, afin de ne pas monopoliser les ressources disponibles : les Shared Runners sont partagés (temps CPU, utilisation disque, RAM…), il est donc nécessaire d'être vigilant pour que chacun puisse les utiliser dans de bonnes conditions.
Fonctionnement
Afin d'être le plus flexible possible, et pour pouvoir s'adapter à de multiples contexte, nous avons choisi Docker comme executor des Shared Runners. C'est également le cas pour les runners disponibles dans l'offre gitlab.com, de nombreuses documentations et explications sont donc disponibles pour la configuration, le choix et l'utilisation des images…
Réseau
Les Shared Runners sont dans une zone de sécurité privée, sans filtrage en sortie. Si vous souhaitez connaître leurs IPs, vous pouvez nous contacter par mail. Cependant, pour des raisons de sécurité, il n'est pas recommandé d'utiliser nos runners partagés pour déployer sur d'autres infrastructures. Préférez installer votre propre runner directement sur votre infrastructure.
Exemple
Voici un exemple très simple de mise en place et d'utilisation de GitLab CI/CD via les Shared Runners disponibles : https://forgemia.inra.fr/adminforgemia/demo-ci
Cas d'utilisation
Pour notre exemple, nous prenons un cas d'utilisation simple : nous voulons pousser des fichiers vers un serveur web. Dans notre dépôt Git : nous avons un répertoire PUSH-data
qui contient l'ensemble des fichiers (PHP, HTML…) et répertoires à transférer vers notre serveur web. Nous utiliserons Alpine Linux, SSH (authentification par paire de clefs) et rsync pour le transfert des données.
Authentification SSH
Générer une nouvelle paire de clefs qui va être utilisée spécifiquement pour les jobs d'intégration et de déploiement.
Settings > CI/CD > Variables > Expand
Nous avons créé une variable SSH_PRV_KEY avec le statut Protected. Elle contient la clef privée et sera utilisable dans le script d'intégration continue.
Activer CI/CD
Il suffit d'ajouter le fichier de configuration .gitlab-ci.yml
à la racine du dépôt pour activer l'intégration continue dans la projet. Via l'interface web, au niveau de la page d'accueil du projet, on peut utiliser le bouton Set up CI/CD
qui va créer le fichier .gitlab-ci.yml
et permettre l'édition en ligne.
Pour notre exemple :
image: alpine
variables:
USER: "login"
HOST: "exemple.inra.fr"
DIR: "PUSH-data"
push:
before_script:
- apk add --no-cache openssh-client rsync
- mkdir -p ~/.ssh
- touch ~/.ssh/id_rsa
- echo "$SSH_PRV_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
- eval $(ssh-agent -s)
- ssh-add
script:
- rsync -avz $DIR $USER@$HOST:/var/www/html
Exécution et suivi des jobs
Par défaut les jobs d'intégration continue sont automatiquement exécutés à chaque git push
. Les exécutions et retours terminal sont visibles dans la partie CI/CD de votre projet de la barre latérale gauche.