Blog IA/ML Développement de GitLab Duo : l'IA combinée à l'analyse des causes profondes pour réparer les pipelines CI/CD
Date de la publication : June 6, 2024
Lecture : 11 min

Développement de GitLab Duo : l'IA combinée à l'analyse des causes profondes pour réparer les pipelines CI/CD

Découvrez comment nous avons associé une fonctionnalité d'analyse des causes profondes à l'IA pour vous aider à réparer les pipelines CI/CD défectueux.

gitlab duo - new cover

L'IA générative marque une avancée majeure dans le domaine du développement logiciel, simplifiant le processus de développement, de sécurisation et d'exploitation des logiciels. Notre série d'articles de blog, rédigée par nos équipes produit et ingénierie, vous propose un aperçu de notre processus de création, de test et de déploiement des fonctionnalités d'IA que vous avez besoin d'intégrer dans l'ensemble de l'entreprise. Explorez les nouvelles capacités de GitLab Duo et découvrez comment elles aident les équipes DevSecOps à livrer de meilleurs résultats aux clients.

Avez-vous déjà été contraint d'interrompre votre workflow DevSecOps, voire de retarder votre processus de déploiement logiciel, alors que vous cherchiez la cause profonde d'un problème de pipeline CI/CD ? Traditionnellement, lorsqu'un problème survient au cours du processus de création de logiciels, les développeurs doivent parcourir les fichiers journaux et le résoudre après de multiples essais. L'analyse des causes profondes de GitLab Duo, l'une de nos fonctionnalités alimentées par l'IA, élimine les hypothèses en déterminant la cause profonde de l'échec d'un pipeline CI/CD.

Découvrez dans cet article ce qu’est l'analyse des causes profondes et comment appliquer cette fonctionnalité GitLab Duo alimentée par l'IA à votre workflow DevSecOps.

Vous avez manqué notre événement virtuel à l’occasion du lancement de GitLab 17 ? Accédez au replay !

Qu’est-ce que l'analyse des causes profondes ?

L'analyse des causes profondes de GitLab Duo est une fonctionnalité alimentée par l'IA qui analyse les journaux pour vous aider à identifier une cause profonde et suggère une solution lorsqu'un job log CI/CD échoue.

Bien qu'elle soit souvent utilisée pour gérer les incidents liés aux produits, ses méthodes et ses pratiques de débogage se retrouvent dans tous les workflows DevSecOps. Lorsque les équipes Ops, les administrateurs et les ingénieurs de plateforme enquêtent sur les échecs de pipeline, ils sont confrontés à des erreurs de déploiement de l'Infrastructure as Code (IaC), à des problèmes liés à Kubernetes et GitOps, ainsi qu'à de longues traces d'appels détaillant la séquence complète des fonctions ou des méthodes impliquées dans les défaillances.

Rassemblant les équipes sur une seule interface, la fonctionnalité d'analyse des causes profondes de GitLab Duo fait appel à l'IA pour résumer, analyser et proposer des correctifs afin que les entreprises puissent déployer plus rapidement des logiciels sécurisés.

Un pipeline peut échouer pour diverses raisons, notamment des erreurs de syntaxe dans le code, des dépendances manquantes, des échecs de test pendant le processus de compilation, des délais d'attente dépassés lors du déploiement de Kubernetes et de l'IaC, ainsi que de nombreux autres problèmes potentiels. Lorsque de tels échecs se produisent, toute l'équipe a la responsabilité d'examiner minutieusement les logs générés par le pipeline. Ce processus d'examen du job log consiste à vérifier minutieusement les sorties détaillées pour identifier les erreurs spécifiques et les causes profondes de l'échec du pipeline. Par exemple, le pipeline suivant a enregistré plusieurs échecs qui doivent être examinés et corrigés.

Image illustrant plusieurs échecs de jobs

La durée nécessaire pour corriger ces échecs est très variable et grandement influencée par plusieurs facteurs, tels que :

  • la connaissance du projet par le développeur,
  • son niveau d'expérience avec des problèmes similaires,
  • son niveau de compétence global en matière de dépannage et de résolution de problèmes dans le contexte du pipeline.

L'analyse manuelle peut être extrêmement difficile et chronophage, dans la mesure où les données des journaux se composent de journaux d'applications et de messages système rassemblant de nombreuses sources d'échec potentielles. Un correctif de pipeline typique peut consister en plusieurs itérations et en un changement de contexte. La complexité et la nature non structurée des fichiers journaux illustrent à la perfection la manière dont l'IA générative permet d'accélérer les tâches. L'utilisation de l'IA peut réduire considérablement le temps nécessaire pour identifier et corriger une erreur de pipeline. Elle abaisse également le niveau d'expertise nécessaire pour réparer un pipeline comme celui présenté ci-dessus.

