[{"data":1,"prerenderedAt":720},["ShallowReactive",2],{"/fr-fr/blog/using-ansible-and-gitlab-as-infrastructure-for-code/":3,"navigation-fr-fr":39,"banner-fr-fr":458,"footer-fr-fr":470,"George Kichukov-Salahddine Aberkan":682,"next-steps-fr-fr":705},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":29,"_id":32,"_type":33,"title":34,"_source":35,"_file":36,"_stem":37,"_extension":38},"/fr-fr/blog/using-ansible-and-gitlab-as-infrastructure-for-code","blog",false,"",{"ogTitle":9,"schema":10,"ogImage":11,"ogDescription":12,"ogSiteName":13,"noIndex":6,"ogType":14,"ogUrl":15,"title":9,"canonicalUrls":15,"description":12},"Créez des pipelines IaC évolutifs avec GitLab","\n                        { \"@context\": \"https://schema.org\", \"@type\": \"Article\", \"headline\": \"How to use GitLab and Ansible to create infrastructure as code\", \"author\": [{\"@type\":\"Person\",\"name\":\"Brad Downey\"},{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}], \"datePublished\": \"2019-07-01\", }","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,w_820,h_500,c_lfill/v1746211002/zlet4rmfg2z0j6lg16mc.png","Automatisez la gestion de votre infrastructure avec des pipelines CI/CD sécurisés, un scan de sécurité intégré, à l’aide de GitLab, Terraform/OpenTofu, Ansible.","https://about.gitlab.com","article","https://about.gitlab.com/blog/using-ansible-and-gitlab-as-infrastructure-for-code",{"heroImage":11,"body":17,"authors":18,"updatedDate":21,"date":22,"title":23,"tags":24,"description":27,"category":28},"Les outils d'Infrastructure as Code (IaC), tels que TerraForm/OpenTofu, ou de gestion des configurations, tels qu'Ansible, jouent un rôle clé dans de nombreux workflows critiques. Ces projets commencent parfois par de simples scripts d'automatisations, sans nécessairement suivre les bonnes pratiques de développement logiciel ni répondre aux contrôles réglementaires exigés pour les applications logicielles d'entreprise.\n\nSouvent développées par des ingénieurs système ou des ingénieurs d'infrastructure, ces automatisations sont mises en place sans réelle expertise des approches [DevOps](https://about.gitlab.com/fr-fr/topics/devops/ \"Qu'est-ce que le DevOps ?\"), DevSecOps, [CI/CD](https://about.gitlab.com/topics/ci-cd/ \"Qu'est-ce que le CI/CD ?\") et d'automatisation des tests. Dans les grandes entreprises employant de nombreuses équipes d'ingénierie parfois cloisonnées, la situation est encore plus compliquée.\n\nChez GitLab, nous maîtrisons l'[approche DevSecOps](https://about.gitlab.com/fr-fr/topics/devsecops/ \"Qu'est-ce que le DevSecOps ?\") depuis plus de 10 ans et utilisons notre plateforme DevSecOps unifiée en interne pour automatiser des tâches critiques à l'échelle de l'entreprise. Nous accompagnons des milliers de clients qui s'appuient sur notre plateforme GitLab pour une variété de processus : Infrastructure as Code (IaC), automatisation, gestion cloud, [ingénierie de plateforme](https://about.gitlab.com/fr-fr/the-source/platform/driving-business-results-with-platform-engineering/ \"Qu'est-ce que l’ingénierie de plateforme ?\") et bien d'autres encore.\n\nDécouvrez dans cet article les principales fonctionnalités pour transformer vos puissantes automatisations en pipelines de livraison de logiciels évolutifs et auditables.\n\n![Liste d'automatisation](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433380/oipm6tq8qutoh1ctredd.png)\n\n## Mise en œuvre\n\n[Ce projet de démonstration](https://gitlab.com/gl-demo-ultimate-saberkan/public/ansible-demo) illustre un workflow DevOps complet qui combine la puissance d'OpenTofu avec les pratiques modernes d'Ansible, le tout orchestré via les [pipelines CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\") de GitLab. Il met en scène le provisionnement d'un environnement de test AWS à l'aide de composants OpenTofu intégrés à GitLab, suivi du déploiement d'un serveur web Tomcat à l'aide de la version la plus récente d'Ansible, avec exécution dans un environnement personnalisé et prise en charge des collections.\n\nLe projet tire parti de nombreuses fonctionnalités de GitLab :\n\n* Création et stockage d'environnements d'exécution Ansible personnalisés dans le [registre de conteneurs de GitLab](https://docs.gitlab.com/user/packages/container_registry/)\n* [Scan de sécurité des scripts d'IaC et des conteneurs permettant de détecter des vulnérabilités](https://docs.gitlab.com/user/application_security/iac_scanning/)\n* Intégration du [linting Ansible avec GitLab Code Quality](https://docs.gitlab.com/user/application_security/iac_scanning/)\n* Stockage des binaires Tomcat dans le [dépôt de paquets génériques](https://docs.gitlab.com/user/packages/generic_packages/)\n* Utilisation des [variables d'environnement CI/CD à des fins de configuration](https://docs.gitlab.com/ci/variables/)\n\nL'ensemble du workflow est automatisé par le biais d'un [pipeline GitLab](https://docs.gitlab.com/ci/pipelines/) qui gère toutes les étapes, du provisionnement de l'infrastructure au déploiement des applications, en passant par les tests de sécurité.\n\n![ Workflow automatisé via un pipeline GitLab ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433380/giatmolwn9inusi4cev2.png)\n\n### Provisionnement de l'environnement avec OpenTofu\n\nLe projet commence par le provisionnement d'un environnement de test AWS à l'aide d'OpenTofu, en s'appuyant sur l'intégration native des [composants OpenTofu de GitLab](https://docs.gitlab.com/user/infrastructure/iac/), qui rationalisent le processus de provisionnement de l'infrastructure. Le pipeline inclut des étapes de validation, de planification et d'application qui garantissent un déploiement approprié de l'infrastructure tout en maintenant les bonnes pratiques IaC de GitLab.\n\nCe projet tire parti des capacités de l'[outil de gestion des fichiers d'état de Terraform intégré à GitLab](https://docs.gitlab.com/user/infrastructure/iac/terraform_state/) ainsi que du [Terraform Module Registry](https://docs.gitlab.com/user/packages/terraform_module_registry/), tous deux compatibles avec OpenTofu et HashiCorp Terraform. Il est également possible d'utiliser les composants OpenTofu de GitLab avec HashiCorp Terraform en procédant à une [légère personnalisation](https://gitlab.com/components/opentofu#can-i-use-this-component-with-terraform) : vous devez créer votre propre image incluant un script nommé `gitlab-tofu` pour maintenir sa compatibilité avec les jobs de composants. Vous pouvez ensuite remplacer les commandes `tofu` par les commandes `Terraform` équivalentes.\n\nL'exemple de composant « OpenTofu Module Release » montre comment créer un module Terraform et le stocker dans Terraform Module Registry dans GitLab. Ce module est ensuite importé dans le fichier `provision_lab.tf` directement depuis GitLab pour déployer l'environnement de test sur AWS. Ensuite, il génère un fichier d'inventaire contenant l'adresse IP publique de l'instance provisionnée, qui peut être utilisée dans les étapes de gestion des configurations avec Ansible.\n\n```\n# From .gitlab-ci.yml\n - component: gitlab.com/components/opentofu/module-release@1.1.0\n   inputs:\n     root_dir: tofu\n     as: 🔍 tofu-module-release\n     stage: 🏗️ build-tofu-module\n     module_version: 0.0.1\n     module_system: aws\n     module_name: aws-lab\n     root_dir: tofu/modules/ansible-demo/aws-lab\n     rules:\n       - if: \"$CI_COMMIT_BRANCH\"\n         when: manual\n```\n\n```\n# From provision_lab.tf\nmodule \"aws-lab\" {\n  source = \"https://gitlab.com/api/v4/projects/67604719/packages/terraform/modules/aws-lab/aws/0.0.1\"\n}\n```\n\nLes composants de validation, de planification et de déploiement sont configurés avec le paramètre `**auto_define_backend: true**`. Ils s'intègrent automatiquement au backend de stockage d’état Terraform intégré à GitLab et éliminent le besoin de configuration manuelle du backend ou de solutions de stockage d'état externes telles que des compartiments S3.\n\n```\n# From gitlab-ci.yml\n- component: gitlab.com/components/opentofu/apply@0.55.0\n  inputs:\n    version: 0.55.0\n    opentofu_version: 1.8.8\n    root_dir: tofu\n    state_name: demo\n    as: ✅ tofu-apply\n    stage: 🏗️ provision-lab\n    auto_define_backend: true\n    rules:\n      - if: \"$CI_COMMIT_BRANCH\"\n        when: manual\n```\n\n![Les composants de validation, de planification et de déploiement sont configurés avec le paramètre `auto_define_backend: true`](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433380/giatmolwn9inusi4cev2.png)\n\nLa configuration de l'infrastructure crée une instance EC2 CentOS Stream 9 avec des groupes de sécurité appropriés pour autoriser l'accès SSH depuis les runners GitLab et l'accès HTTP au serveur Tomcat.\n\nL'accès SSH et la configuration HTTP sont configurés par le biais des [variables d'environnement GitLab CI/CD](https://docs.gitlab.com/ci/variables/#define-a-cicd-variable-in-the-ui).\n\n![Accès SSH et configuration HTTP](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433381/cmqtzg6ahz8ua5w8ybgs.png)\n\nPour un accès sécurisé au cloud, le projet met en œuvre [l'intégration OpenID Connect de GitLab](https://docs.gitlab.com/ci/cloud_services/aws/) avec AWS, en utilisant des identifiants de connexion temporaires via AWS Security Token Service (STS) :\n\n```\n# From .gitlab-ci.yml\n.tofu_aws_setup:\n id_tokens:\n   OIDC_TOKEN:\n     aud: https://gitlab.com\n before_script:\n   - echo \"${OIDC_TOKEN}\" > /tmp/web_identity_token\n   - export AWS_PROFILE=\"\"\n   - export AWS_ROLE_ARN=\"${AWS_ROLE_ARN}\"\n   - export AWS_WEB_IDENTITY_TOKEN_FILE=\"/tmp/web_identity_token\"\n```\n\n### Création de l'environnement d'exécution Ansible\n\nLes déploiements modernes avec Ansible reposent largement sur l'utilisation d'[environnements d'exécution](https://docs.ansible.com/ansible/latest/getting_started_ee/index.html) : il s'agit de versions conteneurisées qui encapsulent Ansible avec toutes ses dépendances, y compris les rôles et les collections préinstallés nécessaires. Dans ce projet, un environnement d'exécution personnalisé est créé, basé sur Fedora 39, qui inclut ansible-core, ansible-runner ainsi que des collections spécifiques, telle que ansible.posix, requise dans cet exemple pour configurer le pare-feu et SELinux.\n\nLes rôles et collections tiers de ce projet sont téléchargés en mode natif à partir du dépôt communautaire Ansible Galaxy. Cette approche s'appuie sur l'écosystème de contenu Ansible réutilisable de la communauté, comme le montre la configuration de l'environnement d'exécution. Bien que cette démonstration utilise des ressources Ansible de la communauté, cette mise en œuvre de pipeline est entièrement compatible avec Red Hat Ansible Automation Platform. La structure du pipeline reste identique ; seules les sources de contenu changent. Ainsi, les entreprises qui utilisent la version Enterprise peuvent simplement rediriger leurs sources de contenu d'automatisation vers leur Automation Hub privé au lieu du dépôt Ansible Galaxy par défaut issu de la communauté. Selon la documentation officielle d'Ansible, vous pouvez réaliser cette opération en [configurant votre serveur Automation Hub privé et votre token d'accès dans le fichier ansible.cfg](https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/1.2/html/getting_started_with_red_hat_ansible_automation_hub/proc-configure-automation-hub-server#proc-configure-automation-hub-server).\n\n```\n# From execution-environment.yml\n---\nversion: 3\n\nimages:\n  base_image:\n    name: quay.io/fedora/fedora:39\n\ndependencies:\n  ansible_core:\n    package_pip: ansible-core\n  ansible_runner:\n    package_pip: ansible-runner\n  system:\n    - openssh-clients\n    - sshpass\n  galaxy:\n    collections:\n    - name: ansible.posix\n      version: \">=2.0.0\"\n```\n\n![Environnement d'exécution faisant l'objet d'un push vers le registre de conteneurs de GitLab ](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433384/dh1o2ojjmb04ru4tfr9k.png)\n\nL'environnement d'exécution est défini dans un fichier YAML, généré à l'aide d'ansible-builder, puis faisant l'objet d'un push vers le [registre de conteneurs de GitLab](https://docs.gitlab.com/user/packages/container_registry/). Cette approche garantit des environnements d'exécution cohérents d'un système à l'autre, tout en simplifiant la gestion des dépendances.\n\n```\n# From gitlab-ci.yml\n🔨 ansible-build-ee:\n  stage: 📦 ansible-build-ee\n  image: docker:24.0.5\n  needs: []\n  services:\n    - docker:24.0.5-dind\n  before_script:\n    - apk add --no-cache python3 py3-pip\n    - pip install ansible-builder\n    - cd ansible/execution-environment\n  script:\n    - ansible-builder build -t ${EE_IMAGE_NAME}:${EE_IMAGE_TAG} --container-runtime docker\n    - docker tag ${EE_IMAGE_NAME}:${EE_IMAGE_TAG} ${CI_REGISTRY_IMAGE}/${EE_IMAGE_NAME}:${EE_IMAGE_TAG}\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - docker push ${CI_REGISTRY_IMAGE}/${EE_IMAGE_NAME}:${EE_IMAGE_TAG}\n```\n\n### Déploiement de Tomcat avec Ansible\n\nUne fois l'infrastructure provisionnée et l'environnement d'exécution construit, le pipeline déploie Tomcat à l'aide d'[Ansible Navigator](https://ansible.readthedocs.io/projects/navigator/). L'environnement d'exécution créé à l'étape précédente est utilisé comme image pour le job de déploiement dans le pipeline GitLab.\n\n```\n# From gitlab-ci.yml\n🚀 ansible-deploy:\n  stage: 🚀 ansible-deploy\n  image: ${CI_REGISTRY_IMAGE}/${EE_IMAGE_NAME}:${EE_IMAGE_TAG}\n  needs:\n    - ✅ tofu-apply\n  extends: [.ssh_private_key_setup, .default_rules]\n  script:\n    - ansible-navigator run ansible/playbook.yml \n      -i ansible/inventory/hosts.ini\n      --execution-environment false\n      --mode stdout \n      --log-level debug\n```\n\nCe processus récupère le paquet applicatif depuis le [dépôt de paquets générique de GitLab](https://docs.gitlab.com/user/packages/generic_packages/), configure les utilisateurs et les autorisations système, et définit Tomcat comme service systemd.\n\n```\n# From playbook.yml\n---\n- name: Deploy Tomcat Server\n  hosts: all\n  become: true\n  roles:\n      - role: tomcat\n  \n  vars:\n    # Tomcat package and installation\n    tomcat_package: \"https://gitlab.com/api/v4/projects/67604719/packages/generic/apache-tomcat/10.1.39/apache-tomcat-10.1.39.tar.gz\"\n    tomcat_install_dir: \"/opt/tomcat\"\n    java_package: \"java-17-openjdk-devel\"\n```\n\n![Registre de paquets de GitLab](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433381/mynak8i2k7ms9vhdijqg.png)\n\n### Scan de sécurité et qualité du code\n\nLa sécurité est intégrée tout au long du pipeline avec plusieurs outils de scan. Ce projet utilise le [scanner SAST IaC intégré de GitLab](https://docs.gitlab.com/user/application_security/iac_scanning/) pour détecter les vulnérabilités dans le code Terraform et Ansible. L'[analyse des conteneurs](https://docs.gitlab.com/user/application_security/container_scanning/) est appliquée à l'image de l'environnement d'exécution pour identifier tout problème de sécurité et générer une [nomenclature logicielle (SBOM)](https://about.gitlab.com/fr-fr/blog/the-ultimate-guide-to-sboms/ \"Qu'est-ce qu'une nomenclature logicielle ?\").\n\n```\n# From gitlab-ci.yml\ninclude: \n- template: Jobs/SAST-IaC.gitlab-ci.yml \n- template: Jobs/Container-Scanning.gitlab-ci.yml\n```\n\n![La sécurité est intégrée à chaque étape du pipeline avec plusieurs outils de scanning](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433386/e6ejckcv5kdyhhosej2f.png)\n\nDe plus, le projet utilise Ansible Linter et ses résultats sont intégrés à [GitLab Code Quality](https://docs.gitlab.com/ci/testing/code_quality/#import-code-quality-results-from-a-cicd-job). Cette intégration produit des rapports qui sont affichés directement dans l'interface de GitLab, ce qui facilite l'identification et la résolution des anomalies.\n\n```\n# From gitlab-ci.yml\n🔍 ansible-lint:\n  stage: 🚀 ansible-deploy\n  image: ${CI_REGISTRY_IMAGE}/${EE_IMAGE_NAME}:${EE_IMAGE_TAG}\n  needs: []\n  script:\n    - ansible-lint ansible/playbook.yml -f codeclimate | python3 -m json.tool | tee gl-code-quality-report.json || true\n  artifacts:\n    reports:\n      codequality:\n        - gl-code-quality-report.json\n```\n\n![Le projet utilise Ansible Linter et ses résultats sont intégrés à GitLab Code Quality](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433380/gsfpaldra4rmtkseaudo.png)\n\n### Vérification de l'état du déploiement\n\nAprès le déploiement, le pipeline effectue des vérifications de l'état pour s'assurer que le serveur Tomcat fonctionne correctement. Ce job tente d'établir une connexion au port HTTP du serveur et vérifie qu'il renvoie une réponse confirmant que le service est bien actif. Cette étape garantit que le déploiement s'est correctement terminé et que l'application est accessible.\n\nVous pouvez également tester l'accès de votre navigateur à l'instance provisionnée par Tomcat en utilisant l'adresse IP publique de l'instance provisionnée EC2.\n\n![Vérification de l'état d'un job](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750433385/uksdkjryydxhu94v1naj.png)\n\n## Destruction de l'environnement de test\n\nDernière étape du pipeline : le processus de nettoyage détruit l'environnement de test. Cette opération est mise en œuvre à l'aide du composant de destruction OpenTofu, qui garantit que toutes les ressources créées au cours de l'étape de provisionnement sont correctement supprimées.\n\n## Récapitulatif\n\nGitLab offre une plateforme DevSecOps unifiée et un framework pour gérer, à l'échelle de l'entreprise, les pratiques d'automatisation critiques telles que la gestion des configurations et de l'IaC (Infrastructure as Code). Ce framework inclut le [contrôle de version](https://about.gitlab.com/fr-fr/topics/version-control/ \"Qu'est-ce que le contrôle de version ?\"), la planification de projet, la gestion des tickets, la collaboration entre les équipes, les pipelines CI/CD, la gestion du paquet de binaires et du registre de conteneurs, le scan de sécurité et de nombreuses autres fonctionnalités utiles. Il permet également de renforcer la gouvernance grâce à des contrôles intégrés dans les processus. Si vous cherchez à développer vos pratiques cloud (qu’il s’agisse d’un cloud privé ou public) ou plus généralement, de tout workflow d'automatisation en libre-service doté de règles de gouvernance, envisagez d'utiliser GitLab, TerraForm et Ansible comme les trois piliers d'une plateforme d'automatisation à la fois évolutive et conforme aux exigences de gouvernance.\n\n> Lancez-vous avec un [essai gratuit de 60 jours de GitLab Ultimate](http://bout.gitlab.com/free-trial/). Inscrivez-vous dès aujourd'hui !",[19,20],"George Kichukov","Salahddine Aberkan","2025-07-17","2019-07-01","GitLab DevSecOps : des pipelines IaC au service de votre croissance",[25,26],"demo","CI/CD","Découvrez comment automatiser la gestion de votre infrastructure pour accompagner la croissance de votre entreprise grâce à des pipelines CI/CD sécurisés et un scan de sécurité intégré, à l'aide de GitLab, Terraform/OpenTofu et Ansible.","engineering",{"slug":30,"featured":6,"template":31},"using-ansible-and-gitlab-as-infrastructure-for-code","BlogPost","content:fr-fr:blog:using-ansible-and-gitlab-as-infrastructure-for-code.yml","yaml","Using Ansible And Gitlab As Infrastructure For Code","content","fr-fr/blog/using-ansible-and-gitlab-as-infrastructure-for-code.yml","fr-fr/blog/using-ansible-and-gitlab-as-infrastructure-for-code","yml",{"_path":40,"_dir":41,"_draft":6,"_partial":6,"_locale":7,"data":42,"_id":454,"_type":33,"title":455,"_source":35,"_file":456,"_stem":457,"_extension":38},"/shared/fr-fr/main-navigation","fr-fr",{"logo":43,"freeTrial":48,"sales":53,"login":58,"items":63,"search":395,"minimal":431,"duo":445},{"config":44},{"href":45,"dataGaName":46,"dataGaLocation":47},"/fr-fr/","gitlab logo","header",{"text":49,"config":50},"Commencer un essai gratuit",{"href":51,"dataGaName":52,"dataGaLocation":47},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":54,"config":55},"Contacter l'équipe commerciale",{"href":56,"dataGaName":57,"dataGaLocation":47},"/fr-fr/sales/","sales",{"text":59,"config":60},"Connexion",{"href":61,"dataGaName":62,"dataGaLocation":47},"https://gitlab.com/users/sign_in/","sign in",[64,108,206,211,316,376],{"text":65,"config":66,"cards":68,"footer":91},"Plateforme",{"dataNavLevelOne":67},"platform",[69,75,83],{"title":65,"description":70,"link":71},"La plateforme DevSecOps alimentée par l'IA la plus complète",{"text":72,"config":73},"Découvrir notre plateforme",{"href":74,"dataGaName":67,"dataGaLocation":47},"/fr-fr/platform/",{"title":76,"description":77,"link":78},"GitLab Duo (IA)","Créez des logiciels plus rapidement en tirant parti de l'IA à chaque étape du développement",{"text":79,"config":80},"Découvrez GitLab Duo",{"href":81,"dataGaName":82,"dataGaLocation":47},"/fr-fr/gitlab-duo/","gitlab duo ai",{"title":84,"description":85,"link":86},"Choisir GitLab","10 raisons pour lesquelles les entreprises choisissent GitLab",{"text":87,"config":88},"En savoir plus",{"href":89,"dataGaName":90,"dataGaLocation":47},"/fr-fr/why-gitlab/","why gitlab",{"title":92,"items":93},"Démarrer avec",[94,99,104],{"text":95,"config":96},"Ingénierie de plateforme",{"href":97,"dataGaName":98,"dataGaLocation":47},"/fr-fr/solutions/platform-engineering/","platform engineering",{"text":100,"config":101},"Expérience développeur",{"href":102,"dataGaName":103,"dataGaLocation":47},"/fr-fr/developer-experience/","Developer experience",{"text":105,"config":106},"MLOps",{"href":107,"dataGaName":105,"dataGaLocation":47},"/fr-fr/topics/devops/the-role-of-ai-in-devops/",{"text":109,"left":110,"config":111,"link":113,"lists":117,"footer":188},"Produit",true,{"dataNavLevelOne":112},"solutions",{"text":114,"config":115},"Voir toutes les solutions",{"href":116,"dataGaName":112,"dataGaLocation":47},"/fr-fr/solutions/",[118,143,166],{"title":119,"description":120,"link":121,"items":126},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":122},{"icon":123,"href":124,"dataGaName":125,"dataGaLocation":47},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[127,130,134,139],{"text":26,"config":128},{"href":129,"dataGaLocation":47,"dataGaName":26},"/fr-fr/solutions/continuous-integration/",{"text":131,"config":132},"Développement assisté par l'IA",{"href":81,"dataGaLocation":47,"dataGaName":133},"AI assisted development",{"text":135,"config":136},"Gestion du code source",{"href":137,"dataGaLocation":47,"dataGaName":138},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":140,"config":141},"Livraison de logiciels automatisée",{"href":124,"dataGaLocation":47,"dataGaName":142},"Automated software delivery",{"title":144,"description":145,"link":146,"items":151},"Securité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":147},{"href":148,"dataGaName":149,"dataGaLocation":47,"icon":150},"/fr-fr/solutions/security-compliance/","security and compliance","ShieldCheckLight",[152,156,161],{"text":153,"config":154},"Sécurité et conformité",{"href":148,"dataGaLocation":47,"dataGaName":155},"Security & Compliance",{"text":157,"config":158},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":159,"dataGaLocation":47,"dataGaName":160},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":162,"config":163},"Conformité et gouvernance",{"href":164,"dataGaLocation":47,"dataGaName":165},"/fr-fr/solutions/continuous-software-compliance/","Compliance and governance",{"title":167,"link":168,"items":173},"Mesures",{"config":169},{"icon":170,"href":171,"dataGaName":172,"dataGaLocation":47},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[174,178,183],{"text":175,"config":176},"Visibilité et mesures",{"href":171,"dataGaLocation":47,"dataGaName":177},"Visibility and Measurement",{"text":179,"config":180},"Gestion de la chaîne de valeur",{"href":181,"dataGaLocation":47,"dataGaName":182},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":184,"config":185},"Données d'analyse et informations clés",{"href":186,"dataGaLocation":47,"dataGaName":187},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":189,"items":190},"GitLab pour",[191,196,201],{"text":192,"config":193},"Entreprises",{"href":194,"dataGaLocation":47,"dataGaName":195},"/fr-fr/enterprise/","enterprise",{"text":197,"config":198},"PME",{"href":199,"dataGaLocation":47,"dataGaName":200},"/fr-fr/small-business/","small business",{"text":202,"config":203},"Secteur public",{"href":204,"dataGaLocation":47,"dataGaName":205},"/fr-fr/solutions/public-sector/","public sector",{"text":207,"config":208},"Tarifs",{"href":209,"dataGaName":210,"dataGaLocation":47,"dataNavLevelOne":210},"/fr-fr/pricing/","pricing",{"text":212,"config":213,"link":215,"lists":219,"feature":303},"Ressources",{"dataNavLevelOne":214},"resources",{"text":216,"config":217},"Afficher toutes les ressources",{"href":218,"dataGaName":214,"dataGaLocation":47},"/fr-fr/resources/",[220,253,275],{"title":221,"items":222},"Premiers pas",[223,228,233,238,243,248],{"text":224,"config":225},"Installation",{"href":226,"dataGaName":227,"dataGaLocation":47},"/fr-fr/install/","install",{"text":229,"config":230},"Guides de démarrage rapide",{"href":231,"dataGaName":232,"dataGaLocation":47},"/fr-fr/get-started/","quick setup checklists",{"text":234,"config":235},"Apprentissage",{"href":236,"dataGaLocation":47,"dataGaName":237},"https://university.gitlab.com/","learn",{"text":239,"config":240},"Documentation sur le produit",{"href":241,"dataGaName":242,"dataGaLocation":47},"https://docs.gitlab.com/","product documentation",{"text":244,"config":245},"Vidéos sur les bonnes pratiques",{"href":246,"dataGaName":247,"dataGaLocation":47},"/fr-fr/getting-started-videos/","best practice videos",{"text":249,"config":250},"Intégrations",{"href":251,"dataGaName":252,"dataGaLocation":47},"/fr-fr/integrations/","integrations",{"title":254,"items":255},"Découvrir",[256,261,265,270],{"text":257,"config":258},"Histoires de succès client",{"href":259,"dataGaName":260,"dataGaLocation":47},"/fr-fr/customers/","customer success stories",{"text":262,"config":263},"Blog",{"href":264,"dataGaName":5,"dataGaLocation":47},"/fr-fr/blog/",{"text":266,"config":267},"Travail à distance",{"href":268,"dataGaName":269,"dataGaLocation":47},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":271,"config":272},"TeamOps",{"href":273,"dataGaName":274,"dataGaLocation":47},"/fr-fr/teamops/","teamops",{"title":276,"items":277},"Connecter",[278,283,288,293,298],{"text":279,"config":280},"Services GitLab",{"href":281,"dataGaName":282,"dataGaLocation":47},"/fr-fr/services/","services",{"text":284,"config":285},"Communauté",{"href":286,"dataGaName":287,"dataGaLocation":47},"/community/","community",{"text":289,"config":290},"Forum",{"href":291,"dataGaName":292,"dataGaLocation":47},"https://forum.gitlab.com/","forum",{"text":294,"config":295},"Événements",{"href":296,"dataGaName":297,"dataGaLocation":47},"/events/","events",{"text":299,"config":300},"Partenaires",{"href":301,"dataGaName":302,"dataGaLocation":47},"/fr-fr/partners/","partners",{"backgroundColor":304,"textColor":305,"text":306,"image":307,"link":311},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":308,"config":309},"carte promo The Source",{"src":310},"/images/navigation/the-source-promo-card.svg",{"text":312,"config":313},"Lire les articles les plus récents",{"href":314,"dataGaName":315,"dataGaLocation":47},"/fr-fr/the-source/","the source",{"text":317,"config":318,"lists":320},"Société",{"dataNavLevelOne":319},"company",[321],{"items":322},[323,328,334,336,341,346,351,356,361,366,371],{"text":324,"config":325},"À propos",{"href":326,"dataGaName":327,"dataGaLocation":47},"/fr-fr/company/","about",{"text":329,"config":330,"footerGa":333},"Emplois",{"href":331,"dataGaName":332,"dataGaLocation":47},"/jobs/","jobs",{"dataGaName":332},{"text":294,"config":335},{"href":296,"dataGaName":297,"dataGaLocation":47},{"text":337,"config":338},"Leadership",{"href":339,"dataGaName":340,"dataGaLocation":47},"/company/team/e-group/","leadership",{"text":342,"config":343},"Équipe",{"href":344,"dataGaName":345,"dataGaLocation":47},"/company/team/","team",{"text":347,"config":348},"Manuel",{"href":349,"dataGaName":350,"dataGaLocation":47},"https://handbook.gitlab.com/","handbook",{"text":352,"config":353},"Relations avec les investisseurs",{"href":354,"dataGaName":355,"dataGaLocation":47},"https://ir.gitlab.com/","investor relations",{"text":357,"config":358},"Centre de confiance",{"href":359,"dataGaName":360,"dataGaLocation":47},"/fr-fr/security/","trust center",{"text":362,"config":363},"Centre pour la transparence de l'IA",{"href":364,"dataGaName":365,"dataGaLocation":47},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":367,"config":368},"Newsletter",{"href":369,"dataGaName":370,"dataGaLocation":47},"/company/contact/","newsletter",{"text":372,"config":373},"Presse",{"href":374,"dataGaName":375,"dataGaLocation":47},"/press/","press",{"text":377,"config":378,"lists":379},"Nous contacter",{"dataNavLevelOne":319},[380],{"items":381},[382,385,390],{"text":54,"config":383},{"href":56,"dataGaName":384,"dataGaLocation":47},"talk to sales",{"text":386,"config":387},"Aide",{"href":388,"dataGaName":389,"dataGaLocation":47},"/support/","get help",{"text":391,"config":392},"Portail clients GitLab",{"href":393,"dataGaName":394,"dataGaLocation":47},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":396,"login":397,"suggestions":404},"Fermer",{"text":398,"link":399},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":400,"config":401},"gitlab.com",{"href":61,"dataGaName":402,"dataGaLocation":403},"search login","search",{"text":405,"default":406},"Suggestions",[407,410,415,417,422,427],{"text":76,"config":408},{"href":81,"dataGaName":409,"dataGaLocation":403},"GitLab Duo (AI)",{"text":411,"config":412},"Suggestions de code (IA)",{"href":413,"dataGaName":414,"dataGaLocation":403},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":26,"config":416},{"href":129,"dataGaName":26,"dataGaLocation":403},{"text":418,"config":419},"GitLab sur AWS",{"href":420,"dataGaName":421,"dataGaLocation":403},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":423,"config":424},"GitLab sur Google Cloud ",{"href":425,"dataGaName":426,"dataGaLocation":403},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":428,"config":429},"Pourquoi utiliser GitLab ?",{"href":89,"dataGaName":430,"dataGaLocation":403},"Why GitLab?",{"freeTrial":432,"mobileIcon":437,"desktopIcon":442},{"text":433,"config":434},"Commencer votre essai gratuit",{"href":435,"dataGaName":52,"dataGaLocation":436},"https://gitlab.com/-/trials/new/","nav",{"altText":438,"config":439},"Icône GitLab",{"src":440,"dataGaName":441,"dataGaLocation":436},"/images/brand/gitlab-logo-tanuki.svg","gitlab icon",{"altText":438,"config":443},{"src":444,"dataGaName":441,"dataGaLocation":436},"/images/brand/gitlab-logo-type.svg",{"freeTrial":446,"mobileIcon":450,"desktopIcon":452},{"text":447,"config":448},"En savoir plus sur GitLab Duo",{"href":81,"dataGaName":449,"dataGaLocation":436},"gitlab duo",{"altText":438,"config":451},{"src":440,"dataGaName":441,"dataGaLocation":436},{"altText":438,"config":453},{"src":444,"dataGaName":441,"dataGaLocation":436},"content:shared:fr-fr:main-navigation.yml","Main Navigation","shared/fr-fr/main-navigation.yml","shared/fr-fr/main-navigation",{"_path":459,"_dir":41,"_draft":6,"_partial":6,"_locale":7,"title":460,"titleMobile":460,"button":461,"config":465,"_id":467,"_type":33,"_source":35,"_file":468,"_stem":469,"_extension":38},"/shared/fr-fr/banner","La plateforme GitLab Duo Agent est maintenant en bêta publique !",{"text":87,"config":462},{"href":463,"dataGaName":464,"dataGaLocation":47},"/fr-fr/gitlab-duo/agent-platform/","duo banner",{"layout":466},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":471,"_dir":41,"_draft":6,"_partial":6,"_locale":7,"data":472,"_id":678,"_type":33,"title":679,"_source":35,"_file":680,"_stem":681,"_extension":38},"/shared/fr-fr/main-footer",{"text":473,"source":474,"edit":480,"contribute":485,"config":490,"items":495,"minimal":669},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":475,"config":476},"Afficher le code source de la page",{"href":477,"dataGaName":478,"dataGaLocation":479},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":481,"config":482},"Modifier cette page",{"href":483,"dataGaName":484,"dataGaLocation":479},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":486,"config":487},"Veuillez contribuer",{"href":488,"dataGaName":489,"dataGaLocation":479},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":491,"facebook":492,"youtube":493,"linkedin":494},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[496,519,573,606,640],{"title":65,"links":497,"subMenu":502},[498],{"text":499,"config":500},"Plateforme DevSecOps",{"href":74,"dataGaName":501,"dataGaLocation":479},"devsecops platform",[503],{"title":207,"links":504},[505,509,514],{"text":506,"config":507},"Voir les forfaits",{"href":209,"dataGaName":508,"dataGaLocation":479},"view plans",{"text":510,"config":511},"Pourquoi choisir GitLab Premium ?",{"href":512,"dataGaName":513,"dataGaLocation":479},"/fr-fr/pricing/premium/","why premium",{"text":515,"config":516},"Pourquoi choisir GitLab Ultimate ?",{"href":517,"dataGaName":518,"dataGaLocation":479},"/fr-fr/pricing/ultimate/","why ultimate",{"title":520,"links":521},"Solutions",[522,527,530,532,537,542,546,549,552,557,559,561,563,568],{"text":523,"config":524},"Transformation digitale",{"href":525,"dataGaName":526,"dataGaLocation":479},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":153,"config":528},{"href":148,"dataGaName":529,"dataGaLocation":479},"security & compliance",{"text":140,"config":531},{"href":124,"dataGaName":125,"dataGaLocation":479},{"text":533,"config":534},"Développement agile",{"href":535,"dataGaName":536,"dataGaLocation":479},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":538,"config":539},"Transformation cloud",{"href":540,"dataGaName":541,"dataGaLocation":479},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":543,"config":544},"SCM",{"href":137,"dataGaName":545,"dataGaLocation":479},"source code management",{"text":26,"config":547},{"href":129,"dataGaName":548,"dataGaLocation":479},"continuous integration & delivery",{"text":179,"config":550},{"href":181,"dataGaName":551,"dataGaLocation":479},"value stream management",{"text":553,"config":554},"GitOps",{"href":555,"dataGaName":556,"dataGaLocation":479},"/fr-fr/solutions/gitops/","gitops",{"text":192,"config":558},{"href":194,"dataGaName":195,"dataGaLocation":479},{"text":197,"config":560},{"href":199,"dataGaName":200,"dataGaLocation":479},{"text":202,"config":562},{"href":204,"dataGaName":205,"dataGaLocation":479},{"text":564,"config":565},"Formation",{"href":566,"dataGaName":567,"dataGaLocation":479},"/fr-fr/solutions/education/","education",{"text":569,"config":570},"Services financiers",{"href":571,"dataGaName":572,"dataGaLocation":479},"/fr-fr/solutions/finance/","financial services",{"title":212,"links":574},[575,577,579,581,584,586,590,592,594,596,598,600,602,604],{"text":224,"config":576},{"href":226,"dataGaName":227,"dataGaLocation":479},{"text":229,"config":578},{"href":231,"dataGaName":232,"dataGaLocation":479},{"text":234,"config":580},{"href":236,"dataGaName":237,"dataGaLocation":479},{"text":239,"config":582},{"href":241,"dataGaName":583,"dataGaLocation":479},"docs",{"text":262,"config":585},{"href":264,"dataGaName":5},{"text":587,"config":588},"Histoires de réussite client",{"href":589,"dataGaLocation":479},"/customers/",{"text":257,"config":591},{"href":259,"dataGaName":260,"dataGaLocation":479},{"text":266,"config":593},{"href":268,"dataGaName":269,"dataGaLocation":479},{"text":279,"config":595},{"href":281,"dataGaName":282,"dataGaLocation":479},{"text":271,"config":597},{"href":273,"dataGaName":274,"dataGaLocation":479},{"text":284,"config":599},{"href":286,"dataGaName":287,"dataGaLocation":479},{"text":289,"config":601},{"href":291,"dataGaName":292,"dataGaLocation":479},{"text":294,"config":603},{"href":296,"dataGaName":297,"dataGaLocation":479},{"text":299,"config":605},{"href":301,"dataGaName":302,"dataGaLocation":479},{"title":317,"links":607},[608,610,612,614,616,618,620,624,629,631,633,635],{"text":324,"config":609},{"href":326,"dataGaName":319,"dataGaLocation":479},{"text":329,"config":611},{"href":331,"dataGaName":332,"dataGaLocation":479},{"text":337,"config":613},{"href":339,"dataGaName":340,"dataGaLocation":479},{"text":342,"config":615},{"href":344,"dataGaName":345,"dataGaLocation":479},{"text":347,"config":617},{"href":349,"dataGaName":350,"dataGaLocation":479},{"text":352,"config":619},{"href":354,"dataGaName":355,"dataGaLocation":479},{"text":621,"config":622},"Sustainability",{"href":623,"dataGaName":621,"dataGaLocation":479},"/sustainability/",{"text":625,"config":626},"Diversité, inclusion et appartenance (DIB)",{"href":627,"dataGaName":628,"dataGaLocation":479},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":357,"config":630},{"href":359,"dataGaName":360,"dataGaLocation":479},{"text":367,"config":632},{"href":369,"dataGaName":370,"dataGaLocation":479},{"text":372,"config":634},{"href":374,"dataGaName":375,"dataGaLocation":479},{"text":636,"config":637},"Déclaration de transparence sur l'esclavage moderne",{"href":638,"dataGaName":639,"dataGaLocation":479},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":377,"links":641},[642,645,647,649,654,659,664],{"text":643,"config":644},"Échanger avec un expert",{"href":56,"dataGaName":57,"dataGaLocation":479},{"text":386,"config":646},{"href":388,"dataGaName":389,"dataGaLocation":479},{"text":391,"config":648},{"href":393,"dataGaName":394,"dataGaLocation":479},{"text":650,"config":651},"Statut",{"href":652,"dataGaName":653,"dataGaLocation":479},"https://status.gitlab.com/","status",{"text":655,"config":656},"Conditions d'utilisation",{"href":657,"dataGaName":658},"/terms/","terms of use",{"text":660,"config":661},"Déclaration de confidentialité",{"href":662,"dataGaName":663,"dataGaLocation":479},"/fr-fr/privacy/","privacy statement",{"text":665,"config":666},"Préférences en matière de cookies",{"dataGaName":667,"dataGaLocation":479,"id":668,"isOneTrustButton":110},"cookie preferences","ot-sdk-btn",{"items":670},[671,673,676],{"text":655,"config":672},{"href":657,"dataGaName":658,"dataGaLocation":479},{"text":674,"config":675},"Politique de confidentialité",{"href":662,"dataGaName":663,"dataGaLocation":479},{"text":665,"config":677},{"dataGaName":667,"dataGaLocation":479,"id":668,"isOneTrustButton":110},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",[683,695],{"_path":684,"_dir":685,"_draft":6,"_partial":6,"_locale":7,"content":686,"config":690,"_id":692,"_type":33,"title":19,"_source":35,"_file":693,"_stem":694,"_extension":38},"/en-us/blog/authors/george-kichukov","authors",{"name":19,"config":687},{"headshot":688,"ctfId":689},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664866/Blog/Author%20Headshots/george_kichukov.png","7e8bn05u4pXwYjkRrqdprE",{"template":691},"BlogAuthor","content:en-us:blog:authors:george-kichukov.yml","en-us/blog/authors/george-kichukov.yml","en-us/blog/authors/george-kichukov",{"_path":696,"_dir":685,"_draft":6,"_partial":6,"_locale":7,"content":697,"config":700,"_id":702,"_type":33,"title":20,"_source":35,"_file":703,"_stem":704,"_extension":38},"/en-us/blog/authors/salahddine-aberkan",{"name":20,"config":698},{"headshot":699},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750434234/comdtybiix8pjqdpsxow.png",{"template":691,"gitlabHandle":701},"saberkan","content:en-us:blog:authors:salahddine-aberkan.yml","en-us/blog/authors/salahddine-aberkan.yml","en-us/blog/authors/salahddine-aberkan",{"_path":706,"_dir":41,"_draft":6,"_partial":6,"_locale":7,"header":707,"eyebrow":708,"blurb":709,"button":710,"secondaryButton":714,"_id":716,"_type":33,"title":717,"_source":35,"_file":718,"_stem":719,"_extension":38},"/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":49,"config":711},{"href":712,"dataGaName":52,"dataGaLocation":713},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":54,"config":715},{"href":56,"dataGaName":57,"dataGaLocation":713},"content:shared:fr-fr:next-steps.yml","Next Steps","shared/fr-fr/next-steps.yml","shared/fr-fr/next-steps",1753207460204]