Actualité

Comment déployer votre code plus rapidement avec Gitlab CI !

Vous voulez gagner en vélocité en intégrant une touche de DevOps dans vos pratiques et déployer vos projets en 1 clic ? Nous vous expliquons comment faire avec Gitlab CI.

October 01, 2021 ● 12mn ● #devops#productivite#qualite#vélocité
Améliorer votre vitesse de déploiement avec Gitlab CI !
Retourner sur la liste

Vous avez l'impression de devoir attendre des jours ou des semaines avant que la moindre modification de code ne soit livrée en production ?

Le Time to market est une notion important pour votre business et vous souhaitez améliorer vos pratiques ?

Introduction

Sans procédure automatisée, le temps de réalisation d'un développement depuis le poste de vos développeurs jusqu'à la livraison sur le serveur de production peut être long, voire même très long parfois !

Pourtant, il existe des outils pour automatiser votre chaîne de production.

Ils vous feront économiser un temps précieux tout en améliorant la qualité de vos livrables.

Cette sécurité vous permettra également de faire intervenir plus facilement des profils juniors ou des freelances sans qu'ils aient besoin de connaitre l'intégralité de votre projet.

Vous voulez gagner en vélocité en intégrant une touche de DevOps dans vos pratiques et déployer vos projets en 1 clic ?

Nous vous expliquons comment faire avec Gitlab CI.

Gitlab

Un peu de contexte pour commencer

Lors du développement d'une nouvelle fonctionnalité ou d'une modification d'un code existant, il y a énormément de paramètres à prendre en compte pour réaliser un code de qualité qui s'intègrera parfaitement dans votre projet.

Il faut comprendre les aspects techniques mais également le fonctionnel du projet pour nous assurer que notre modification ne va pas avoir d'impacts sur une autre partie du programme.

Une fois le code idéal mis au point sur le poste du développeur, il faut encore que ce code soit déployé correctement sur le serveur de recette puis en production.

Et puisqu'un développeur ne travaillent pas souvent seul, il faut gérer les impacts des modifications de l'ensemble de l'équipe.

Quelle gymnastique si l'on fait tout cela à la main !

De plus, il est difficile d'intégrer de nouvelle personne à l'équipe car le temps d'intégration est extrêmement long.

Comment faire mieux ?

Avant de vous expliquer le fonctionnement de Gitlab CI/CD qui jouera le rôle de chef d'orchestre, il est nécessaire de commencer par les différents outils et concepts qui gravitent autour de l'intégration continue.

Cycle DevOps

Comment valider une modification de code ?

Comme nous l'avons expliqué, une modification de code même de quelques lignes peut avoir des impacts sur d'autres parties de votre programme.

Afin d'isoler chaque modification et permettre une relecture simple, nous vous conseillons d'utiliser le système de branche de GIT associé au Merge Request de Gitlab.

Merge request gitlab

La Merge request que l'on peut traduire par Demande de modification de code, permet à un autre développeur de relire la modification et de faire des commentaires en cas de problème.

Plusieurs personnes peuvent collaborer facilement pour aboutir à un code de qualité qui sera accepté dans le programme.

Comment vérifier la qualité d'un code ?

Plusieurs concepts se cachent derrière le mot qualité : est-ce que la syntaxe est correcte ? est-ce que le code fait réellement ce que l'on souhaite ? est-ce que les performances sont correctes ?

Pour cela il existe plusieurs outils, que nous avons d'ailleurs détaillé dans notre offre Améliorer la qualité de vos projets web.

  • build de vos sources
  • analyse statique de code
  • tests unitaires
  • tests fonctionnels
  • tests d'interface
  • ...

Gitlab CI vous permettra d'automatiser le lancement de vos tests à chaque modification de code ce qui vous apporte un réel filet de sécurité au quotidien.

Mais il faudra bien sûr commencer par écrire ces tests avant de passer à la suite.

Comment automatiser ses déploiements ?

