GitLab CI/CD : Un outil au service des développeurs
Ma définition
GitLab est une plateforme qui permet de centraliser le code des développeurs autour de projets. Chaque nouveau code ajouté dans le projet GitLab a une version qui lui est attribuée. De cette manière, il est beaucoup plus simple de revenir sur des anciennes versions du code si nécessaire. GitLab intègre aussi le concept d’intégration et de livraison continu via GitLab CI/CD. C’est un concept clé dans les entreprises avec des développeurs. La phrase « Move fast and break things » a souvent été citée par les acteurs de la Silicon Valley. Elle n’est pas à prendre au pied de la lettre, mais elle montre que la rapidité est une clé de la réussite. Néanmoins, on ne peut pas être seulement rapide, sinon la qualité du code des applications et leurs stabilités ne seraient pas optimales. C’est là que le concept de CI/CD rentre en jeu. Grâce au concept d’intégration continue, les développeurs vont pouvoir développer une fonctionnalité, puis tester tout au long du processus de développement, son fonctionnement, la qualité de son code ainsi que son niveau de sécurité. Grâce au concept de livraison continu, les développeurs vont pouvoir déployer automatiquement leur nouvelle fonctionnalité, tout en continuant à assurer un suivi de leurs fonctionnements une fois en production. Aujourd’hui, toutes les entreprises utilisent ou tendent vers ces concepts pour améliorer la fiabilité et la rapidité de développement des applications.
Mes éléments de preuve
Lors de mon alternance au Ministère des Armées, j’ai eu l’opportunité de travailler à l’industrialisation de l’infrastructure du parc informatique. J’ai eu l’occasion d’utiliser l’approche Infrastructure As Code (IaC) qui consiste à décrire la configuration de nos outils sous forme de fichiers puis à les déployer sur une infrastructure définie. Par conséquent, les infrastructures sont facilement reproductibles et sont complètement automatisées. Grâce à ça, elles gagnent en stabilité. J’ai mis en place plusieurs outils grâce à cette approche. Néanmoins, certains de ces outils, comme Grafana ou comme un ETCD ont des données qui n’étaient pas sauvegardées en raison d’une infrastructure particulière. J’ai dû remédier à ce problème, car l’une des priorités était de mettre en place une sauvegarde journalière des données des applications. Pour s’assurer que la tâche s’exécute correctement et de manière régulière, j’ai configuré des pipelines CI/CD dans GitLab. Afin de ne pas gêner l’activité des développeurs, j’ai utilisé le Scheduler GitLab pour planifier l’exécution de la tâche durant la nuit. De plus, le fait que cette fonctionnalité soit externalisée par rapport à l’infrastructure répond parfaitement aux besoins de haute disponibilité et de résilience dont nous avons besoin. Un jour, lors de mon alternance, l’infrastructure où se trouvait le Grafana est tombée en panne. Grâce à l’approche IaC, j’ai pu la remettre en fonctionnement en quelques secondes une fois que l’infrastructure a été remise en état. Et les sauvegardes réalisées par GitLab Scheduler m’ont permis de remettre le Grafana dans l’état qu’il était avant l’incident. Aucun membre de l’équipe n’a vu ses travaux perdus. Ce projet a permis de mettre en lumière la capacité de GitLab à automatiser des processus, même lorsqu’ils doivent être programmés en automatique de manière régulière.
Depuis quelques mois, j’ai créé une agence de design et de développement web qui fonctionne entièrement en distanciel entre les associés et les employés. Par conséquent, j’ai dû mettre en place des processus robustes pour réussir à être viable sur du long terme. Notamment au niveau de la gestion entre les développeurs. Pour ce faire, j’ai mis en place un serveur GitLab avec des pipelines d’intégration et de livraison continue (CI/CD). Toutefois, il a été très compliqué de fusionner le code développé par différents développeurs puisque chacun a sa propre façon d’écrire. Grâce à l’utilisation des CI/CD, j’ai pu forcer l’utilisation des conventions établies dans l’agence pour augmenter la cohérence et la stabilité des applications développées au sein de cette dernière. De plus, tout au long du cycle de développement, des tests sont exécutés via les pipelines pour vérifier la qualité et la sécurité du code. Une fois que tout le code est considéré comme suffisamment professionnel, le superviseur du projet a la possibilité d’utiliser un pipeline pour livrer le projet en automatique au client. Finalement, j’ai aussi géré la gestion des versions des projets en automatique grâce au CI/CD GitLab. Lors de la livraison d’une ou de plusieurs fonctionnalités, il vient récupérer les descriptions des fonctionnalités réalisées par les développeurs et il en déduit le numéro de la nouvelle version en suivant la convention SemVer Angular. Grâce à la seule fonctionnalité des CI/CD de GitLab, j’ai pu répondre à toutes ces problématiques lors de la collaboration de plusieurs développeurs sur un même projet : la gestion des versions, l’uniformisation de la qualité du code et la livraison continue des nouveautés sur un projet.
Mon autocritique
J’utilise GitLab CI/CD quotidiennement dans tous mes projets professionnels et personnels. Je pense arriver à un haut niveau de maitrise. Je me suis auto formé et j’ai pu valider l’acquisition de ces compétences en entreprise. Les concepts d’intégration et de livraison continue font partie des bases que doit maitriser un profil d’administrateur SRE. Néanmoins, il n’est pas obligatoire de maitriser cette compétence en utilisant l’outil GitLab. De nombreux autres outils de centralisation de code existent dans le monde professionnel. Un concurrent majeur de GitLab est GitHub. L’intégration de ces concepts est entièrement possible avec la fonctionnalité GitHub Actions. C’est pour cette raison que je souhaite continuer mon autoformation en me formant sur la fonctionnalité GitHub Actions. De cette manière, j’aurai un profil plus attractif auprès des entreprises étant donné que je maitriserai les deux plus gros outils permettant de faire de l’intégration et de la livraison continu. Je souhaite aussi me renseigner sur des technologies alternatives comme ArgoCD et CircleCI qui sont aussi très répandues dans les entreprises et qui sont complémentaires aux outils cités précédemment. Aujourd’hui, le profil d’un administrateur SRE doit appliquer la culture DevOps au sein des entreprises. La maitrise avancée de l’intégration et de la livraison continue sont les bases de la culture DevOps. Par conséquent, ces compétences sont obligatoires pour pouvoir exercer ce métier. Ces compétences permettent aux entreprises d’avoir des applications avec un code plus maintenable et plus sécurisé ainsi qu’avec des délais de développement plus courts. J’aimerais étendre mes compétences et les possibilités de ces concepts en étudiant les possibilités d’intégration de l’intelligence artificielle dans les processus de développement d’une application. Le métier d’administrateur SRE évolue très rapidement. Il a déjà connu des évolutions significatives avec l’ajout de la notion de sécurité dans les processus de développement continu. Dorénavant, je pense que la prochaine grosse évolution de ce métier est l’intégration de l’intelligence artificielle. Je suis persuadé qu’il y a de nombreux cas d’utilisation très intéressants, par exemple la possibilité de tester une application le plus fidèlement possible en reproduisant un comportement plus proche de l’humain lors des tests automatiques des applications.
Mon évolution dans cette compétence
À l’avenir, j’aimerais continuer à m’autoformer sur la CI/CD GitLab. Pour ce faire, dans un premier temps, je vais, dans un premier temps, passer la certification « GitOps Certified Associate (CGOA) ». Par la suite, je me formerais à la partie sécurité des pipelines GitLab en suivant la certification officielle « GitLab Certified Security Specialist Exam ». Obtenir ces deux certifications me permettra d’être capable d’intégrer la notion de sécurité dans les processus de développement en entreprise, puisque je considère que c’est une notion clé pour atteindre le maximum de fiabilité au niveau des systèmes d’information des entreprises.