[{"data":1,"prerenderedAt":712},["ShallowReactive",2],{"/fr-fr/blog/how-gitlab-duo-agent-platform-transforms-dataops":3,"navigation-fr-fr":33,"banner-fr-fr":452,"footer-fr-fr":465,"Dennis van Rooijen":676,"next-steps-fr-fr":690,"footer-source-/fr-fr/blog/how-gitlab-duo-agent-platform-transforms-dataops/":705},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":13,"config":23,"_id":26,"_type":27,"title":28,"_source":29,"_file":30,"_stem":31,"_extension":32},"/fr-fr/blog/how-gitlab-duo-agent-platform-transforms-dataops","blog",false,"",{"config":9,"ogImage":10,"title":11,"description":12},{"noIndex":6},"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/blog/hero%20images/workflow_1800x945","Comment GitLab Duo Agent Platform révolutionne le DataOps","Découvrez comment transformer des heures de codage manuel en quelques minutes avec ce guide complet de création de modèles dbt.",{"date":14,"heroImage":10,"title":11,"description":12,"category":15,"tags":16,"authors":20,"body":22},"2025-10-27","ai-ml",[17,18,19],"product","tutorial","features",[21],"Dennis van Rooijen","Créer manuellement des modèles dbt est un processus fastidieux qui peut prendre des heures. Si aucune transformation majeure n'est requise, il ne s'agit pas de la partie la plus stimulante du travail des Data Engineers.\n\n\nImaginez pouvoir automatiser ce processus dans son intégralité. Dans ce guide pratique, je vous montre précisément comment [GitLab Duo Agent Platform](https://about.gitlab.com/fr-fr/gitlab-duo/agent-platform/) peut générer des modèles dbt complets en quelques minutes seulement, avec une structure, des tests et de la documentation.\n\n\n> **[&rarr; Essayez GitLab Ultimate et GitLab Duo Enterprise gratuitement.](https://about.gitlab.com/fr-fr/free-trial/devsecops/?utm_medium=blog&utm_source=blog&utm_campaign=eg_emea_x_trial_x_fr_blog_fr)**\n\n\n## Ce que nous construisons\n\n\nNotre équipe marketing souhaite gérer et optimiser efficacement ses investissements publicitaires. Reddit étant l'une des plateformes publicitaires utilisées, nous extrayons donc les données de l'API Reddit Ads vers notre [plateforme de données](https://handbook.gitlab.com/handbook/enterprise-data/platform/) d'entreprise Snowflake. \n\n\nGitLab possède trois couches de stockage :\n\n\n1. Couche `raw` : premier emplacement pour les données non traitées issues de sources externes, elles ne sont pas encore prêtes pour une utilisation métier.\n\n2. Couche `prep`: première couche de transformation avec les modèles sources, les données ne sont toujours pas prêtes pour une utilisation générale.\n\n3. Couche `prod` : données finales transformées prêtes pour l'utilisation métier et les rapports Tableau.\n\n\n![Schéma des couches de stockage](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758030995/zo7vespktzfdtdtiauz7.png)\n\n\nDans ce guide, les données sont déjà dans la couche `raw` grâce à notre solution d'extraction Fivetran, et nous allons générer les modèles dbt qui gèrent les données de la couche `prep` jusqu'à la couche `prod`.\n\n\nSans avoir à écrire une seule ligne de code dbt nous-mêmes, nous aurons à la fin de ce guide :\n\n\n* **Des modèles sources** dans la couche `prep`\n\n* **Des modèles workspace** dans la couche `prod`\n\n* **Des configurations dbt complètes** pour les 13 tables (soit 112 colonnes) du jeu de données Reddit Ads\n\n* **Des requêtes de test** pour valider les résultats\n\n\nLe processus complet prendra moins de 10 minutes, comparé aux heures habituellement nécessaires du processus manuel. \n\n\nVoici les étapes à suivre :\n\n\n## 1. Préparer la structure des données\n\n\nAvant que GitLab Duo ne puisse générer nos modèles, il doit comprendre la structure complète des tables. La clé est d'exécuter une requête sur le schéma d'informations de Snowflake, car nous étudions actuellement comment connecter GitLab Duo via Model Context Protocol ([MCP](https://about.gitlab.com/fr-fr/topics/ai/model-context-protocol/)) à notre instance Snowflake :\n\n\n```sql\nSELECT \n    table_name,\n    column_name,\n    data_type,\n    is_nullable,\n    CASE \n        WHEN is_nullable = 'NO' THEN 'PRIMARY_KEY'\n        ELSE NULL \n    END as key_type\nFROM raw.information_schema.columns\nWHERE table_schema = 'REDDIT_ADS'\nORDER BY table_name, ordinal_position;\n```\n\nCette requête contient :\n\n\n* Tous les noms de tables et colonnes\n\n* Les types de données pour une structure de modèle appropriée\n\n* Les contraintes nullables\n\n* L'identification des clés primaires (colonnes non-nullables dans ce jeu de données)\n\n\n**Conseil de pro :** dans le jeu de données Reddit Ads, toutes les colonnes non-nullables servent de clés primaires, il s'agit là d'un modèle récurrent. Nous avons validé ce modèle en vérifiant des tables comme `ad_group`, qui possèdent deux colonnes non-nullables (`account_id` et `id`) toutes deux marquées comme clés primaires. L'exécution de cette requête a renvoyé 112 lignes de métadonnées que j'ai exportées dans un fichier CSV pour la génération de modèles. Bien que cette étape manuelle fonctionne bien aujourd'hui, nous étudions une intégration directe de GitLab Duo avec notre plateforme de données via MCP pour automatiser entièrement ce processus.\n\n\n## 2. Configurer GitLab Duo\n\n\nIl existe deux façons d'interagir avec [GitLab Duo](https://docs.gitlab.com/fr/user/get_started/getting_started_gitlab_duo/) :\n\n\n1. **La fonction chat de l'interface web**\n\n2. **Le plugin Visual Studio Code**\n\n\nNous avons choisi le plugin VS Code, car nous pouvons exécuter les modèles dbt localement pour les tester.\n\n\n## 3. Entrer le prompt « magique »\n\n\nVoici le prompt exact que nous avons utilisé pour générer tout le code dbt :\n\n\n```yaml\nCreate dbt models for all the tables in the file structure.csv.\n\nI want to have the source models created, with a filter that dedupes the data based on the primary key. Create these in a new folder reddit_ads.\nI want to have workspace models created and store these in the workspace_marketing schema.\n\nTake this MR as example: [I've referenced to previous source implementation]. Here is the same done for Source A, but now it needs to be done for Reddit Ads. \n\nPlease check the dbt style guide when creating the code: https://handbook.gitlab.com/handbook/enterprise-data/platform/dbt-guide/\n```\n\n\nLes éléments essentiels suivants ont garanti l'efficacité du prompt :\n\n\n* **Des spécifications claires** pour les modèles sources et workspace\n\n* **Un exemple de référence** d'une merge request similaire précédente\n\n* **Une référence au guide de style** pour garantir la qualité et la cohérence du code\n\n* **Un ciblage spécifique du schéma** pour une organisation correcte\n\n\n## 4. Le processus de GitLab Duo\n\n\nAprès avoir soumis le prompt, GitLab Duo s'est mis au travail. Le processus de génération complet a pris quelques minutes, durant lesquelles GitLab Duo a :\n\n\n1. **Lu et analysé** le fichier CSV d'intrant.\n\n2. **Examiné les structures des tables** à partir des métadonnées.\n\n3. **Référencé notre guide de style dbt** pour les normes de codage.\n\n4. **Pris en compte la merge request similaire** pour proposer une structure correcte.\n\n5. **Généré les modèles sources** pour les 13 tables.\n\n6. **Créé les modèles workspace** pour les 13 tables.\n\n7. **Généré les fichiers dbt complémentaires** :\n\n   * Configuration `sources.yml`\n   * Fichiers `schema.yml` avec tests et documentation\n   * Mise à jour de `dbt_project.yml` avec les références de schéma\n\n## Les résultats\n\n\nLes résultats sont remarquables :\n\n\n* **1 fichier modifié :** dbt_project.yml (ajout de la configuration du schéma reddit_ads)\n\n* **29 nouveaux fichiers :**\n\n   * **26 modèles dbt** (13 sources + 13 workspaces)\n   * **3 fichiers YAML**\n* **Près de 900 lignes de code** générées automatiquement\n\n* **Tests de données intégrés,** avec des contraintes uniques sur les colonnes de clé primaire\n\n* **Descriptions génériques** pour tous les modèles et colonnes\n\n* **Logique de déduplication appropriée** dans les modèles sources\n\n* **Structure de code propre et cohérente** conformément au guide de style GitLab dbt\n\n\n```yaml\ntransform/snowflake-dbt/\n├── dbt_project.yml                                                    [MODIFIED]\n└── models/\n    ├── sources/\n    │   └── reddit_ads/\n    │       ├── reddit_ads_ad_group_source.sql                        [NEW]\n    │       ├── reddit_ads_ad_source.sql                              [NEW]\n    │       ├── reddit_ads_business_account_source.sql                [NEW]\n    │       ├── reddit_ads_campaign_source.sql                        [NEW]\n    │       ├── reddit_ads_custom_audience_history_source.sql         [NEW]\n    │       ├── reddit_ads_geolocation_source.sql                     [NEW]\n    │       ├── reddit_ads_interest_source.sql                        [NEW]\n    │       ├── reddit_ads_targeting_community_source.sql             [NEW]\n    │       ├── reddit_ads_targeting_custom_audience_source.sql       [NEW]\n    │       ├── reddit_ads_targeting_device_source.sql                [NEW]\n    │       ├── reddit_ads_targeting_geolocation_source.sql           [NEW]\n    │       ├── reddit_ads_targeting_interest_source.sql              [NEW]\n    │       ├── reddit_ads_time_zone_source.sql                       [NEW]\n    │       ├── schema.yml                                            [NEW]\n    │       └── sources.yml                                           [NEW]\n    └── workspaces/\n        └── workspace_marketing/\n            └── reddit_ads/\n                ├── schema.yml                                        [NEW]\n                ├── wk_reddit_ads_ad.sql                              [NEW]\n                ├── wk_reddit_ads_ad_group.sql                        [NEW]\n                ├── wk_reddit_ads_business_account.sql                [NEW]\n                ├── wk_reddit_ads_campaign.sql                        [NEW]\n                ├── wk_reddit_ads_custom_audience_history.sql         [NEW]\n                ├── wk_reddit_ads_geolocation.sql                     [NEW]\n                ├── wk_reddit_ads_interest.sql                        [NEW]\n                ├── wk_reddit_ads_targeting_community.sql             [NEW]\n                ├── wk_reddit_ads_targeting_custom_audience.sql       [NEW]\n                ├── wk_reddit_ads_targeting_device.sql                [NEW]\n                ├── wk_reddit_ads_targeting_geolocation.sql           [NEW]\n                ├── wk_reddit_ads_targeting_interest.sql              [NEW]\n                └── wk_reddit_ads_time_zone.sql                       [NEW]\n```\n\n\n### Exemple de code généré\n\n\nVoici un exemple de la qualité du code généré. Pour la table `time_zone`, GitLab Duo a créé :\n\n\n**Un modèle source de la couche `prep`**\n\n\n```sql\nWITH source AS (\n  SELECT *\n  FROM {{ source('reddit_ads','time_zone') }}\n  QUALIFY ROW_NUMBER() OVER (PARTITION BY id ORDER BY _fivetran_synced DESC) = 1\n),\n\nrenamed AS (\n  SELECT\n    id::VARCHAR                               AS time_zone_id,\n    code::VARCHAR                             AS time_zone_code,\n    dst_offset::NUMBER                        AS time_zone_dst_offset,\n    is_dst_active::BOOLEAN                    AS is_time_zone_dst_active,\n    name::VARCHAR                             AS time_zone_name,\n    offset::NUMBER                            AS time_zone_offset,\n    _fivetran_synced::TIMESTAMP               AS fivetran_synced_at\n  FROM source\n)\n\nSELECT * FROM renamed\n```\n\n\n**Schema.yml**\n\n\n```yaml\nmodels:\n  - name: reddit_ads_time_zone_source\n    description: Time zone data from Reddit Ads system\n    columns:\n      - name: time_zone_id\n        description: Unique identifier for time zone records\n        data_tests:\n          - unique\n          - not_null\n      - name: time_zone_code\n        description: Code for the time zone\n      - name: time_zone_dst_offset\n        description: Daylight saving time offset for the time zone\n      - name: is_time_zone_dst_active\n        description: Flag indicating if daylight saving time is active\n      - name: time_zone_name\n        description: Name of the time zone\n      - name: time_zone_offset\n        description: Offset for the time zone\n      - name: fivetran_synced_at\n        description: Timestamp when the record was last synced by Fivetran\n```\n\n\n**Source.yml**\n\n\n```yaml\nsources:\n  - name: reddit_ads\n    database: RAW\n    schema: reddit_ads\n    loaded_at_field: _fivetran_synced\n    loader: fivetran\n    description: Reddit Ads data\n\n    quoting:\n      database: true\n      schema: false\n      identifier: false\n\n    tables:\n      - name: time_zone\n```\n\n\n**Modèle workspace**\n\n\n```sql\nWITH source AS (\n  SELECT *\n  FROM {{ ref('reddit_ads_time_zone_source') }}\n)\n\nSELECT * FROM source\n```\n\n\n## 5. Valider la qualité\n\n\nUne fois que le code semblait correct, nous avons effectué un push vers la merge request et exécuté le [pipeline de test CI](https://handbook.gitlab.com/handbook/enterprise-data/platform/ci-jobs/#build_changes) pour tester le code et valider les résultats. Nous avons demandé à GitLab Duo de créer une requête de validation :\n\n\n```yaml\nCreate a test query to test the row counts between the raw layer and the workspace layer. Keep in mind that we do deduplication, so we can compare both using distinct on the primary keys.\n```\n\n\nL'IA a généré une requête de validation complète qui :\n\n\n* Compare le nombres de lignes entre les couches `raw` et workspace.\n\n* Prend en compte la logique de déduplication.\n\n* Teste les 13 tables.\n\n* Calcule les pourcentages de rétention de données.\n\n\n\u003Cdetails>\n\u003Csummary>Requête SQL de test générée\u003C/summary>\n\n```sql\n-- Reddit Ads Row Count Validation Test\n-- Compares distinct counts between RAW layer and WORKSPACE_MARKETING layer\n-- Accounts for deduplication logic in source models\n\nWITH raw_counts AS (\n  -- Single primary key tables\n  SELECT 'ad' AS table_name, COUNT(DISTINCT id) AS raw_count\n  FROM RAW.REDDIT_ADS.AD\n  \n  UNION ALL\n  \n  SELECT 'business_account' AS table_name, COUNT(DISTINCT id) AS raw_count\n  FROM RAW.REDDIT_ADS.BUSINESS_ACCOUNT\n  \n  UNION ALL\n  \n  SELECT 'campaign' AS table_name, COUNT(DISTINCT id) AS raw_count\n  FROM RAW.REDDIT_ADS.CAMPAIGN\n  \n  UNION ALL\n  \n  SELECT 'custom_audience_history' AS table_name, COUNT(DISTINCT id) AS raw_count\n  FROM RAW.REDDIT_ADS.CUSTOM_AUDIENCE_HISTORY\n  \n  UNION ALL\n  \n  SELECT 'geolocation' AS table_name, COUNT(DISTINCT id) AS raw_count\n  FROM RAW.REDDIT_ADS.GEOLOCATION\n  \n  UNION ALL\n  \n  SELECT 'interest' AS table_name, COUNT(DISTINCT id) AS raw_count\n  FROM RAW.REDDIT_ADS.INTEREST\n  \n  UNION ALL\n  \n  SELECT 'time_zone' AS table_name, COUNT(DISTINCT id) AS raw_count\n  FROM RAW.REDDIT_ADS.TIME_ZONE\n  \n  -- Composite primary key tables\n  UNION ALL\n  \n  SELECT 'ad_group' AS table_name, COUNT(DISTINCT CONCAT(account_id, '|', id)) AS raw_count\n  FROM RAW.REDDIT_ADS.AD_GROUP\n  \n  UNION ALL\n  \n  SELECT 'targeting_community' AS table_name, COUNT(DISTINCT CONCAT(ad_group_id, '|', community_id)) AS raw_count\n  FROM RAW.REDDIT_ADS.TARGETING_COMMUNITY\n  \n  UNION ALL\n  \n  SELECT 'targeting_custom_audience' AS table_name, COUNT(DISTINCT CONCAT(ad_group_id, '|', custom_audience_id)) AS raw_count\n  FROM RAW.REDDIT_ADS.TARGETING_CUSTOM_AUDIENCE\n  \n  UNION ALL\n  \n  SELECT 'targeting_device' AS table_name, COUNT(DISTINCT _fivetran_id) AS raw_count\n  FROM RAW.REDDIT_ADS.TARGETING_DEVICE\n  \n  UNION ALL\n  \n  SELECT 'targeting_geolocation' AS table_name, COUNT(DISTINCT CONCAT(ad_group_id, '|', geolocation_id)) AS raw_count\n  FROM RAW.REDDIT_ADS.TARGETING_GEOLOCATION\n  \n  UNION ALL\n  \n  SELECT 'targeting_interest' AS table_name, COUNT(DISTINCT CONCAT(ad_group_id, '|', interest_id)) AS raw_count\n  FROM RAW.REDDIT_ADS.TARGETING_INTEREST\n),\n\nworkspace_counts AS (\n  -- Workspace layer counts using primary keys from schema.yml\n  SELECT 'ad' AS table_name, COUNT(DISTINCT ad_id) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_AD\n  \n  UNION ALL\n  \n  SELECT 'business_account' AS table_name, COUNT(DISTINCT business_account_id) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_BUSINESS_ACCOUNT\n  \n  UNION ALL\n  \n  SELECT 'campaign' AS table_name, COUNT(DISTINCT campaign_id) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_CAMPAIGN\n  \n  UNION ALL\n  \n  SELECT 'custom_audience_history' AS table_name, COUNT(DISTINCT custom_audience_id) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_CUSTOM_AUDIENCE_HISTORY\n  \n  UNION ALL\n  \n  SELECT 'geolocation' AS table_name, COUNT(DISTINCT geolocation_id) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_GEOLOCATION\n  \n  UNION ALL\n  \n  SELECT 'interest' AS table_name, COUNT(DISTINCT interest_id) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_INTEREST\n  \n  UNION ALL\n  \n  SELECT 'time_zone' AS table_name, COUNT(DISTINCT time_zone_id) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_TIME_ZONE\n  \n  -- Composite primary key tables\n  UNION ALL\n  \n  SELECT 'ad_group' AS table_name, COUNT(DISTINCT CONCAT(ad_group_account_id, '|', ad_group_id)) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_AD_GROUP\n  \n  UNION ALL\n  \n  SELECT 'targeting_community' AS table_name, COUNT(DISTINCT CONCAT(targeting_community_ad_group_id, '|', targeting_community_id)) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_TARGETING_COMMUNITY\n  \n  UNION ALL\n  \n  SELECT 'targeting_custom_audience' AS table_name, COUNT(DISTINCT CONCAT(targeting_custom_audience_ad_group_id, '|', targeting_custom_audience_id)) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_TARGETING_CUSTOM_AUDIENCE\n  \n  UNION ALL\n  \n  SELECT 'targeting_device' AS table_name, COUNT(DISTINCT targeting_device_fivetran_id) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_TARGETING_DEVICE\n  \n  UNION ALL\n  \n  SELECT 'targeting_geolocation' AS table_name, COUNT(DISTINCT CONCAT(targeting_geolocation_ad_group_id, '|', targeting_geolocation_id)) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_TARGETING_GEOLOCATION\n  \n  UNION ALL\n  \n  SELECT 'targeting_interest' AS table_name, COUNT(DISTINCT CONCAT(targeting_interest_ad_group_id, '|', targeting_interest_id)) AS workspace_count\n  FROM REDDIT_DBT_MODEL_GENERATION_PROD.WORKSPACE_MARKETING.WK_REDDIT_ADS_TARGETING_INTEREST\n)\n\n-- Final comparison with validation results\nSELECT \n  r.table_name,\n  r.raw_count,\n  w.workspace_count,\n  r.raw_count - w.workspace_count AS count_difference,\n  CASE \n    WHEN r.raw_count = w.workspace_count THEN '✅ PASS'\n    WHEN r.raw_count > w.workspace_count THEN '⚠️ RAW > WORKSPACE (Expected due to deduplication)'\n    ELSE '❌ FAIL - WORKSPACE > RAW (Unexpected)'\n  END AS validation_status,\n  ROUND((w.workspace_count::FLOAT / r.raw_count::FLOAT) * 100, 2) AS data_retention_percentage\nFROM raw_counts r\nJOIN workspace_counts w ON r.table_name = w.table_name\nORDER BY r.table_name;\n```\n\n\u003C/details>\n\n\n![Tableau des résultats de la requête](https://res.cloudinary.com/about-gitlab-com/image/upload/v1758030995/guicjhzwvrz3czwjs3xo.png)\n\n\nL'exécution de cette requête a montré :\n\n\n* **Aucune différence** dans le nombre de lignes après déduplication\n\n* **100% de rétention des données** sur toutes les tables\n\n* **La réussite de tous les tests**\n\n\n## Bilan : gain de temps considérable\n\n\n* **Approche traditionnelle :** 6-8 heures de codage manuel, tests et débogage\n\n* **Approche avec GitLab Duo :** 6-8 minutes de génération et temps de revue\n\n\nL'efficacité des équipes de développement est bien meilleure (de 6-8 heures à 6-8 minutes), et la qualité du code reste élevée.\n\n\n## Bonnes pratiques\n\n\nSur la base de cette expérience, voici nos recommandations clés :\n\n\n### Préparez vos métadonnées\n\n\n* Extrayez les structures complètes des tables avec les types de données et les contraintes.\n\n* Identifiez les clés primaires et les relations en amont.\n\n* Exportez des fichiers CSV d'intrant propres et bien formatés.\n\n\n**Remarque :** en connectant GitLab Duo via MCP à vos (méta)données, vous pourriez éviter cette étape manuelle.\n\n\n### Fournissez un contexte clair\n\n\n* Indiquez des merge requests existantes à titre d'exemple si possible.\n\n* Précisez vos normes de codage et guides de style.\n\n* Explicitez la structure des dossiers et les conventions de nommage.\n\n\n### Validez minutieusement\n\n\n* Créez toujours des requêtes de validation pour l'intégrité des données.\n\n* Testez localement avant de fusionner.\n\n* Exécutez votre [pipeline CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\") pour détecter tout problème.\n\n\n### Exploitez l'IA pour les tâches de suivi\n\n\n* Générez automatiquement des requêtes de test.\n\n* Créez des templates de documentation.\n\n* Construisez des scripts de validation.\n\n\n## Prochaines étapes\n\n\nCet article montre comment les outils de développement alimentés par l'IA comme GitLab Duo transforment également les workflows d'ingénierie des données. La capacité de générer des centaines de lignes de code prêtes pour la production en quelques minutes, avec tests complets, documentation et structure appropriée, représente un changement fondamental dans notre approche des tâches répétitives.\n\n\nEn exploitant l'IA pour gérer les aspects répétitifs de la création de modèles dbt, les Data Engineers peuvent se concentrer sur des activités à plus forte valeur ajoutée comme la stratégie de modélisation des données, l'optimisation des performances et l'implémentation de la logique métier.\n\n\n**Prêt à essayer par vous-même ?** Commencez avec un petit jeu de données, préparez soigneusement vos métadonnées et observez comment GitLab Duo transforme des heures de travail en seulement quelques minutes.\n\n\n> **[&rarr; Essayez GitLab Ultimate et GitLab Duo Enterprise gratuitement.](https://about.gitlab.com/fr-fr/free-trial/devsecops/?utm_medium=blog&utm_source=blog&utm_campaign=eg_emea_x_trial_x_fr_blog_fr)**\n\n\n## Pour aller plus loin\n\n\n* [GitLab 18.3 : expansion de l'orchestration IA dans l'ingénierie logicielle](https://about.gitlab.com/fr-fr/blog/gitlab-18-3-expanding-ai-orchestration-in-software-engineering/)\n\n* [GitLab Duo Agent Platform (bêta) : votre orchestration IA nouvelle génération](https://about.gitlab.com/fr-fr/blog/gitlab-duo-agent-platform-public-beta/)\n",{"featured":6,"template":24,"slug":25},"BlogPost","how-gitlab-duo-agent-platform-transforms-dataops","content:fr-fr:blog:how-gitlab-duo-agent-platform-transforms-dataops.yml","yaml","How Gitlab Duo Agent Platform Transforms Dataops","content","fr-fr/blog/how-gitlab-duo-agent-platform-transforms-dataops.yml","fr-fr/blog/how-gitlab-duo-agent-platform-transforms-dataops","yml",{"_path":34,"_dir":35,"_draft":6,"_partial":6,"_locale":7,"data":36,"_id":448,"_type":27,"title":449,"_source":29,"_file":450,"_stem":451,"_extension":32},"/shared/fr-fr/main-navigation","fr-fr",{"logo":37,"freeTrial":42,"sales":47,"login":52,"items":57,"search":389,"minimal":425,"duo":439},{"config":38},{"href":39,"dataGaName":40,"dataGaLocation":41},"/fr-fr/","gitlab logo","header",{"text":43,"config":44},"Commencer un essai gratuit",{"href":45,"dataGaName":46,"dataGaLocation":41},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":48,"config":49},"Contacter l'équipe commerciale",{"href":50,"dataGaName":51,"dataGaLocation":41},"/fr-fr/sales/","sales",{"text":53,"config":54},"Connexion",{"href":55,"dataGaName":56,"dataGaLocation":41},"https://gitlab.com/users/sign_in/","sign in",[58,102,200,205,310,370],{"text":59,"config":60,"cards":62,"footer":85},"Plateforme",{"dataNavLevelOne":61},"platform",[63,69,77],{"title":59,"description":64,"link":65},"La plateforme DevSecOps alimentée par l'IA la plus complète",{"text":66,"config":67},"Découvrir notre plateforme",{"href":68,"dataGaName":61,"dataGaLocation":41},"/fr-fr/platform/",{"title":70,"description":71,"link":72},"GitLab Duo (IA)","Créez des logiciels plus rapidement en tirant parti de l'IA à chaque étape du développement",{"text":73,"config":74},"Découvrez GitLab Duo",{"href":75,"dataGaName":76,"dataGaLocation":41},"/fr-fr/gitlab-duo/","gitlab duo ai",{"title":78,"description":79,"link":80},"Choisir GitLab","10 raisons pour lesquelles les entreprises choisissent GitLab",{"text":81,"config":82},"En savoir plus",{"href":83,"dataGaName":84,"dataGaLocation":41},"/fr-fr/why-gitlab/","why gitlab",{"title":86,"items":87},"Démarrer avec",[88,93,98],{"text":89,"config":90},"Ingénierie de plateforme",{"href":91,"dataGaName":92,"dataGaLocation":41},"/fr-fr/solutions/platform-engineering/","platform engineering",{"text":94,"config":95},"Expérience développeur",{"href":96,"dataGaName":97,"dataGaLocation":41},"/fr-fr/developer-experience/","Developer experience",{"text":99,"config":100},"MLOps",{"href":101,"dataGaName":99,"dataGaLocation":41},"/fr-fr/topics/devops/the-role-of-ai-in-devops/",{"text":103,"left":104,"config":105,"link":107,"lists":111,"footer":182},"Produit",true,{"dataNavLevelOne":106},"solutions",{"text":108,"config":109},"Voir toutes les solutions",{"href":110,"dataGaName":106,"dataGaLocation":41},"/fr-fr/solutions/",[112,138,160],{"title":113,"description":114,"link":115,"items":120},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":116},{"icon":117,"href":118,"dataGaName":119,"dataGaLocation":41},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[121,125,129,134],{"text":122,"config":123},"CI/CD",{"href":124,"dataGaLocation":41,"dataGaName":122},"/fr-fr/solutions/continuous-integration/",{"text":126,"config":127},"Développement assisté par l'IA",{"href":75,"dataGaLocation":41,"dataGaName":128},"AI assisted development",{"text":130,"config":131},"Gestion du code source",{"href":132,"dataGaLocation":41,"dataGaName":133},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":135,"config":136},"Livraison de logiciels automatisée",{"href":118,"dataGaLocation":41,"dataGaName":137},"Automated software delivery",{"title":139,"description":140,"link":141,"items":146},"Securité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":142},{"href":143,"dataGaName":144,"dataGaLocation":41,"icon":145},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[147,151,156],{"text":148,"config":149},"Application Security Testing",{"href":143,"dataGaName":150,"dataGaLocation":41},"Application security testing",{"text":152,"config":153},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":154,"dataGaLocation":41,"dataGaName":155},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":157,"config":158},"Software Compliance",{"href":159,"dataGaName":157,"dataGaLocation":41},"/fr-fr/solutions/software-compliance/",{"title":161,"link":162,"items":167},"Mesures",{"config":163},{"icon":164,"href":165,"dataGaName":166,"dataGaLocation":41},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[168,172,177],{"text":169,"config":170},"Visibilité et mesures",{"href":165,"dataGaLocation":41,"dataGaName":171},"Visibility and Measurement",{"text":173,"config":174},"Gestion de la chaîne de valeur",{"href":175,"dataGaLocation":41,"dataGaName":176},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":178,"config":179},"Données d'analyse et informations clés",{"href":180,"dataGaLocation":41,"dataGaName":181},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":183,"items":184},"GitLab pour",[185,190,195],{"text":186,"config":187},"Entreprises",{"href":188,"dataGaLocation":41,"dataGaName":189},"/fr-fr/enterprise/","enterprise",{"text":191,"config":192},"PME",{"href":193,"dataGaLocation":41,"dataGaName":194},"/fr-fr/small-business/","small business",{"text":196,"config":197},"Secteur public",{"href":198,"dataGaLocation":41,"dataGaName":199},"/fr-fr/solutions/public-sector/","public sector",{"text":201,"config":202},"Tarifs",{"href":203,"dataGaName":204,"dataGaLocation":41,"dataNavLevelOne":204},"/fr-fr/pricing/","pricing",{"text":206,"config":207,"link":209,"lists":213,"feature":297},"Ressources",{"dataNavLevelOne":208},"resources",{"text":210,"config":211},"Afficher toutes les ressources",{"href":212,"dataGaName":208,"dataGaLocation":41},"/fr-fr/resources/",[214,247,269],{"title":215,"items":216},"Premiers pas",[217,222,227,232,237,242],{"text":218,"config":219},"Installation",{"href":220,"dataGaName":221,"dataGaLocation":41},"/fr-fr/install/","install",{"text":223,"config":224},"Guides de démarrage rapide",{"href":225,"dataGaName":226,"dataGaLocation":41},"/fr-fr/get-started/","quick setup checklists",{"text":228,"config":229},"Apprentissage",{"href":230,"dataGaLocation":41,"dataGaName":231},"https://university.gitlab.com/","learn",{"text":233,"config":234},"Documentation sur le produit",{"href":235,"dataGaName":236,"dataGaLocation":41},"https://docs.gitlab.com/","product documentation",{"text":238,"config":239},"Vidéos sur les bonnes pratiques",{"href":240,"dataGaName":241,"dataGaLocation":41},"/fr-fr/getting-started-videos/","best practice videos",{"text":243,"config":244},"Intégrations",{"href":245,"dataGaName":246,"dataGaLocation":41},"/fr-fr/integrations/","integrations",{"title":248,"items":249},"Découvrir",[250,255,259,264],{"text":251,"config":252},"Histoires de succès client",{"href":253,"dataGaName":254,"dataGaLocation":41},"/fr-fr/customers/","customer success stories",{"text":256,"config":257},"Blog",{"href":258,"dataGaName":5,"dataGaLocation":41},"/fr-fr/blog/",{"text":260,"config":261},"Travail à distance",{"href":262,"dataGaName":263,"dataGaLocation":41},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":265,"config":266},"TeamOps",{"href":267,"dataGaName":268,"dataGaLocation":41},"/fr-fr/teamops/","teamops",{"title":270,"items":271},"Connecter",[272,277,282,287,292],{"text":273,"config":274},"Services GitLab",{"href":275,"dataGaName":276,"dataGaLocation":41},"/fr-fr/services/","services",{"text":278,"config":279},"Communauté",{"href":280,"dataGaName":281,"dataGaLocation":41},"/community/","community",{"text":283,"config":284},"Forum",{"href":285,"dataGaName":286,"dataGaLocation":41},"https://forum.gitlab.com/","forum",{"text":288,"config":289},"Événements",{"href":290,"dataGaName":291,"dataGaLocation":41},"/events/","events",{"text":293,"config":294},"Partenaires",{"href":295,"dataGaName":296,"dataGaLocation":41},"/fr-fr/partners/","partners",{"backgroundColor":298,"textColor":299,"text":300,"image":301,"link":305},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":302,"config":303},"carte promo The Source",{"src":304},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":306,"config":307},"Lire les articles les plus récents",{"href":308,"dataGaName":309,"dataGaLocation":41},"/fr-fr/the-source/","the source",{"text":311,"config":312,"lists":314},"Société",{"dataNavLevelOne":313},"company",[315],{"items":316},[317,322,328,330,335,340,345,350,355,360,365],{"text":318,"config":319},"À propos",{"href":320,"dataGaName":321,"dataGaLocation":41},"/fr-fr/company/","about",{"text":323,"config":324,"footerGa":327},"Emplois",{"href":325,"dataGaName":326,"dataGaLocation":41},"/jobs/","jobs",{"dataGaName":326},{"text":288,"config":329},{"href":290,"dataGaName":291,"dataGaLocation":41},{"text":331,"config":332},"Leadership",{"href":333,"dataGaName":334,"dataGaLocation":41},"/company/team/e-group/","leadership",{"text":336,"config":337},"Équipe",{"href":338,"dataGaName":339,"dataGaLocation":41},"/company/team/","team",{"text":341,"config":342},"Manuel",{"href":343,"dataGaName":344,"dataGaLocation":41},"https://handbook.gitlab.com/","handbook",{"text":346,"config":347},"Relations avec les investisseurs",{"href":348,"dataGaName":349,"dataGaLocation":41},"https://ir.gitlab.com/","investor relations",{"text":351,"config":352},"Centre de confiance",{"href":353,"dataGaName":354,"dataGaLocation":41},"/fr-fr/security/","trust center",{"text":356,"config":357},"Centre pour la transparence de l'IA",{"href":358,"dataGaName":359,"dataGaLocation":41},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":361,"config":362},"Newsletter",{"href":363,"dataGaName":364,"dataGaLocation":41},"/company/contact/","newsletter",{"text":366,"config":367},"Presse",{"href":368,"dataGaName":369,"dataGaLocation":41},"/press/","press",{"text":371,"config":372,"lists":373},"Nous contacter",{"dataNavLevelOne":313},[374],{"items":375},[376,379,384],{"text":48,"config":377},{"href":50,"dataGaName":378,"dataGaLocation":41},"talk to sales",{"text":380,"config":381},"Aide",{"href":382,"dataGaName":383,"dataGaLocation":41},"/support/","get help",{"text":385,"config":386},"Portail clients GitLab",{"href":387,"dataGaName":388,"dataGaLocation":41},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":390,"login":391,"suggestions":398},"Fermer",{"text":392,"link":393},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":394,"config":395},"gitlab.com",{"href":55,"dataGaName":396,"dataGaLocation":397},"search login","search",{"text":399,"default":400},"Suggestions",[401,404,409,411,416,421],{"text":70,"config":402},{"href":75,"dataGaName":403,"dataGaLocation":397},"GitLab Duo (AI)",{"text":405,"config":406},"Suggestions de code (IA)",{"href":407,"dataGaName":408,"dataGaLocation":397},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":122,"config":410},{"href":124,"dataGaName":122,"dataGaLocation":397},{"text":412,"config":413},"GitLab sur AWS",{"href":414,"dataGaName":415,"dataGaLocation":397},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":417,"config":418},"GitLab sur Google Cloud ",{"href":419,"dataGaName":420,"dataGaLocation":397},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":422,"config":423},"Pourquoi utiliser GitLab ?",{"href":83,"dataGaName":424,"dataGaLocation":397},"Why GitLab?",{"freeTrial":426,"mobileIcon":431,"desktopIcon":436},{"text":427,"config":428},"Commencer votre essai gratuit",{"href":429,"dataGaName":46,"dataGaLocation":430},"https://gitlab.com/-/trials/new/","nav",{"altText":432,"config":433},"Icône GitLab",{"src":434,"dataGaName":435,"dataGaLocation":430},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":432,"config":437},{"src":438,"dataGaName":435,"dataGaLocation":430},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":440,"mobileIcon":444,"desktopIcon":446},{"text":441,"config":442},"En savoir plus sur GitLab Duo",{"href":75,"dataGaName":443,"dataGaLocation":430},"gitlab duo",{"altText":432,"config":445},{"src":434,"dataGaName":435,"dataGaLocation":430},{"altText":432,"config":447},{"src":438,"dataGaName":435,"dataGaLocation":430},"content:shared:fr-fr:main-navigation.yml","Main Navigation","shared/fr-fr/main-navigation.yml","shared/fr-fr/main-navigation",{"_path":453,"_dir":35,"_draft":6,"_partial":6,"_locale":7,"title":454,"titleMobile":454,"button":455,"config":460,"_id":462,"_type":27,"_source":29,"_file":463,"_stem":464,"_extension":32},"/shared/fr-fr/banner","GitLab Duo Agent Platform est maintenant disponible en version bêta publique !",{"text":456,"config":457},"Essayer la version bêta",{"href":458,"dataGaName":459,"dataGaLocation":41},"/fr-fr/gitlab-duo/agent-platform/","duo banner",{"layout":461},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":466,"_dir":35,"_draft":6,"_partial":6,"_locale":7,"data":467,"_id":672,"_type":27,"title":673,"_source":29,"_file":674,"_stem":675,"_extension":32},"/shared/fr-fr/main-footer",{"text":468,"source":469,"edit":475,"contribute":480,"config":485,"items":490,"minimal":663},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":470,"config":471},"Afficher le code source de la page",{"href":472,"dataGaName":473,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":476,"config":477},"Modifier cette page",{"href":478,"dataGaName":479,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":481,"config":482},"Veuillez contribuer",{"href":483,"dataGaName":484,"dataGaLocation":474},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":486,"facebook":487,"youtube":488,"linkedin":489},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[491,514,568,600,634],{"title":59,"links":492,"subMenu":497},[493],{"text":494,"config":495},"Plateforme DevSecOps",{"href":68,"dataGaName":496,"dataGaLocation":474},"devsecops platform",[498],{"title":201,"links":499},[500,504,509],{"text":501,"config":502},"Voir les forfaits",{"href":203,"dataGaName":503,"dataGaLocation":474},"view plans",{"text":505,"config":506},"Pourquoi choisir GitLab Premium ?",{"href":507,"dataGaName":508,"dataGaLocation":474},"/fr-fr/pricing/premium/","why premium",{"text":510,"config":511},"Pourquoi choisir GitLab Ultimate ?",{"href":512,"dataGaName":513,"dataGaLocation":474},"/fr-fr/pricing/ultimate/","why ultimate",{"title":515,"links":516},"Solutions",[517,522,525,527,532,537,541,544,547,552,554,556,558,563],{"text":518,"config":519},"Transformation digitale",{"href":520,"dataGaName":521,"dataGaLocation":474},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":523,"config":524},"Sécurité et conformité",{"href":143,"dataGaName":150,"dataGaLocation":474},{"text":135,"config":526},{"href":118,"dataGaName":119,"dataGaLocation":474},{"text":528,"config":529},"Développement agile",{"href":530,"dataGaName":531,"dataGaLocation":474},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":533,"config":534},"Transformation cloud",{"href":535,"dataGaName":536,"dataGaLocation":474},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":538,"config":539},"SCM",{"href":132,"dataGaName":540,"dataGaLocation":474},"source code management",{"text":122,"config":542},{"href":124,"dataGaName":543,"dataGaLocation":474},"continuous integration & delivery",{"text":173,"config":545},{"href":175,"dataGaName":546,"dataGaLocation":474},"value stream management",{"text":548,"config":549},"GitOps",{"href":550,"dataGaName":551,"dataGaLocation":474},"/fr-fr/solutions/gitops/","gitops",{"text":186,"config":553},{"href":188,"dataGaName":189,"dataGaLocation":474},{"text":191,"config":555},{"href":193,"dataGaName":194,"dataGaLocation":474},{"text":196,"config":557},{"href":198,"dataGaName":199,"dataGaLocation":474},{"text":559,"config":560},"Formation",{"href":561,"dataGaName":562,"dataGaLocation":474},"/fr-fr/solutions/education/","education",{"text":564,"config":565},"Services financiers",{"href":566,"dataGaName":567,"dataGaLocation":474},"/fr-fr/solutions/finance/","financial services",{"title":206,"links":569},[570,572,574,576,579,581,584,586,588,590,592,594,596,598],{"text":218,"config":571},{"href":220,"dataGaName":221,"dataGaLocation":474},{"text":223,"config":573},{"href":225,"dataGaName":226,"dataGaLocation":474},{"text":228,"config":575},{"href":230,"dataGaName":231,"dataGaLocation":474},{"text":233,"config":577},{"href":235,"dataGaName":578,"dataGaLocation":474},"docs",{"text":256,"config":580},{"href":258,"dataGaName":5},{"text":582,"config":583},"Histoires de réussite client",{"href":253,"dataGaLocation":474},{"text":251,"config":585},{"href":253,"dataGaName":254,"dataGaLocation":474},{"text":260,"config":587},{"href":262,"dataGaName":263,"dataGaLocation":474},{"text":273,"config":589},{"href":275,"dataGaName":276,"dataGaLocation":474},{"text":265,"config":591},{"href":267,"dataGaName":268,"dataGaLocation":474},{"text":278,"config":593},{"href":280,"dataGaName":281,"dataGaLocation":474},{"text":283,"config":595},{"href":285,"dataGaName":286,"dataGaLocation":474},{"text":288,"config":597},{"href":290,"dataGaName":291,"dataGaLocation":474},{"text":293,"config":599},{"href":295,"dataGaName":296,"dataGaLocation":474},{"title":311,"links":601},[602,604,606,608,610,612,614,618,623,625,627,629],{"text":318,"config":603},{"href":320,"dataGaName":313,"dataGaLocation":474},{"text":323,"config":605},{"href":325,"dataGaName":326,"dataGaLocation":474},{"text":331,"config":607},{"href":333,"dataGaName":334,"dataGaLocation":474},{"text":336,"config":609},{"href":338,"dataGaName":339,"dataGaLocation":474},{"text":341,"config":611},{"href":343,"dataGaName":344,"dataGaLocation":474},{"text":346,"config":613},{"href":348,"dataGaName":349,"dataGaLocation":474},{"text":615,"config":616},"Sustainability",{"href":617,"dataGaName":615,"dataGaLocation":474},"/sustainability/",{"text":619,"config":620},"Diversité, inclusion et appartenance (DIB)",{"href":621,"dataGaName":622,"dataGaLocation":474},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":351,"config":624},{"href":353,"dataGaName":354,"dataGaLocation":474},{"text":361,"config":626},{"href":363,"dataGaName":364,"dataGaLocation":474},{"text":366,"config":628},{"href":368,"dataGaName":369,"dataGaLocation":474},{"text":630,"config":631},"Déclaration de transparence sur l'esclavage moderne",{"href":632,"dataGaName":633,"dataGaLocation":474},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":371,"links":635},[636,639,641,643,648,653,658],{"text":637,"config":638},"Échanger avec un expert",{"href":50,"dataGaName":51,"dataGaLocation":474},{"text":380,"config":640},{"href":382,"dataGaName":383,"dataGaLocation":474},{"text":385,"config":642},{"href":387,"dataGaName":388,"dataGaLocation":474},{"text":644,"config":645},"Statut",{"href":646,"dataGaName":647,"dataGaLocation":474},"https://status.gitlab.com/","status",{"text":649,"config":650},"Conditions d'utilisation",{"href":651,"dataGaName":652},"/terms/","terms of use",{"text":654,"config":655},"Déclaration de confidentialité",{"href":656,"dataGaName":657,"dataGaLocation":474},"/fr-fr/privacy/","privacy statement",{"text":659,"config":660},"Préférences en matière de cookies",{"dataGaName":661,"dataGaLocation":474,"id":662,"isOneTrustButton":104},"cookie preferences","ot-sdk-btn",{"items":664},[665,667,670],{"text":649,"config":666},{"href":651,"dataGaName":652,"dataGaLocation":474},{"text":668,"config":669},"Politique de confidentialité",{"href":656,"dataGaName":657,"dataGaLocation":474},{"text":659,"config":671},{"dataGaName":661,"dataGaLocation":474,"id":662,"isOneTrustButton":104},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",[677],{"_path":678,"_dir":679,"_draft":6,"_partial":6,"_locale":7,"content":680,"config":683,"_id":686,"_type":27,"title":687,"_source":29,"_file":688,"_stem":689,"_extension":32},"/en-us/blog/authors/dennis-van-rooijen","authors",{"name":21,"config":681},{"headshot":682},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758031391/muvwg1sxetzekmuhqdql.png",{"template":684,"gitlabHandle":685},"BlogAuthor","dvanrooijen2","content:en-us:blog:authors:dennis-van-rooijen.yml","Dennis Van Rooijen","en-us/blog/authors/dennis-van-rooijen.yml","en-us/blog/authors/dennis-van-rooijen",{"_path":691,"_dir":35,"_draft":6,"_partial":6,"_locale":7,"header":692,"eyebrow":693,"blurb":694,"button":695,"secondaryButton":699,"_id":701,"_type":27,"title":702,"_source":29,"_file":703,"_stem":704,"_extension":32},"/shared/fr-fr/next-steps","Commencez à livrer des logiciels de meilleurs qualité plus rapidement","Plus de 50 % des entreprises du classement Fortune 100 font confiance à GitLab","Découvrez comment la plateforme DevSecOps intelligente\n\n\npeut aider votre équipe.\n",{"text":43,"config":696},{"href":697,"dataGaName":46,"dataGaLocation":698},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":48,"config":700},{"href":50,"dataGaName":51,"dataGaLocation":698},"content:shared:fr-fr:next-steps.yml","Next Steps","shared/fr-fr/next-steps.yml","shared/fr-fr/next-steps",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":706,"content":708,"config":711,"_id":26,"_type":27,"title":28,"_source":29,"_file":30,"_stem":31,"_extension":32},{"config":707,"ogImage":10,"title":11,"description":12},{"noIndex":6},{"date":14,"heroImage":10,"title":11,"description":12,"category":15,"tags":709,"authors":710,"body":22},[17,18,19],[21],{"featured":6,"template":24,"slug":25},1761814455771]