Gitlab CI utilise le concept de pipeline qui vous permettra de paramétrer une suite d'étape à suivre à chaque modification de votre code.

En fonction de plusieurs paramètres, vous pourrez choisir de ne lancer que quelques tests ou bien d'automatiser complètement le déploiement sans intervention humaine supplémentaire.

C'est ce que l'on appelle le déploiement continu ou livraison continue et qui est l'objectif de la démarche DevOps.

Le fait de passer par des scripts automatisés va vous assurer une qualité uniforme à chaque livraison ce qui vous fera gagner un temps précieux et vous permettra de déployer plusieurs fois ou plusieurs dizaines de fois par jours !

Qu'est-ce que Gitlab CI ?

GitLab Continuous Integration (CI) est une brique de l'outil Gitlab qui permet d'automatiser l'execution de job à l'intérieur de Pipeline.

Gitlab CI est un outil DevOps ultra puissant et pourtant assez simple à mettre en place.

Shcéma Gitlab CI/CD

Comme vous pouvez le voir sur le schéma précédent, GitlabCI va vous permettre d'automatiser un maximum d'étape afin de minimiser les tâches manuelles de vos développeurs.

Le tout avec des outils visuels qui vous permettront de suivre chaque étape du process.

Pourquoi utiliser Gitlab CI ?

Il existe d'autres solutions sur le marché mais Gitlab reste pour nous la solution incontournable et je pense que la suite de cet article va vous convaincre également.

La solution complète pour gérer vos projets techniques

Gitlab vous fourni une solution complète pour gérer vos projets depuis l'idée et jusqu'à la gestion du support de vos utilisateurs.

Gitlab de l'idée au déploiement

GitlabCI est naturellement intégrée de manière native dans l'ensemble du logiciel

Une solution Open source

Gitlab étant open source, vous êtes libre de l'installer sur vos serveurs et êtes ainsi libre de gérer vos données comme vous le souhaitez.

Comme pour la plupart d'entre nous, votre code représente une partie essentielle de votre business.

Gitlab vous offre la possibilité de l'héberger en France simplement.

Une version gratuite

Vous pouvez utiliser GitlabCI gratuitement ce qui vous permettra de le prendre en main tranquillement.

Il s'agit véritablement d'une version gratuite, pas seulement d'un essai de 14 jours !

Une solution multi plateformes

Grâce à la puissante de Docker, vous pouvez quasiment tout exécuter sur GitlabCI.

Pas de fichier de paramétrage xml obscures comme sur d'autres plateformes du marché, vous pouvez travailler dans votre environnement et avec votre langage préféré.

Comment fonctionne Gitlab Ci ?

Gitlab CI vous permet d'exécuter des séries de commandes de manière totalement automatique pour répondre à des événements.

Ces scripts automatiques sont gérés par des pipelines et Gitlab vous permet de visualiser simplement l'intégralité des pipelines de vos projets.

Liste de pipelines Gitlab CI Visualisation de la liste des pipelines d'un projet

Qu'est-ce qu'une pipeline Gitlab CI ?

Les pipelines sont les éléments de plus hauts niveaux de votre CI/CD.

La pipeline pilote l'ensemble des scripts à exécuter, elle les gère sous la forme d'un workflow et nous permet de définir un ordre d'exécution ainsi que des notions de dépendances.

Ces commandes sont définies dans des jobs qui sont exécutés à l'intérieur de pipeline où ils sont regroupés par stage.

Le déclenchement de ces pipelines est entièrement paramétrable et peut survenir lors d'un événement connu de Gitlab (le push d'un nouveau code ou l'acceptation d'une merge request) ou sur des événements indépendants grâce au webhook.

Voilà un exemple de pipeline tel que vous pourrez le voir dans le logiciel :

Détail d'une pipeline Gitlab CI

Important GitlabCi pilote mais n'exécute pas ces scripts. Les commandes sont lancées sur d'autres serveurs paramétrés en tant que Runner GitlabCI.