Regardez la fonctionnalité d’analyse des causes profondes de GitLab Duo en action :

Comment fonctionne l'analyse des causes profondes ?

L'analyse des causes profondes transmet une partie du job log CI/CD à la passerelle d'IA de GitLab. GitLab intègre ce segment dans les limites du token du grand modèle de langage (LLM) et l'associe à un prompt créé en amont afin de fournir des informations sur les raisons possibles de l'échec du job. Le prompt demande également au LLM de fournir un exemple de résolution du job qui a échoué.

Voici deux exemples de scénarios où la fonctionnalité d'analyse des causes profondes de GitLab peut vous être utile.

1. Analysez une erreur de dépendance Python

Une application Python peut importer des modules de package contenant des fonctionnalités qui ne sont pas fournies dans la bibliothèque standard. Le projet « Challenge - Root Cause Analysis - Python Config » met en œuvre une application qui analyse la configuration et initialise une base de données SQLite. Ces deux éléments fonctionnent sans dépendance. Le projet utilise les meilleures pratiques CI/CD avec une mise en cache et un environnement Python. La dernière implémentation de la fonctionnalité ajoute un client de mise en cache Redis et la compilation CI/CD échoue maintenant pour une raison quelconque.

Grâce à la fonctionnalité d'analyse des causes profondes de GitLab Duo, vous pouvez immédiatement repérer que le texte ModuleNotFoundError signifie que le module n'est pas installé dans l'environnement Python. GitLab Duo suggère également un exemple de correctif : l'installation du module Redis via le gestionnaire de paquets PIP.

Image représentant le message 'modulenotfounderror' et la résolution suggérée par GitLab Duo

Pour consulter le pipeline défectueux, cliquez sur ce lien.

Le prompt d'analyse des causes profondes de GitLab fournit un résumé du problème, qui semble découler d'un module redis manquant. Essayons de le résoudre en installant le module redis. Vous pouvez appeler pip install redis dans la section script du job CI/CD, ou utiliser une approche plus sophistiquée avec le fichier requirements.txt. Ce dernier est utile si vous souhaitez avoir une source unique de vérité pour les dépendances installées dans l'environnement de développement et les pipelines CI/CD.

test:
  extends: [.python-req]
  stage: test 
  before_script:
    # [🦊] hint: Root cause analysis. # Solution 1: Install redis using pip
    - pip install redis
    # Solution 2: Add redis to requirements.txt, use pip
    - pip install -r requirements.txt 

  script:
    - python src/main.py

Une fois la dépendance Python manquante corrigée, le job CI/CD échoue à nouveau. Utilisez une nouvelle fois l'analyse des causes profondes de GitLab et vous constaterez qu'aucun service Redis n'est en cours d'exécution dans le job. Dans GitLab Duo Chat, saisissez le prompt How to start a Redis service in CI/CD (Comment démarrer un service Redis dans CI/CD) pour apprendre à configurer l'attribut services dans le job CI/CD.

Illustre le prompt indiquant comment démarrer un service Redis

Modifiez le fichier .gitlab-ci.yml avec le job test et indiquez le service redis.

test:
  extends: [.python-req]
  stage: test 
  before_script:
    # [🦊] hint: Root cause analysis.
    # Solution 1: Install redis using pip
    - pip install redis
    # Solution 2: Add redis to requirements.txt, use pip
    - pip install -r requirements.txt 

  script:
    - python src/main.py

  # Solution 3 - Running Redis
  services:
    - redis

L'exécution du serveur Redis vous permet d'exécuter avec succès l'application Python et d'enregistrer sa sortie dans le job log CI/CD.

sortie de l'application Python

La solution est fournie dans le dépôt solution/.

Conseil : vous pouvez également demander à GitLab Duo Chat de suivre les problèmes potentiels à l'avenir.

How to lint Python code? Which tools are recommended for CI/CD.
How to pin a package version in Python requirements file?	
What are possible ways that this exception stacktrace is triggered in the future?
Are there ways to prevent the application from failing?

L'exemple suivant est plus avancé et comprend plusieurs échecs.

2. Analysez le runtime Go manquant

Les jobs CI/CD peuvent être exécutés dans des conteneurs, générés à partir de l'attribut image fourni. Si le conteneur ne fournit pas de runtime de langage de programmation, les sections script exécutées faisant référence au binaire go échouent. Par exemple, il est nécessaire de comprendre et de corriger le message d'erreur /bin/sh: eval: line 149: go: not found.

