CI/CD
| Ma défition
CI/CD signifie “Continuous Integration / Continuous Deployment”, “Intégration Continue / Déploiement Continu” en français.
L’intégration continue est le fait de mettre en place des processus automatisés afin de pouvoir faire évoluer son code tout en s’assurant qu’il reste viable dans son environnement. En pratique, on peut par exemple utiliser des outils de versionning de code et mettre en place des tests automatisés déclenchés après chaque nouvelle version de code.
Le déploiement continu est le fait de mettre en place des processus automatisés afin de délivrer le code dans l’environnement souhaité. Logiquement, il intervient après l’étape d’intégration continue qui avait validé en amont l’intégrité du nouveau code.
Le concept CI/CD permet de standardiser et limiter les risques de régressions ou d’incidents suite à une livraison d’une nouvelle version d’un logiciel. Ce concept est beaucoup utilisé par les équipes de développeurs. Nous pouvons lire sur un article publié sur le site linagora.com (éditeur français de logiciel open-source) que la culture DevOps joue un rôle primordial dans la mise en place de ce concept en entreprise. En effet, ce concept fait partie d’un des piliers des pratiques DevOps dont l’enjeu principal est “d’unifier le développement et les opérations pour améliorer la collaboration et l’efficacité”.
| Mes éléments de preuve
Nous allons détailler deux anecdotes où j’ai pu mettre en œuvre le concept CI/CD.
Tout d’abord, lors du projet “Solution de monitoring”, j’ai dû mettre en place ce concept. Au moment de la réalisation de mon projet, il n’existait pas de CI/CD pour les applications web, mais seulement pour le déploiement des outils. J’ai utilisé l’outil Jenkins car il était déjà utilisé pour le déploiement des outils. J’ai commencé par réaliser un POC de déploiement puis j’ai mis en place un vrai déploiement. Le pipeline de déploiement comporte 7 étapes:
Les étapes 1,2,3 et 4 correspondent à l’intégration continue. En effet, l’automation télécharge la dernière version du code puis effectue des tests liés à l’application web. Ici, ce sont des tests spécifiques liés aux fichiers de configurations de Prometheus.
Les étapes 5,6 et 7 correspondent au déploiement continu avec l’application web qui est redéployée. Des tests d’acceptance sont ensuite effectués afin de s’assurer que la solution est pleinement fonctionnelle. Ce pipeline est automatiquement déclenché lors d’un commit grâce à l’outil “Tuleap” qui sert aussi d’outil de ticketing. La mise en place du concept CI/CD a permis de faciliter les déploiements qui étaient auparavant manuels, sans tests et qui étaient beaucoup plus longs. J’ai ensuite optimisé ce pipeline de déploiement (agents Jenkins, lancement des tests) pour passer d’un temps de déploiement de 2 minutes à 30 secondes.
Ensuite, lors d’un projet scolaire réalisé dans le cadre d’un examen à l’école DevUniversity, j’ai dû mettre en place un concept de CICD. Le code applicatif était fourni et il fallait mettre en place le concept à l’aide de l’outil Jenkins. C’était une application de streaming qui était conteneurisée via Docker et orchestrée via Kubernetes. L’intégration continue contenait quatres étapes: build, run, tests et push. L’objectif était de créer la nouvelle image Docker à partir du nouveau code, l’exécuter pour la tester puis la stocker dans un registre d’image si celle-ci est valide. Le déploiement continu contenait une seule étape via l’outil Helm qui est un gestionnaire de paquets pour Kubernetes qui facilite le déploiement. Chaque service était déployé dans une étape dédiée, et l’application était déployée dans quatre environnements différents (dev, qa, staging, prod). La mise en place du concept CI/CD a permis d’automatiser la livraison d’une nouvelle version applicative.
Après validation de cet examen, j’ai obtenu une certification “Jenkins” délivrée par l’école DevUniversity.
| Mon autocritique
Grâce à mon parcours, je me sens apte à mettre ces concepts en entreprise. Je pense avoir le niveau “Confirmé” dans le domaine.
Cependant, j’ai beaucoup travaillé avec l’outil Jenkins mais j’ai moins pratiqué sur des outils équivalents comme Gitlab ou GitHub Actions qui sont aussi très utilisés en entreprise. J’ai commencé à exercer cette compétence lors de mon Bachelor “Administrateur Système DevOps”, et j’ai rapidement progressé grâce à l’opportunité d’ y avoir pu y travailler en entreprise. Je trouve que la mise en œuvre de la CI/CD peut-être très bénéfique à l’ensemble des développeurs. Je pense que chaque logiciel mérite des processus de déploiement automatisés à cette étape cruciale de son cycle de vie, à condition de s’adapter à la taille du projet.
| Mon évolution dans cette compétence
J’aimerai continuer à progresser dans cette compétence afin d’avoir un jour le niveau “Expert”.
Je pense qu’il va falloir que je me forme davantage sur les aspects sécurités qui sont très importants dans ce cycle de vie d’un logiciel. Pour cela, j’aimerai dans un premier temps m’auto-former en réalisant les 3 projets fil rouge proposés sur le site internet de Stéphane Robert qui est un formateur DevOps. Fil rouge DevSecOps : 3 projets progressifs