Même si cela permet a priori de faire quelques économies, nous vous conseillons de ne jamais monter le serveur hébergeant votre gitlab en tant que runner !

Comment paramétrer un runner Gitlab CI ?

Les runners sont utilisés pour exécuter les commandes présentes dans votre pipeline.

Un runner est un serveur sur lequel nous installons un package gitlab-runner qui lui permet de communiquer avec une instance Gitlab. -> Documentation d'installation de runner Gitlab

Il vous suffit ensuite de l'enregistrer dans à l'aide d'un token qui vous sera fourni dans le paramétrage de la CI de votre instance.

Paramétrage d'un gitalb runner

Comment activer l'intégration continue avec Gitlab ?

Pour mettre en place de l'intégration continue dans un projet hébergé sur Gitlab, il vous suffit d'ajouter à la racine de votre projet un fichier de paramétrage nommé .gitlab-ci.yml.

Un commit + push + merge request et vous verrez apparaître votre première pipeline !

Exemple de fichier gitlabci

Vous l'aurez compris, le défis à présent est de bien écrire votre fichier .gitlab-ci.yml.

Pour vous aider dans cette tâche, nous vous conseillons de mettre dans vos favoris l'url du Linter de GitlabCI qui vous permettra de valider la syntaxe du fichier avant de commiter vos modifications.

Comment définir les stages avec Gitlab CI ?

Les stages servent à regrouper vos jobs dans des groupes qui correspondent aux phases de votre pipeline.

Comme vous l'avez vue sur la représentation graphique de la pipeline, chaque stage prend la forme d'une colonne ce qui facilite la lecture.

La mise en place des stages se passe en deux temps.

Il vous faut d'abord déclarer des stages disponibles :

stages:
- build
- test
- deploy

Et ensuite ajouter chaque job dans son stage :

build-release:
    stage: build

Comment définir les jobs avec Gitlab CI ?

Les jobs vous permettent de définir une liste de commandes à lancer.

Les possibilités sont assez riches et nous vous recommandons vivement d'aller voir la documentation officielle des jobs sur Gitlab.com

Dans un premier temps, il faut faudra définir le stage ainsi que l'environnement d'exécution de votre job.

Sur GitlabCI, les jobs sont exécutés sur des runners qui sont branchés au système avec des tags. Par exemple, si vous avez besoin de lancer des commandes sur un runner ayant PHP d'installé, vous pouvez définir un tag php et l'associer à ce runner.

Ensuite, il vous suffit de déclarer le tag php dans votre job.

Pourquoi utiliser des tags ? Simplement car GitlabCI est prévu pour scaler ! Vous pouvez donc gérer des dizaines de runners avec votre instance. En déclarant vos jobs avec des tags, vous dîtes à GitlabCI de faire tourner votre job sur le prochain runner compatbile disponible !

Chez SmartBooster, nous préférons travailler avec Docker afin de gérer finement l'environnement d'exécution. Il nous suffit de rajouter l'image docker à utiliser.

build-release:
    stage: build
    image: node:lts
    tags:
        - docker

Puis, vous n'avez plus qu'à lister les commandes à lancer dans les scripts et votre job est prêt à tourner !

Devant le large choix de possibilités, nous vous conseillons de regarder en premier les options suivantes :

  • le cache pour gagner en rapidité d'exécution
  • les dépendances
  • les filtres only
  • le deploy manual notamment sur vos jobs de déploiement
  • les variables d'environnements

Gérer vos environements dans Gitlab

Gitlab vous permet de définir vos environnements de déploiement par projet afin de suivre la version de votre code sur chaque serveur !

Exemple d'environnement gitlab

Vos environnements seront directement visibles dans vos Merge Request, ce qui est très utile lors des phases de validation.

Chez SmartBooster, nous gérons à minima 3 environnements sur nos projets : intégration, recette et production.

Quels sont les bénéfices de Gitlab CI ?