Plusieurs raisons peuvent expliquer que la commande go ne se trouve pas dans le contexte de runtime du conteneur :

  1. Le job utilise une image de conteneur minimale, par exemple alpine, et le runtime du langage Go n'a pas été installé.
  2. Le job utilise la mauvaise image de conteneur par défaut, par exemple, celle indiquée au-dessus de la configuration CI/CD ou correspondant au mot-clé default.
  3. Le job utilise le Shell executor (exécuteur Shell) à la place de l'image de conteneur. Le runtime Go n'est pas installé sur le système d'exploitation hôte, il échoue pour un autre motif ou n'est pas configuré.

Notre projet « Challenge - Root Cause Analysis - Go GitLab Release Fetcher » propose un exercice d'analyse et de résolution des problèmes CI/CD avec une application de récupération de versions GitLab, écrite en langage Go. Les jobs CI/CD build et docker-build échouent. La résolution du problème a différentes portées : comprendre pourquoi le runtime Go n'est pas installé et en apprendre davantage sur la syntaxe Dockerfile.

Capture d'écran montrant l'échec du job Modifier l'étiquette Docker

Le dépôt solution/ suggère deux solutions possibles après l'analyse des causes profondes.

Entraînez-vous à utiliser l'analyse des causes profondes

Voici plusieurs scénarios pour lesquels vous pouvez vous entraîner à travailler avec la fonctionnalité d'analyse des causes profondes de GitLab.

  • Lorsque vous rencontrez des délais d'attente expirés ou des erreurs de déploiement Kubernetes.

  • Lorsque des pipelines IaC OpenTofu ou Terraform ne parviennent pas à provisionner vos ressources cloud.

  • Lorsque le playbook Ansible échoue et affiche un message d'erreur cryptique d'autorisation dans le CI/CD.

  • Lorsque la trace d'appels Java contient 10 pages.

  • Lorsqu'un script shell met en évidence une erreur d'exécution.

  • Lorsqu'un script Perl échoue sur la seule ligne que ce script contient.

  • Lorsque le job CI/CD est interrompu et que la section qui en serait la cause n'est pas évidente.

  • Lorsqu'un délai d'attente de connexion réseau est atteint et que vous pensez qu'il ne peut pas s'agir du DNS.

Quels sont les prochains développements prévus pour l'analyse des causes profondes de GitLab Duo ?

Nous voulons aider nos utilisateurs à réduire le nombre d'itérations nécessaires pour valider leurs pipelines CI/CD. À l'avenir, la fonctionnalité d'analyse des causes profondes de GitLab s'ouvrira systématiquement et affichera la réponse dans GitLab Duo Chat, notre assistant d'IA. Les utilisateurs pourront alors s'appuyer sur la recommandation pour générer un correctif plus précis en posant des questions spécifiques (par exemple, des correctifs spécifiques pour un langage de programmation particulier) ou en demandant des correctifs alternatifs en fonction de la cause profonde identifiée.

Par exemple, voici le résultat de l'analyse des causes profondes d'un job ayant rencontré un échec :

Réponse de l'Analyse des causes profondes

Les utilisateurs peuvent poser des questions de suivi qui approfondissent la réponse générée par l'IA.

  • Je ne veux pas créer ma propre image Docker. Veuillez suggérer d'autres façons de résoudre le problème.

  • Je n'ai pas accès à la création d'image Docker. Il semble que le binaire Go soit manquant. Pouvez-vous suggérer des images alternatives ?

GitLab exécutera également un benchmark de la qualité des réponses générées et mettra en place des améliorations pour rendre l'utilisation plus conviviale et efficace.

Consultez notre epic sur la disponibilité générale de l'analyse des causes profondes pour en savoir plus et laissez un commentaire sur notre ticket dédié à l'analyse des causes profondes pour nous dire ce que vous pensez de cette fonctionnalité.

Profitez dès maintenant des nombreux avantages de l'analyse des causes profondes

Pour activer cette fonctionnalité, consultez notre documentation. L'analyse des causes profondes est disponible actuellement pour nos clients GitLab Ultimate et sera bientôt disponible dans GitLab Auto-géré et GitLab Dedicated.

Vous souhaitez tester GitLab Ultimate ? Commencez dès aujourd'hui un essai gratuit de 30 jours.

En savoir plus sur le « Développement de GitLab Duo »

Votre avis nous intéresse

Cet article de blog vous a plu ou vous avez des questions ou des commentaires ? Partagez vos réflexions en créant un nouveau sujet dans le forum de la communauté GitLab. Partager votre expérience

Prêt à vous lancer ?

Découvrez comment la plateforme DevSecOps de GitLab peut aider votre équipe.

Profiter d'un essai gratuit

Découvrez le forfait qui convient le mieux à votre équipe

En savoir plus sur la tarification

Découvrez ce que GitLab peut offrir à votre équipe

Échanger avec un expert