[{"data":1,"prerenderedAt":707},["ShallowReactive",2],{"/fr-fr/blog/how-to-deploy-react-to-amazon-s3/":3,"navigation-fr-fr":36,"banner-fr-fr":455,"footer-fr-fr":467,"Jeremy Wagner":679,"next-steps-fr-fr":692},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":26,"_id":29,"_type":30,"title":31,"_source":32,"_file":33,"_stem":34,"_extension":35},"/fr-fr/blog/how-to-deploy-react-to-amazon-s3","blog",false,"",{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},"Comment déployer une application React sur Amazon S3 avec GitLab CI/CD","Vous souhaitez déployer une application React sur Amazon S3 avec GitLab CI/CD ? Suivez notre guide étape par étape.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663291/Blog/Hero%20Images/cover1.jpg","https://about.gitlab.com/blog/how-to-deploy-react-to-amazon-s3","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Comment déployer une application React sur Amazon S3 avec GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jeremy Wagner\"}],\n        \"datePublished\": \"2023-03-01\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22,"updatedDate":25},[18],"Jeremy Wagner","2023-03-01","Amazon S3 dispose d'une fonctionnalité d'hébergement qui vous permet d'héberger un site Web statique directement à partir d'un bucket S3, également appelé compartiment. Lorsque vous hébergez votre site Web sur Amazon S3, son contenu est stocké dans un bucket S3 et servi directement à vos utilisateurs, sans besoin de ressources supplémentaires. \n\nCombinez cela avec Amazon CloudFront et vous obtiendrez une solution rentable et évolutive pour l'hébergement de vos sites Web statiques. Une fonctionnalité particulièrement utile pour les applications à page unique.\n\nDans cet article, nous vous guidons dans la configuration de votre bucket Amazon S3, la configuration d'OpenID Connect ([OIDC](https://openid.net/developers/how-connect-works/ \"OpenID Connect\")) dans AWS et le déploiement de votre application sur Amazon S3 à l'aide d'un pipeline GitLab [CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/ \"Qu'est-ce que le CI/CD ?\").\n\nÀ la fin de cet article, vous disposerez d'un [pipeline CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce qu'un pipeline CI/CD ?\") construit dans GitLab qui se déploie automatiquement dans votre bucket Amazon S3. \n\n## Prérequis\n\nPour ce guide, vous aurez besoin des éléments suivants :\n\n- [Node.js](https://nodejs.org/fr) >= 14.0.0 et npm >= 5.6 installés sur votre système\n- [Git](https://git-scm.com/) installé sur votre système\n- Un [compte GitLab](https://gitlab.com/-/trials/new)\n- Un [compte AWS](https://aws.amazon.com/fr/free/)\n\nDans un [précédent tutoriel](https://about.gitlab.com/blog/how-to-automate-testing-for-a-react-application-with-gitlab/) nous vous avons expliqué comment : \n- créer une nouvelle application React,\n- exécuter des tests unitaires dans le cadre du processus CI dans GitLab,\n- générer les résultats des tests ainsi que la couverture de code dans le pipeline.\n\nCet article constitue la [suite de ce projet](https://gitlab.com/guided-explorations/engineering-tutorials/react-unit-testing). Libre à vous de le parcourir et de le dupliquer (fork). \n\n## Configuration de votre bucket S3 \n\nPour commencer, vous devez configurer votre bucket Amazon S3. \n\n### Créez votre compartiment\n\nAprès vous être connecté à votre compte AWS, recherchez « S3 » à l'aide de la barre de recherche et sélectionnez le service S3. Cela ouvrira la page d'accueil du service.\n\nVous devriez immédiatement voir l'option permettant de créer un bucket (compartiment). Ce compartiment est l'endroit où vous allez stocker votre application React une fois créée. Cliquez sur le bouton « Créer un compartiment » pour continuer.\n\n![Création d'un bucket S3](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/create_bucket.png){: .shadow}\n\nDonnez un nom à votre compartiment, sélectionnez votre région, laissez le reste des paramètres par défaut (nous y reviendrons plus tard) et continuez en cliquant sur le bouton « Créer un compartiment ». \n\nLorsque vous nommez votre compartiment, il est important de se rappeler que le nom doit être unique et suivre les règles de nommage des compartiments. Nous avons nommé le nôtre `jw-gl-react`.\n\nUne fois votre compartiment créé, vous devriez être redirigé vers une liste de vos compartiments, comme montré ci-dessous. \n\n![Liste bucket S3 AWS](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/bucket_list.png){: .shadow}\n\n### Configurez l'hébergement de site web statique \n\nL'étape suivante consiste à configurer l'hébergement de site web statique. Ouvrez votre compartiment en cliquant sur son nom. Sélectionnez l'onglet « Propriétés »  et faites défiler vers le bas pour trouver l'option d'hébergement de site web statique.\n\n![Configuration de l'hébergement de site web statique](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/static_hosting_1.png){: .shadow}\n\nCliquez sur « Modifier », puis activez l'hébergement de site web statique. Pour les documents d’index et d’erreur, saisissez `index.html`, puis cliquez sur « Enregistrer les modifications ».\n\n![Activation de l'hébergement de site web statique sur Amazon S3](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/static_hosting_2.png){: .shadow}\n\n### Configurez les autorisations de votre application React\n\nMaintenant que vous avez activé l'hébergement de site web statique, vous devez mettre à jour vos autorisations afin que votre audience puisse accéder à votre site web. Revenez à votre compartiment et sélectionnez l'onglet « Autorisations ».\n\nSous « Bloquer l'accès public » (paramètres du compartiment), cliquez sur « Modifier », décochez « Bloquer tous les accès publics » et continuez en cliquant sur « Enregistrer les modifications ».\n\n![Bloquer l'accès public](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/block_access_1.png){: .shadow}\n\nVotre page devrait maintenant ressembler à ceci : \n\n![Configurer permission bucket S3 AWS](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/block_access_2.png){: .shadow}\n\nMaintenant, vous devez modifier la stratégie de compartiment. Pour cela, cliquez sur le bouton « Modifier » dans la section « Stratégie de compartiment » et collez le code suivant :\n\n```javascript\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"PublicReadGetObject\",\n            \"Effect\": \"Allow\",\n            \"Principal\": \"*\",\n            \"Action\": \"s3:GetObject\",\n            \"Resource\": \"arn:aws:s3:::jw-gl-react/*\"\n        }\n    ]\n}\n```\n\nÀ la ligne « Ressource », remplacez `jw-gl-react`  par le nom de votre compartiment et enregistrez les modifications.\n\nVotre compartiment devrait ressembler à ceci : \n\n![Bucket S3 accès public](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/block_access_3.png){: .shadow}\n\n## Chargement de votre application React\n\nMaintenant, créons votre application React et publions-la manuellement dans votre bucket S3.\n\nPour créer l'application, assurez-vous que votre projet soit cloné sur votre machine locale et exécutez la commande suivante dans votre terminal à l'intérieur du répertoire de votre dépôt :\n\n```\nnpm run build\n```\nCela créera un dossier `build` à l'intérieur du répertoire de votre dépôt. \n\nDans votre compartiment, cliquez sur le bouton « Charger »\n\n![Chargement de l'application React](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/upload_1.png){: .shadow}\n\nFaites glisser le contenu de votre dossier nouvellement créé (et non le dossier lui-même) dans la zone de chargement. Cela chargera le contenu de votre application React dans votre compartiment. Assurez-vous de cliquer sur « Charger » en bas de la page pour démarrer le chargement.\n\nRevenez maintenant à l'onglet « Propriétés » de votre compartiment et faites défiler vers le bas pour trouver l'URL de votre site web statique.\n\n![URL du site web statique](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/upload_2.png){: .shadow}\n\nCliquez sur le lien et vous devriez voir votre application React nouvellement créée s'ouvrir dans votre navigateur.\n\n![Application React déployée](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/manual_deploy.png){: .shadow}\n\n## Configuration d’OpenID Connect dans AWS\n\nPour déployer sur votre bucket S3 depuis GitLab, nous allons utiliser un job GitLab CI/CD pour  recevoir des informations d'identification temporaires d'AWS sans avoir besoin de stocker des secrets. Pour ce faire, nous allons configurer OpenID Connect pour la fédération d'identité entre GitLab et AWS. Nous suivrons la [documentation de GitLab associée](https://docs.gitlab.com/ee/ci/cloud_services/aws/).\n\n### Ajoutez un fournisseur d'identité \n\nLa première étape consiste à ajouter GitLab en tant que fournisseur d’identité OpenID Connect (OIDC) dans IAM. AWS fournit des [instructions](https://docs.aws.amazon.com/fr_fr/IAM/latest/UserGuide/id_roles_providers_create_oidc.html), mais nous allons les parcourir étape par étape dans ce guide.\n\nOuvrez tout d'abord la console IAM dans AWS.\n\n![Console IAM dans AWS](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/iam_1.png){: .shadow} \n\nDans le volet de navigation de gauche, sous « Gestion des accès », choisissez « Fournisseurs d'identité », puis « Ajouter un fournisseur ». Pour le type de fournisseur, sélectionnez « OpenID Connect ».\n\nPour l'URL du fournisseur, saisissez l'adresse de votre instance GitLab, telle que `https://gitlab.com` ou `https://gitlab.example.com`.\n\nPour « Audience », saisissez quelque chose de générique mais spécifique à votre application React. Dans notre cas, nous allons utiliser `react_s3_gl`. Veillez à choisir quelque chose qui ne soit pas facile à deviner et prenez note de cette valeur, car vous l'utiliserez pour définir l'`ID_TOKEN` dans votre fichier `.gitLab-ci.yml`.\n\nAprès avoir saisi l'URL du fournisseur, cliquez sur « Obtenir une empreinte numérique »  pour vérifier le certificat du serveur de votre fournisseur d'identité. Ensuite, continuez et cliquez sur « Ajouter un fournisseur » pour terminer.\n\n### Créez une politique d’autorisations\n\nAprès avoir créé le fournisseur d'identité, vous devez créer une politique d’autorisations. \n\nDepuis le tableau de bord IAM, sous « Gestion des accès », sélectionnez « Politiques » puis « Créer une politique ». Sélectionnez l'onglet JSON et collez le code suivant en remplaçant `jw-gl-react` par le nom de votre compartiment à la ligne « Ressource ».\n\n```javascript\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\"s3:ListBucket\"],\n      \"Resource\": [\"arn:aws:s3:::jw-gl-react\"]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:PutObject\",\n        \"s3:GetObject\",\n        \"s3:DeleteObject\"\n      ],\n      \"Resource\": [\"arn:aws:s3:::jw-gl-react/*\"]\n    }\n  ]\n}\n```\n\nSélectionnez le bouton « Suivant : Balises » , ajoutez les balises souhaitées, puis sélectionnez le bouton « Suivant : Confirmer ». Entrez un nom pour votre politique avant de terminer sa création.\n\n### Configurez le rôle\n\nIl est maintenant temps d'ajouter le rôle. Depuis le tableau de bord IAM, sous « Gestion des accès  », sélectionnez « Rôles », puis cliquez sur « Créer un rôle » et choisissez « Identité Web ».\n\nDans la section « Identité Web », sélectionnez le fournisseur d'identité que vous avez créé précédemment. Pour l'audience, sélectionnez également l'audience que vous avez créée précédemment. Cliquez sur le bouton « Suivant » pour continuer.\n\nSi vous souhaitez limiter l'autorisation à un groupe, un projet, une branche ou une balise spécifique, vous pouvez créer une « Politique d’approbation personnalisée » (Custom Trust Policy) au lieu d'une « Identité Web ».\n\nPour une liste complète des types de filtres qu'il est possible d'appliquer, [consultez notre documentation](https://docs.gitlab.com/ee/ci/cloud_services/index.html#configure-a-conditional-role-with-oidc-claims). \n\n![Configuration du rôle dans l'IAM](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/iam_2.png){: .shadow}\n\nAu cours de l'étape « Ajout des autorisations », sélectionnez la politique que vous avez créée, puis cliquez sur « Suivant » pour continuer. Donnez un nom à votre rôle et cliquez sur « Créer un rôle ».\n\nOuvrez le rôle que vous venez de créer. Dans la section « Récapitulatif », recherchez le nom de ressource Amazon (ARN) et enregistrez-le dans un endroit sécurisé. Vous l'utiliserez dans votre pipeline.\n\n![Déployer le rôle dans l'IAM](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/iam_3.png){: .shadow}\n\n## Déploiement sur votre compartiment Amazon S3 à l'aide d'un pipeline GitLab CI/CD\n\nDans votre projet, créez deux [variables CI/CD](https://docs.gitlab.com/ci/variables/#define-a-cicd-variable-in-the-ui) :\n\n- La première variable doit être nommée `ROLE_ARN`. Pour la valeur, collez l'ARN du rôle que vous venez de créer.\n- La deuxième variable doit être nommée `S3_BUCKET`. Pour la valeur, collez le nom du compartiment que vous avez créé plus tôt.\n\nPour des raisons de sécurité, dans cet article nous avons choisi de masquer nos variables.\n\n### Récupérez vos identifiants temporaires\n\nDans votre fichier `.gitlab-ci.yml`, collez le code suivant :\n\n```\n.assume_role: &assume_role\n    - >\n      STS=($(aws sts assume-role-with-web-identity\n      --role-arn ${ROLE_ARN}\n      --role-session-name \"GitLabRunner-${CI_PROJECT_ID}-${CI_PIPELINE_ID}\"\n      --web-identity-token $ID_TOKEN\n      --duration-seconds 3600\n      --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]'\n      --output text))\n    - export AWS_ACCESS_KEY_ID=\"${STS[0]}\"\n    - export AWS_SECRET_ACCESS_KEY=\"${STS[1]}\"\n    - export AWS_SESSION_TOKEN=\"${STS[2]}\"\n```\n\nCela va utiliser le service de jeton de sécurité AWS (AWS Security Token Service) pour générer des identifiants temporaires (3 600 secondes) en utilisant le rôle OpenID Connect que vous avez créé précédemment.\n\n### Créez le job de déploiement pour votre application React\n\nMaintenant, ajoutons un job de compilation et de déploiement pour créer votre application et la déployer sur votre bucket S3.\n\nTout d'abord, mettez à jour les étapes dans votre fichier `.gitlab-ci.yml` pour inclure une étape `build` et `deploy`, comme indiqué ci-dessous :\n\n```\nstages:\n  - build\n  - test\n  - deploy\n```\n\nEnsuite, ajoutons un job pour créer votre application. Collez le code suivant dans votre fichier `.gitLab-ci.yml` :\n\n```\nbuild artifact:\n  stage: build\n  image: node:latest\n  before_script:\n    - npm install\n  script:\n    - npm run build\n  artifacts:\n    paths:\n      - build/\n    when: always\n  rules:\n    - if: '$CI_COMMIT_REF_NAME == \"main\"'\n      when: always\n```\n\nCela va exécuter `npm run build` si le changement se produit sur la branche `main` et télécharger le répertoire de compilation (build directory) en tant qu'artefact à utiliser lors de l'étape suivante.\n\nEnsuite, ajoutons un job qui sera réellement déployé sur votre bucket S3. Collez le code suivant dans votre fichier `.gitLab-ci.yml` :\n\n```\ndeploy s3:\n  stage: deploy\n  image:\n    name: amazon/aws-cli:latest\n    entrypoint: \n      - '/usr/bin/env'\n  id_tokens:\n      ID_TOKEN:\n        aud: react_s3_gl\n  script:\n    - *assume_role\n    - aws s3 sync build/ s3://$S3_BUCKET\n  rules:\n    - if: '$CI_COMMIT_REF_NAME == \"main\"'\n      when: always\n```\n\nCela utilise les [ancres YAML](https://docs.gitlab.com/ee/ci/yaml/yaml_optimization.html#yaml-anchors-for-scripts) pour exécuter le script `assume_role`, puis utilise `aws cli` pour télécharger votre artefact de compilation dans le compartiment que vous avez défini en tant que variable. Ce job ne s'exécute que si le changement se produit sur la branche `main`.\n\nAssurez-vous que la valeur `aud` correspond à celle que vous avez saisie pour votre audience au moment de la configuration du fournisseur d'identité. Dans notre cas, nous avons saisi `react-s3_gl`.\n\nVotre fichier `.gitLab-ci.yml` complet devrait ressembler à ceci :\n\n```\nstages:\n  - build\n  - test\n  - deploy\n\n.assume_role: &assume_role\n    - >\n      STS=($(aws sts assume-role-with-web-identity\n      --role-arn ${ROLE_ARN}\n      --role-session-name \"GitLabRunner-${CI_PROJECT_ID}-${CI_PIPELINE_ID}\"\n      --web-identity-token $ID_TOKEN\n      --duration-seconds 3600\n      --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]'\n      --output text))\n    - export AWS_ACCESS_KEY_ID=\"${STS[0]}\"\n    - export AWS_SECRET_ACCESS_KEY=\"${STS[1]}\"\n    - export AWS_SESSION_TOKEN=\"${STS[2]}\"\n\nunit test:\n  image: node:latest\n  stage: test\n  before_script:\n    - npm install\n  script:\n    - npm run test:ci\n  coverage: /All files[^|]*\\|[^|]*\\s+([\\d\\.]+)/\n  artifacts:\n    paths:\n      - coverage/\n    when: always\n    reports:\n      junit:\n        - junit.xml\n\nbuild artifact:\n  stage: build\n  image: node:latest\n  before_script:\n    - npm install\n  script:\n    - npm run build\n  artifacts:\n    paths:\n      - build/\n    when: always\n  rules:\n    - if: '$CI_COMMIT_REF_NAME == \"main\"'\n      when: always\n\ndeploy s3:\n  stage: deploy\n  image:\n    name: amazon/aws-cli:latest\n    entrypoint: \n      - '/usr/bin/env'\n  id_tokens:\n      ID_TOKEN:\n        aud: react_s3_gl\n  script:\n    - *assume_role\n    - aws s3 sync build/ s3://$S3_BUCKET\n  rules:\n    - if: '$CI_COMMIT_REF_NAME == \"main\"'\n      when: always\n```\n\n### Testez votre pipeline\n\nPour tester votre pipeline, dans `App.js`, modifiez cette ligne `Edit \u003Ccode>src/App.js\u003C/code> and save to reload.` par ceci :  `This was deployed from GitLab`. Maintenant, validez vos modifications dans la branche `main`. Le pipeline devrait se lancer et une fois terminé avec succès, vous devriez voir votre application mise à jour avec l'URL de votre site web statique.\n\n![Application React mise à jour](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/auto_deploy.png){: .shadow}\n\nVous disposez désormais d'un pipeline CI/CD construit dans GitLab qui reçoit des informations d'identification temporaires d'AWS à l'aide d'OpenID Connect et qui se déploie automatiquement dans votre compartiment Amazon S3. Pour aller plus loin, vous pouvez [sécuriser votre application](https://docs.gitlab.com/ee/user/application_security/secure_your_application.html) avec les outils de sécurité intégrés de GitLab.\n\nDécouvrez [tout le code](https://gitlab.com/guided-explorations/engineering-tutorials/react-s3) de ce projet.","engineering",[23,24],"DevOps","CI/CD","2025-03-27",{"slug":27,"featured":6,"template":28},"how-to-deploy-react-to-amazon-s3","BlogPost","content:fr-fr:blog:how-to-deploy-react-to-amazon-s3.yml","yaml","How To Deploy React To Amazon S3","content","fr-fr/blog/how-to-deploy-react-to-amazon-s3.yml","fr-fr/blog/how-to-deploy-react-to-amazon-s3","yml",{"_path":37,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":39,"_id":451,"_type":30,"title":452,"_source":32,"_file":453,"_stem":454,"_extension":35},"/shared/fr-fr/main-navigation","fr-fr",{"logo":40,"freeTrial":45,"sales":50,"login":55,"items":60,"search":392,"minimal":428,"duo":442},{"config":41},{"href":42,"dataGaName":43,"dataGaLocation":44},"/fr-fr/","gitlab logo","header",{"text":46,"config":47},"Commencer un essai gratuit",{"href":48,"dataGaName":49,"dataGaLocation":44},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":51,"config":52},"Contacter l'équipe commerciale",{"href":53,"dataGaName":54,"dataGaLocation":44},"/fr-fr/sales/","sales",{"text":56,"config":57},"Connexion",{"href":58,"dataGaName":59,"dataGaLocation":44},"https://gitlab.com/users/sign_in/","sign in",[61,105,203,208,313,373],{"text":62,"config":63,"cards":65,"footer":88},"Plateforme",{"dataNavLevelOne":64},"platform",[66,72,80],{"title":62,"description":67,"link":68},"La plateforme DevSecOps alimentée par l'IA la plus complète",{"text":69,"config":70},"Découvrir notre plateforme",{"href":71,"dataGaName":64,"dataGaLocation":44},"/fr-fr/platform/",{"title":73,"description":74,"link":75},"GitLab Duo (IA)","Créez des logiciels plus rapidement en tirant parti de l'IA à chaque étape du développement",{"text":76,"config":77},"Découvrez GitLab Duo",{"href":78,"dataGaName":79,"dataGaLocation":44},"/fr-fr/gitlab-duo/","gitlab duo ai",{"title":81,"description":82,"link":83},"Choisir GitLab","10 raisons pour lesquelles les entreprises choisissent GitLab",{"text":84,"config":85},"En savoir plus",{"href":86,"dataGaName":87,"dataGaLocation":44},"/fr-fr/why-gitlab/","why gitlab",{"title":89,"items":90},"Démarrer avec",[91,96,101],{"text":92,"config":93},"Ingénierie de plateforme",{"href":94,"dataGaName":95,"dataGaLocation":44},"/fr-fr/solutions/platform-engineering/","platform engineering",{"text":97,"config":98},"Expérience développeur",{"href":99,"dataGaName":100,"dataGaLocation":44},"/fr-fr/developer-experience/","Developer experience",{"text":102,"config":103},"MLOps",{"href":104,"dataGaName":102,"dataGaLocation":44},"/fr-fr/topics/devops/the-role-of-ai-in-devops/",{"text":106,"left":107,"config":108,"link":110,"lists":114,"footer":185},"Produit",true,{"dataNavLevelOne":109},"solutions",{"text":111,"config":112},"Voir toutes les solutions",{"href":113,"dataGaName":109,"dataGaLocation":44},"/fr-fr/solutions/",[115,140,163],{"title":116,"description":117,"link":118,"items":123},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":119},{"icon":120,"href":121,"dataGaName":122,"dataGaLocation":44},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[124,127,131,136],{"text":24,"config":125},{"href":126,"dataGaLocation":44,"dataGaName":24},"/fr-fr/solutions/continuous-integration/",{"text":128,"config":129},"Développement assisté par l'IA",{"href":78,"dataGaLocation":44,"dataGaName":130},"AI assisted development",{"text":132,"config":133},"Gestion du code source",{"href":134,"dataGaLocation":44,"dataGaName":135},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":137,"config":138},"Livraison de logiciels automatisée",{"href":121,"dataGaLocation":44,"dataGaName":139},"Automated software delivery",{"title":141,"description":142,"link":143,"items":148},"Securité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":144},{"href":145,"dataGaName":146,"dataGaLocation":44,"icon":147},"/fr-fr/solutions/security-compliance/","security and compliance","ShieldCheckLight",[149,153,158],{"text":150,"config":151},"Sécurité et conformité",{"href":145,"dataGaLocation":44,"dataGaName":152},"Security & Compliance",{"text":154,"config":155},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":156,"dataGaLocation":44,"dataGaName":157},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":159,"config":160},"Conformité et gouvernance",{"href":161,"dataGaLocation":44,"dataGaName":162},"/fr-fr/solutions/continuous-software-compliance/","Compliance and governance",{"title":164,"link":165,"items":170},"Mesures",{"config":166},{"icon":167,"href":168,"dataGaName":169,"dataGaLocation":44},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[171,175,180],{"text":172,"config":173},"Visibilité et mesures",{"href":168,"dataGaLocation":44,"dataGaName":174},"Visibility and Measurement",{"text":176,"config":177},"Gestion de la chaîne de valeur",{"href":178,"dataGaLocation":44,"dataGaName":179},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":181,"config":182},"Données d'analyse et informations clés",{"href":183,"dataGaLocation":44,"dataGaName":184},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":186,"items":187},"GitLab pour",[188,193,198],{"text":189,"config":190},"Entreprises",{"href":191,"dataGaLocation":44,"dataGaName":192},"/fr-fr/enterprise/","enterprise",{"text":194,"config":195},"PME",{"href":196,"dataGaLocation":44,"dataGaName":197},"/fr-fr/small-business/","small business",{"text":199,"config":200},"Secteur public",{"href":201,"dataGaLocation":44,"dataGaName":202},"/fr-fr/solutions/public-sector/","public sector",{"text":204,"config":205},"Tarifs",{"href":206,"dataGaName":207,"dataGaLocation":44,"dataNavLevelOne":207},"/fr-fr/pricing/","pricing",{"text":209,"config":210,"link":212,"lists":216,"feature":300},"Ressources",{"dataNavLevelOne":211},"resources",{"text":213,"config":214},"Afficher toutes les ressources",{"href":215,"dataGaName":211,"dataGaLocation":44},"/fr-fr/resources/",[217,250,272],{"title":218,"items":219},"Premiers pas",[220,225,230,235,240,245],{"text":221,"config":222},"Installation",{"href":223,"dataGaName":224,"dataGaLocation":44},"/fr-fr/install/","install",{"text":226,"config":227},"Guides de démarrage rapide",{"href":228,"dataGaName":229,"dataGaLocation":44},"/fr-fr/get-started/","quick setup checklists",{"text":231,"config":232},"Apprentissage",{"href":233,"dataGaLocation":44,"dataGaName":234},"https://university.gitlab.com/","learn",{"text":236,"config":237},"Documentation sur le produit",{"href":238,"dataGaName":239,"dataGaLocation":44},"https://docs.gitlab.com/","product documentation",{"text":241,"config":242},"Vidéos sur les bonnes pratiques",{"href":243,"dataGaName":244,"dataGaLocation":44},"/fr-fr/getting-started-videos/","best practice videos",{"text":246,"config":247},"Intégrations",{"href":248,"dataGaName":249,"dataGaLocation":44},"/fr-fr/integrations/","integrations",{"title":251,"items":252},"Découvrir",[253,258,262,267],{"text":254,"config":255},"Histoires de succès client",{"href":256,"dataGaName":257,"dataGaLocation":44},"/fr-fr/customers/","customer success stories",{"text":259,"config":260},"Blog",{"href":261,"dataGaName":5,"dataGaLocation":44},"/fr-fr/blog/",{"text":263,"config":264},"Travail à distance",{"href":265,"dataGaName":266,"dataGaLocation":44},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":268,"config":269},"TeamOps",{"href":270,"dataGaName":271,"dataGaLocation":44},"/fr-fr/teamops/","teamops",{"title":273,"items":274},"Connecter",[275,280,285,290,295],{"text":276,"config":277},"Services GitLab",{"href":278,"dataGaName":279,"dataGaLocation":44},"/fr-fr/services/","services",{"text":281,"config":282},"Communauté",{"href":283,"dataGaName":284,"dataGaLocation":44},"/community/","community",{"text":286,"config":287},"Forum",{"href":288,"dataGaName":289,"dataGaLocation":44},"https://forum.gitlab.com/","forum",{"text":291,"config":292},"Événements",{"href":293,"dataGaName":294,"dataGaLocation":44},"/events/","events",{"text":296,"config":297},"Partenaires",{"href":298,"dataGaName":299,"dataGaLocation":44},"/fr-fr/partners/","partners",{"backgroundColor":301,"textColor":302,"text":303,"image":304,"link":308},"#2f2a6b","#fff","L'avenir du développement logiciel. Tendances et perspectives.",{"altText":305,"config":306},"carte promo The Source",{"src":307},"/images/navigation/the-source-promo-card.svg",{"text":309,"config":310},"Lire les articles les plus récents",{"href":311,"dataGaName":312,"dataGaLocation":44},"/fr-fr/the-source/","the source",{"text":314,"config":315,"lists":317},"Société",{"dataNavLevelOne":316},"company",[318],{"items":319},[320,325,331,333,338,343,348,353,358,363,368],{"text":321,"config":322},"À propos",{"href":323,"dataGaName":324,"dataGaLocation":44},"/fr-fr/company/","about",{"text":326,"config":327,"footerGa":330},"Emplois",{"href":328,"dataGaName":329,"dataGaLocation":44},"/jobs/","jobs",{"dataGaName":329},{"text":291,"config":332},{"href":293,"dataGaName":294,"dataGaLocation":44},{"text":334,"config":335},"Leadership",{"href":336,"dataGaName":337,"dataGaLocation":44},"/company/team/e-group/","leadership",{"text":339,"config":340},"Équipe",{"href":341,"dataGaName":342,"dataGaLocation":44},"/company/team/","team",{"text":344,"config":345},"Manuel",{"href":346,"dataGaName":347,"dataGaLocation":44},"https://handbook.gitlab.com/","handbook",{"text":349,"config":350},"Relations avec les investisseurs",{"href":351,"dataGaName":352,"dataGaLocation":44},"https://ir.gitlab.com/","investor relations",{"text":354,"config":355},"Centre de confiance",{"href":356,"dataGaName":357,"dataGaLocation":44},"/fr-fr/security/","trust center",{"text":359,"config":360},"Centre pour la transparence de l'IA",{"href":361,"dataGaName":362,"dataGaLocation":44},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":364,"config":365},"Newsletter",{"href":366,"dataGaName":367,"dataGaLocation":44},"/company/contact/","newsletter",{"text":369,"config":370},"Presse",{"href":371,"dataGaName":372,"dataGaLocation":44},"/press/","press",{"text":374,"config":375,"lists":376},"Nous contacter",{"dataNavLevelOne":316},[377],{"items":378},[379,382,387],{"text":51,"config":380},{"href":53,"dataGaName":381,"dataGaLocation":44},"talk to sales",{"text":383,"config":384},"Aide",{"href":385,"dataGaName":386,"dataGaLocation":44},"/support/","get help",{"text":388,"config":389},"Portail clients GitLab",{"href":390,"dataGaName":391,"dataGaLocation":44},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":393,"login":394,"suggestions":401},"Fermer",{"text":395,"link":396},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":397,"config":398},"gitlab.com",{"href":58,"dataGaName":399,"dataGaLocation":400},"search login","search",{"text":402,"default":403},"Suggestions",[404,407,412,414,419,424],{"text":73,"config":405},{"href":78,"dataGaName":406,"dataGaLocation":400},"GitLab Duo (AI)",{"text":408,"config":409},"Suggestions de code (IA)",{"href":410,"dataGaName":411,"dataGaLocation":400},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":24,"config":413},{"href":126,"dataGaName":24,"dataGaLocation":400},{"text":415,"config":416},"GitLab sur AWS",{"href":417,"dataGaName":418,"dataGaLocation":400},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":420,"config":421},"GitLab sur Google Cloud ",{"href":422,"dataGaName":423,"dataGaLocation":400},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":425,"config":426},"Pourquoi utiliser GitLab ?",{"href":86,"dataGaName":427,"dataGaLocation":400},"Why GitLab?",{"freeTrial":429,"mobileIcon":434,"desktopIcon":439},{"text":430,"config":431},"Commencer votre essai gratuit",{"href":432,"dataGaName":49,"dataGaLocation":433},"https://gitlab.com/-/trials/new/","nav",{"altText":435,"config":436},"Icône GitLab",{"src":437,"dataGaName":438,"dataGaLocation":433},"/images/brand/gitlab-logo-tanuki.svg","gitlab icon",{"altText":435,"config":440},{"src":441,"dataGaName":438,"dataGaLocation":433},"/images/brand/gitlab-logo-type.svg",{"freeTrial":443,"mobileIcon":447,"desktopIcon":449},{"text":444,"config":445},"En savoir plus sur GitLab Duo",{"href":78,"dataGaName":446,"dataGaLocation":433},"gitlab duo",{"altText":435,"config":448},{"src":437,"dataGaName":438,"dataGaLocation":433},{"altText":435,"config":450},{"src":441,"dataGaName":438,"dataGaLocation":433},"content:shared:fr-fr:main-navigation.yml","Main Navigation","shared/fr-fr/main-navigation.yml","shared/fr-fr/main-navigation",{"_path":456,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"title":457,"button":458,"config":462,"_id":464,"_type":30,"_source":32,"_file":465,"_stem":466,"_extension":35},"/shared/fr-fr/banner","GitLab Duo Agent Platform est maintenant disponible en version bêta publique !",{"text":84,"config":459},{"href":460,"dataGaName":461,"dataGaLocation":44},"/gitlab-duo/agent-platform/","duo banner",{"layout":463},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":468,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":469,"_id":675,"_type":30,"title":676,"_source":32,"_file":677,"_stem":678,"_extension":35},"/shared/fr-fr/main-footer",{"text":470,"source":471,"edit":477,"contribute":482,"config":487,"items":492,"minimal":666},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":472,"config":473},"Afficher le code source de la page",{"href":474,"dataGaName":475,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":478,"config":479},"Modifier cette page",{"href":480,"dataGaName":481,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":483,"config":484},"Veuillez contribuer",{"href":485,"dataGaName":486,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":488,"facebook":489,"youtube":490,"linkedin":491},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[493,516,570,603,637],{"title":62,"links":494,"subMenu":499},[495],{"text":496,"config":497},"Plateforme DevSecOps",{"href":71,"dataGaName":498,"dataGaLocation":476},"devsecops platform",[500],{"title":204,"links":501},[502,506,511],{"text":503,"config":504},"Voir les forfaits",{"href":206,"dataGaName":505,"dataGaLocation":476},"view plans",{"text":507,"config":508},"Pourquoi choisir GitLab Premium ?",{"href":509,"dataGaName":510,"dataGaLocation":476},"/fr-fr/pricing/premium/","why premium",{"text":512,"config":513},"Pourquoi choisir GitLab Ultimate ?",{"href":514,"dataGaName":515,"dataGaLocation":476},"/fr-fr/pricing/ultimate/","why ultimate",{"title":517,"links":518},"Solutions",[519,524,527,529,534,539,543,546,549,554,556,558,560,565],{"text":520,"config":521},"Transformation digitale",{"href":522,"dataGaName":523,"dataGaLocation":476},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":150,"config":525},{"href":145,"dataGaName":526,"dataGaLocation":476},"security & compliance",{"text":137,"config":528},{"href":121,"dataGaName":122,"dataGaLocation":476},{"text":530,"config":531},"Développement agile",{"href":532,"dataGaName":533,"dataGaLocation":476},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":535,"config":536},"Transformation cloud",{"href":537,"dataGaName":538,"dataGaLocation":476},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":540,"config":541},"SCM",{"href":134,"dataGaName":542,"dataGaLocation":476},"source code management",{"text":24,"config":544},{"href":126,"dataGaName":545,"dataGaLocation":476},"continuous integration & delivery",{"text":176,"config":547},{"href":178,"dataGaName":548,"dataGaLocation":476},"value stream management",{"text":550,"config":551},"GitOps",{"href":552,"dataGaName":553,"dataGaLocation":476},"/fr-fr/solutions/gitops/","gitops",{"text":189,"config":555},{"href":191,"dataGaName":192,"dataGaLocation":476},{"text":194,"config":557},{"href":196,"dataGaName":197,"dataGaLocation":476},{"text":199,"config":559},{"href":201,"dataGaName":202,"dataGaLocation":476},{"text":561,"config":562},"Formation",{"href":563,"dataGaName":564,"dataGaLocation":476},"/fr-fr/solutions/education/","education",{"text":566,"config":567},"Services financiers",{"href":568,"dataGaName":569,"dataGaLocation":476},"/fr-fr/solutions/finance/","financial services",{"title":209,"links":571},[572,574,576,578,581,583,587,589,591,593,595,597,599,601],{"text":221,"config":573},{"href":223,"dataGaName":224,"dataGaLocation":476},{"text":226,"config":575},{"href":228,"dataGaName":229,"dataGaLocation":476},{"text":231,"config":577},{"href":233,"dataGaName":234,"dataGaLocation":476},{"text":236,"config":579},{"href":238,"dataGaName":580,"dataGaLocation":476},"docs",{"text":259,"config":582},{"href":261,"dataGaName":5},{"text":584,"config":585},"Histoires de réussite client",{"href":586,"dataGaLocation":476},"/customers/",{"text":254,"config":588},{"href":256,"dataGaName":257,"dataGaLocation":476},{"text":263,"config":590},{"href":265,"dataGaName":266,"dataGaLocation":476},{"text":276,"config":592},{"href":278,"dataGaName":279,"dataGaLocation":476},{"text":268,"config":594},{"href":270,"dataGaName":271,"dataGaLocation":476},{"text":281,"config":596},{"href":283,"dataGaName":284,"dataGaLocation":476},{"text":286,"config":598},{"href":288,"dataGaName":289,"dataGaLocation":476},{"text":291,"config":600},{"href":293,"dataGaName":294,"dataGaLocation":476},{"text":296,"config":602},{"href":298,"dataGaName":299,"dataGaLocation":476},{"title":314,"links":604},[605,607,609,611,613,615,617,621,626,628,630,632],{"text":321,"config":606},{"href":323,"dataGaName":316,"dataGaLocation":476},{"text":326,"config":608},{"href":328,"dataGaName":329,"dataGaLocation":476},{"text":334,"config":610},{"href":336,"dataGaName":337,"dataGaLocation":476},{"text":339,"config":612},{"href":341,"dataGaName":342,"dataGaLocation":476},{"text":344,"config":614},{"href":346,"dataGaName":347,"dataGaLocation":476},{"text":349,"config":616},{"href":351,"dataGaName":352,"dataGaLocation":476},{"text":618,"config":619},"Sustainability",{"href":620,"dataGaName":618,"dataGaLocation":476},"/sustainability/",{"text":622,"config":623},"Diversité, inclusion et appartenance (DIB)",{"href":624,"dataGaName":625,"dataGaLocation":476},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":354,"config":627},{"href":356,"dataGaName":357,"dataGaLocation":476},{"text":364,"config":629},{"href":366,"dataGaName":367,"dataGaLocation":476},{"text":369,"config":631},{"href":371,"dataGaName":372,"dataGaLocation":476},{"text":633,"config":634},"Déclaration de transparence sur l'esclavage moderne",{"href":635,"dataGaName":636,"dataGaLocation":476},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":374,"links":638},[639,642,644,646,651,656,661],{"text":640,"config":641},"Échanger avec un expert",{"href":53,"dataGaName":54,"dataGaLocation":476},{"text":383,"config":643},{"href":385,"dataGaName":386,"dataGaLocation":476},{"text":388,"config":645},{"href":390,"dataGaName":391,"dataGaLocation":476},{"text":647,"config":648},"Statut",{"href":649,"dataGaName":650,"dataGaLocation":476},"https://status.gitlab.com/","status",{"text":652,"config":653},"Conditions d'utilisation",{"href":654,"dataGaName":655},"/terms/","terms of use",{"text":657,"config":658},"Déclaration de confidentialité",{"href":659,"dataGaName":660,"dataGaLocation":476},"/fr-fr/privacy/","privacy statement",{"text":662,"config":663},"Préférences en matière de cookies",{"dataGaName":664,"dataGaLocation":476,"id":665,"isOneTrustButton":107},"cookie preferences","ot-sdk-btn",{"items":667},[668,670,673],{"text":652,"config":669},{"href":654,"dataGaName":655,"dataGaLocation":476},{"text":671,"config":672},"Politique de confidentialité",{"href":659,"dataGaName":660,"dataGaLocation":476},{"text":662,"config":674},{"dataGaName":664,"dataGaLocation":476,"id":665,"isOneTrustButton":107},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",[680],{"_path":681,"_dir":682,"_draft":6,"_partial":6,"_locale":7,"content":683,"config":687,"_id":689,"_type":30,"title":18,"_source":32,"_file":690,"_stem":691,"_extension":35},"/en-us/blog/authors/jeremy-wagner","authors",{"name":18,"config":684},{"headshot":685,"ctfId":686},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663285/Blog/Author%20Headshots/jeremywagner-headshot.jpg","jeremywagner",{"template":688},"BlogAuthor","content:en-us:blog:authors:jeremy-wagner.yml","en-us/blog/authors/jeremy-wagner.yml","en-us/blog/authors/jeremy-wagner",{"_path":693,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"header":694,"eyebrow":695,"blurb":696,"button":697,"secondaryButton":701,"_id":703,"_type":30,"title":704,"_source":32,"_file":705,"_stem":706,"_extension":35},"/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":46,"config":698},{"href":699,"dataGaName":49,"dataGaLocation":700},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":51,"config":702},{"href":53,"dataGaName":54,"dataGaLocation":700},"content:shared:fr-fr:next-steps.yml","Next Steps","shared/fr-fr/next-steps.yml","shared/fr-fr/next-steps",1754424541027]