Chez SmartBooster, nous utilisons Gitlab et Gitlab CI de manière intensive !

Pour chaque modification de code nous avons :

  • le status de la pipeline -> ce qui nous permet de ne jamais accepter un code défaillant
  • l'évolution du code coverage -> est-ce que le nouveau code est testé automatiquement ou pas ?
  • une visualisation directement dans le diff de la merge request des lignes de code validées par des tests automatiques
  • une visualisation des environnements où est déployé la modification
  • la possibilité de déployer le code en 1 clic ! (et la possibilité de rollback également)

Une fois que l'on a gouté à ce niveau de confort, il est impossible de s'en passer !

Les pièges à éviter avec Gitlab CI

Après plusieurs années d'utilisation dans différents contextes, nous avons capitalisé une liste de bonnes pratiques ou "Lessions learned" avec Gitalb CI.

Nous vous les partageons ici simplement pour faire mûrir quelques idées, mais nous vous conseillons d'expérimenter les choses par vous-même avant de les appliquer car cela vous permettra de monter en compétence pour mieux maîtriser l'outil.

Découper chaque commande en un job

La représentation visuelle de la pipeline peut vous donner envie de sur découper vos jobs afin de mieux visualiser leur avancement.

Problèmes :

  • le lancement d'un job consomme des ressources et prend plus de temps (pour uploader ou télécharger l'artefact par exemple)
  • Gitlab CI gère plusieurs branches git et plusieurs projets, chaque job est exécuté selon une file d'attente et un autre projet peut passer avant votre prochain job

En faisant cela, vous allonger considérablement vos temps de build surtout si votre équipe est active.

Ne pas assez lire la documentation

La documentation de Gitlab CI/CD est riche et vous trouverez dedans une multitude d'options qui vous ouvrira des possibilités que vous n'auriez pas imaginé seul.

L'équipe de Gitlab utilise cet outil au quotidien (pour le développement de Gitlab justement !) et la communauté leur remonte des feedbacks quotidiens.

L'outil s'améliore à chaque version et chaque mise à jour est une occasion d'accéder à des fonctionnalités plus avancées.

Nous vous conseillons vivement de vous abonner à leur newsletter pour vous tenir au courant des évolutions et améliorer vos pratiques.

Avoir des commandes différentes entre votre CI et votre environnement de développement

Souvent le premier réflexe est de construire vos jobs à la main en reprenant les commandes de votre doc d'installation.

Le problème est qu'il s'agit d'un joli copier/coller qui vous obligera à maintenir 2 versions de ces commandes qui seront forcément différentes par moment et vous ferons perdre du temps.

Nous vous conseillons de centraliser vos scripts pour n'avoir qu'une seule version utilisable en développement, dans la CI et pour vos déploiements.

Ne pas faire de tests automatisés

Gitlab CI vous offre un outil merveilleux pour améliorer la qualité de vos projets à condition d'avoir des tests à lancer.

Utiliser GitlabCI sans mettre en place de test, c'est un peu comme si vous aviez une Ferrari mais que vous ne dépassiez jamais les 30km/h !

Conclusion

Dans cet article, nous vous avons partagé l'un des outils favoris de SmartBooster !

Au quotidien, les pipelines de Gitlab CI nous permettent de valider et déployer notre code en un temps record tout en assurant un haut niveau de qualité à nos clients.

Cet outil offrant de multiples possibilités (et qui s'améliore d'ailleurs en continu à chaque nouvelle version), nous vous conseillons de parcourir la documentation de Gitlab CI/CD régulièrement.

Bien sûr, avec toutes ces possibilités, il vous faudra choisir celle qui conviennent le mieux à vos projets et à votre équipe.

Et si vous avez besoin d'être accompagné dans cette aventure, nous pouvons vous aider à gagner un temps précieux.

D'ici là nous vous souhaitons le meilleur dans vos projets et espérons que cet article vous permettra de passer à la démarche DevOps avec Gitlab CI.