Appuyez sur Entrée pour voir vos résultats ou Echap pour annuler.

GitLab DevOps et déploiement en continu par FTP – Partie 3

À la fin de la deuxième partie de cette série sur le déploiement en continu par FTP via les pipelines de GitLab, nous avions un script développé en JavaScript qui dresse une liste d’opérations FTP à exécuter pour déployer des fichiers sur un serveur distant. L’objectif étant que ce script s’exécute au push dans le dépôt GitLab. Aujourd’hui, on va donc créer un pipeline dans GitLab qui va exécuter notre script.

Projet démo

Nous avons donc un projet qui ne contient que des fichiers qui se déploient à la pièce, comme pourraient l’être des applications en PHP. La racine du projet web se trouve dans  www et le code du script dans  deployer, comme convenu dans la première partie de cette série.

Qu’est-ce qu’un pipeline GitLab?

GitLab, comme GitHub depuis l’acquisition par Microsoft, offre des « crochets » (hooks) pour exécuter des scripts sur des événements du dépôt. Par exemple, nous pouvons définir un script qui s’exécutera sur le dépôt lorsqu’un push est fait sur la branche master.

Pour activer un pipeline, il suffit d’archiver un fichier yaml bien spécifique. Lorsqu’un événement survient sur votre dépôt (ex. : un push), les agents d’exécution de GitLab vont scanner votre dépôt pour le fichier yaml et exécuter les opérations qui y sont définies.

Création du fichier yaml

À la racine de votre projet, créer un fichier nommé .gitlab-ci.yml

Puisque GitLab va exécuter du code, il va devoir créer une instance de machine virtuelle. Notre première instruction à dire à GitLab est donc l’image Docker qui sera utilisée la VM. Pour ce faire, GitLab va fouiller dans le registre d’images publiques sur le Docker Hub.

Pour notre exemple, on cherche simplement une image avec NodeJS pour pouvoir exécuter notre script :

Ensuite, nous devons définir des étapes d’exécution pour le pipeline. On a donc 1 étape et trois parties à configurer :

  1. La pré-exécution qui nous permet de préparer les dépendances du script.
  2. Limitation de la branche cible qui nous permet de sélectionner la branche qui sera déployée
  3. Exécution du script

L’étape ici est nommée  deploy. Ce qui est intéressant de savoir, c’est que l’instance qui exécutera le code va créer un répertoire de travail dans la VM. Dans ce répertoire, GitLab va extraire le commit qui vient d’être poussé et se positionner à la racine de votre projet.

La section before_script, comme son nom l’indique, sert à préparer le terrain avant le déploiement. Ici, on se positionne dans le dossier du deployer et on récupère les dépendances du projet.

La section  only ne permet d’exécuter ce pipeline que sur la branche master. Tous les autres push sur les autres branches ne lanceront pas le déploiement.

Puis, on exécute le script!

Et… ensuite?

À partir d’ici, on a ce qu’on pourrait appeler un « prototype ». On pourrait être tenté d’utiliser du code comme ceci directement en production, mais nous avons plusieurs problèmes avec notre solution actuelle :

  1. Il n’y a que très peu de tests unitaires
  2. Il n’y a aucune journalisation des étapes du déploiement
  3. C’est en JS, pas en TS
  4. L’architecture organique n’est pas réfléchie
  5. Le code du module de déploiement doit être directement dans le dépôt de l’application

Pour la partie 4, c’est ce qu’on va régler. Ça nous permettra de voir les efforts nécessaires pour convertir un prototype en code de production. On va voir aussi comment éviter de tomber dans les pièges les plus communs d’une réécriture, comme la suringénierie, qui nous permettra de revoir les concepts derrière les principes YAGNI et KISS (keep it simple, stupid).

Conclusion

Aujourd’hui, vous avez appris à créer un pipeline simple dans GitLab pour exécuter du code personnalisé sur vos différents dépôt. Il existe d’autres genre de pipelines qu’on pourrait vouloir exécuter sur nos dépôts, tout dépendant du type d’application qui s’y trouve. Par exemple, exécuter un linter ou un build pour valider l’intégrité du code.

Si vous avez des commentaires ou des suggestions d’articles, n’hésitez pas à m’écrire 🙂 Merci de partager dans vos réseaux respectifs!

Suivez-nous par courriel!

Saisissez votre adresse courriel pour vous abonner au blog d'Ezo et recevoir une notification de chaque nouvel article par email.