[{"data":1,"prerenderedAt":708},["ShallowReactive",2],{"/fr-fr/blog/how-to-deploy-react-to-amazon-s3/":3,"navigation-fr-fr":36,"banner-fr-fr":455,"footer-fr-fr":468,"Jeremy Wagner":680,"next-steps-fr-fr":693},{"_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\nd'héberger un site Web statique directement à partir d'un bucket S3,\négalement appelé compartiment. Lorsque vous hébergez votre site Web sur\nAmazon S3, son contenu est stocké dans un bucket S3 et servi directement à\nvos utilisateurs, sans besoin de ressources supplémentaires. \n\n\nCombinez cela avec Amazon CloudFront et vous obtiendrez une solution\nrentable et évolutive pour l'hébergement de vos sites Web statiques. Une\nfonctionnalité particulièrement utile pour les applications à page unique.\n\n\nDans cet article, nous vous guidons dans la configuration de votre bucket\nAmazon S3, la configuration d'OpenID Connect\n([OIDC](https://openid.net/developers/how-connect-works/ \"OpenID Connect\"))\ndans AWS et le déploiement de votre application sur Amazon S3 à l'aide d'un\npipeline GitLab [CI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/\n\"Qu'est-ce que le CI/CD ?\").\n\n\nÀ la fin de cet article, vous disposerez d'un [pipeline\nCI/CD](https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/ \"Qu'est-ce\nqu'un pipeline CI/CD ?\") construit dans GitLab qui se déploie\nautomatiquement dans votre bucket Amazon S3. \n\n\n## Prérequis\n\n\nPour ce guide, vous aurez besoin des éléments suivants :\n\n\n- [Node.js](https://nodejs.org/fr) >= 14.0.0 et npm >= 5.6 installés sur\nvotre système\n\n- [Git](https://git-scm.com/) installé sur votre système\n\n- Un [compte GitLab](https://gitlab.com/-/trials/new)\n\n- Un [compte AWS](https://aws.amazon.com/fr/free/)\n\n\nDans un [précédent\ntutoriel](https://about.gitlab.com/blog/how-to-automate-testing-for-a-react-application-with-gitlab/)\nnous vous avons expliqué comment : \n\n- créer une nouvelle application React,\n\n- exécuter des tests unitaires dans le cadre du processus CI dans GitLab,\n\n- générer les résultats des tests ainsi que la couverture de code dans le\npipeline.\n\n\nCet article constitue la [suite de ce\nprojet](https://gitlab.com/guided-explorations/engineering-tutorials/react-unit-testing).\nLibre à vous de le parcourir et de le dupliquer (fork). \n\n\n## Configuration de votre bucket S3 \n\n\nPour commencer, vous devez configurer votre bucket Amazon S3. \n\n\n### Créez votre compartiment\n\n\nAprès vous être connecté à votre compte AWS, recherchez « S3 » à l'aide de\nla barre de recherche et sélectionnez le service S3. Cela ouvrira la page\nd'accueil du service.\n\n\nVous devriez immédiatement voir l'option permettant de créer un bucket\n(compartiment). Ce compartiment est l'endroit où vous allez stocker votre\napplication React une fois créée. Cliquez sur le bouton « Créer un\ncompartiment » pour continuer.\n\n\n![Création d'un bucket\nS3](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/create_bucket.png){:\n.shadow}\n\n\nDonnez un nom à votre compartiment, sélectionnez votre région, laissez le\nreste des paramètres par défaut (nous y reviendrons plus tard) et continuez\nen cliquant sur le bouton « Créer un compartiment ». \n\n\nLorsque vous nommez votre compartiment, il est important de se rappeler que\nle nom doit être unique et suivre les règles de nommage des compartiments.\nNous avons nommé le nôtre `jw-gl-react`.\n\n\nUne fois votre compartiment créé, vous devriez être redirigé vers une liste\nde vos compartiments, comme montré ci-dessous. \n\n\n![Liste bucket S3\nAWS](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/bucket_list.png){:\n.shadow}\n\n\n### Configurez l'hébergement de site web statique \n\n\nL'étape suivante consiste à configurer l'hébergement de site web statique.\nOuvrez votre compartiment en cliquant sur son nom. Sélectionnez l'onglet «\nPropriétés »  et faites défiler vers le bas pour trouver l'option\nd'hébergement de site web statique.\n\n\n![Configuration de l'hébergement de site web\nstatique](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/static_hosting_1.png){:\n.shadow}\n\n\nCliquez sur « Modifier », puis activez l'hébergement de site web statique.\nPour les documents d’index et d’erreur, saisissez `index.html`, puis cliquez\nsur « Enregistrer les modifications ».\n\n\n![Activation de l'hébergement de site web statique sur Amazon\nS3](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/static_hosting_2.png){:\n.shadow}\n\n\n### Configurez les autorisations de votre application React\n\n\nMaintenant que vous avez activé l'hébergement de site web statique, vous\ndevez mettre à jour vos autorisations afin que votre audience puisse accéder\nà votre site web. Revenez à votre compartiment et sélectionnez l'onglet «\nAutorisations ».\n\n\nSous « Bloquer l'accès public » (paramètres du compartiment), cliquez sur «\nModifier », décochez « Bloquer tous les accès publics » et continuez en\ncliquant sur « Enregistrer les modifications ».\n\n\n![Bloquer l'accès\npublic](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/block_access_1.png){:\n.shadow}\n\n\nVotre page devrait maintenant ressembler à ceci : \n\n\n![Configurer permission bucket S3\nAWS](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/block_access_2.png){:\n.shadow}\n\n\nMaintenant, vous devez modifier la stratégie de compartiment. Pour cela,\ncliquez sur le bouton « Modifier » dans la section « Stratégie de\ncompartiment » et collez le code suivant :\n\n\n```javascript\n\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\n\nÀ la ligne « Ressource », remplacez `jw-gl-react`  par le nom de votre\ncompartiment et enregistrez les modifications.\n\n\nVotre compartiment devrait ressembler à ceci : \n\n\n![Bucket S3 accès\npublic](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/block_access_3.png){:\n.shadow}\n\n\n## Chargement de votre application React\n\n\nMaintenant, créons votre application React et publions-la manuellement dans\nvotre bucket S3.\n\n\nPour créer l'application, assurez-vous que votre projet soit cloné sur votre\nmachine locale et exécutez la commande suivante dans votre terminal à\nl'intérieur du répertoire de votre dépôt :\n\n\n```\n\nnpm run build\n\n```\n\nCela créera un dossier `build` à l'intérieur du répertoire de votre dépôt. \n\n\nDans votre compartiment, cliquez sur le bouton « Charger »\n\n\n![Chargement de l'application\nReact](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/upload_1.png){:\n.shadow}\n\n\nFaites glisser le contenu de votre dossier nouvellement créé (et non le\ndossier lui-même) dans la zone de chargement. Cela chargera le contenu de\nvotre application React dans votre compartiment. Assurez-vous de cliquer sur\n« Charger » en bas de la page pour démarrer le chargement.\n\n\nRevenez maintenant à l'onglet « Propriétés » de votre compartiment et faites\ndéfiler vers le bas pour trouver l'URL de votre site web statique.\n\n\n![URL du site web\nstatique](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/upload_2.png){:\n.shadow}\n\n\nCliquez sur le lien et vous devriez voir votre application React\nnouvellement créée s'ouvrir dans votre navigateur.\n\n\n![Application React\ndéployée](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/manual_deploy.png){:\n.shadow}\n\n\n## Configuration d’OpenID Connect dans AWS\n\n\nPour déployer sur votre bucket S3 depuis GitLab, nous allons utiliser un job\nGitLab CI/CD pour  recevoir des informations d'identification temporaires\nd'AWS sans avoir besoin de stocker des secrets. Pour ce faire, nous allons\nconfigurer OpenID Connect pour la fédération d'identité entre GitLab et AWS.\nNous suivrons la [documentation de GitLab\nassociée](https://docs.gitlab.com/ee/ci/cloud_services/aws/).\n\n\n### Ajoutez un fournisseur d'identité \n\n\nLa première étape consiste à ajouter GitLab en tant que fournisseur\nd’identité OpenID Connect (OIDC) dans IAM. AWS fournit des\n[instructions](https://docs.aws.amazon.com/fr_fr/IAM/latest/UserGuide/id_roles_providers_create_oidc.html),\nmais nous allons les parcourir étape par étape dans ce guide.\n\n\nOuvrez tout d'abord la console IAM dans AWS.\n\n\n![Console IAM dans\nAWS](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/iam_1.png){:\n.shadow} \n\n\nDans le volet de navigation de gauche, sous « Gestion des accès »,\nchoisissez « Fournisseurs d'identité », puis « Ajouter un fournisseur ».\nPour le type de fournisseur, sélectionnez « OpenID Connect ».\n\n\nPour l'URL du fournisseur, saisissez l'adresse de votre instance GitLab,\ntelle que `https://gitlab.com` ou `https://gitlab.example.com`.\n\n\nPour « Audience », saisissez quelque chose de générique mais spécifique à\nvotre application React. Dans notre cas, nous allons utiliser `react_s3_gl`.\nVeillez à choisir quelque chose qui ne soit pas facile à deviner et prenez\nnote de cette valeur, car vous l'utiliserez pour définir l'`ID_TOKEN` dans\nvotre fichier `.gitLab-ci.yml`.\n\n\nAprès avoir saisi l'URL du fournisseur, cliquez sur « Obtenir une empreinte\nnumérique »  pour vérifier le certificat du serveur de votre fournisseur\nd'identité. Ensuite, continuez et cliquez sur « Ajouter un fournisseur »\npour terminer.\n\n\n### Créez une politique d’autorisations\n\n\nAprès avoir créé le fournisseur d'identité, vous devez créer une politique\nd’autorisations. \n\n\nDepuis le tableau de bord IAM, sous « Gestion des accès », sélectionnez «\nPolitiques » puis « Créer une politique ». Sélectionnez l'onglet JSON et\ncollez le code suivant en remplaçant `jw-gl-react` par le nom de votre\ncompartiment à la ligne « Ressource ».\n\n\n```javascript\n\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```\n\n\nSélectionnez le bouton « Suivant : Balises » , ajoutez les balises\nsouhaitées, puis sélectionnez le bouton « Suivant : Confirmer ». Entrez un\nnom pour votre politique avant de terminer sa création.\n\n\n### Configurez le rôle\n\n\nIl est maintenant temps d'ajouter le rôle. Depuis le tableau de bord IAM,\nsous « Gestion des accès  », sélectionnez « Rôles », puis cliquez sur «\nCréer un rôle » et choisissez « Identité Web ».\n\n\nDans la section « Identité Web », sélectionnez le fournisseur d'identité que\nvous avez créé précédemment. Pour l'audience, sélectionnez également\nl'audience que vous avez créée précédemment. Cliquez sur le bouton « Suivant\n» pour continuer.\n\n\nSi vous souhaitez limiter l'autorisation à un groupe, un projet, une branche\nou une balise spécifique, vous pouvez créer une « Politique d’approbation\npersonnalisée » (Custom Trust Policy) au lieu d'une « Identité Web ».\n\n\nPour une liste complète des types de filtres qu'il est possible d'appliquer,\n[consultez notre\ndocumentation](https://docs.gitlab.com/ee/ci/cloud_services/index.html#configure-a-conditional-role-with-oidc-claims). \n\n\n![Configuration du rôle dans\nl'IAM](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/iam_2.png){:\n.shadow}\n\n\nAu cours de l'étape « Ajout des autorisations », sélectionnez la politique\nque vous avez créée, puis cliquez sur « Suivant » pour continuer. Donnez un\nnom à votre rôle et cliquez sur « Créer un rôle ».\n\n\nOuvrez le rôle que vous venez de créer. Dans la section « Récapitulatif »,\nrecherchez le nom de ressource Amazon (ARN) et enregistrez-le dans un\nendroit sécurisé. Vous l'utiliserez dans votre pipeline.\n\n\n![Déployer le rôle dans\nl'IAM](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/iam_3.png){:\n.shadow}\n\n\n## Déploiement sur votre compartiment Amazon S3 à l'aide d'un pipeline\nGitLab CI/CD\n\n\nDans votre projet, créez deux [variables\nCI/CD](https://docs.gitlab.com/ci/variables/#define-a-cicd-variable-in-the-ui)\n:\n\n\n- La première variable doit être nommée `ROLE_ARN`. Pour la valeur, collez\nl'ARN du rôle que vous venez de créer.\n\n- La deuxième variable doit être nommée `S3_BUCKET`. Pour la valeur, collez\nle nom du compartiment que vous avez créé plus tôt.\n\n\nPour des raisons de sécurité, dans cet article nous avons choisi de masquer\nnos variables.\n\n\n### Récupérez vos identifiants temporaires\n\n\nDans votre fichier `.gitlab-ci.yml`, collez le code suivant :\n\n\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\n\nCela va utiliser le service de jeton de sécurité AWS (AWS Security Token\nService) pour générer des identifiants temporaires (3 600 secondes) en\nutilisant le rôle OpenID Connect que vous avez créé précédemment.\n\n\n### Créez le job de déploiement pour votre application React\n\n\nMaintenant, ajoutons un job de compilation et de déploiement pour créer\nvotre application et la déployer sur votre bucket S3.\n\n\nTout d'abord, mettez à jour les étapes dans votre fichier `.gitlab-ci.yml`\npour inclure une étape `build` et `deploy`, comme indiqué ci-dessous :\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n```\n\n\nEnsuite, ajoutons un job pour créer votre application. Collez le code\nsuivant dans votre fichier `.gitLab-ci.yml` :\n\n\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\n\nCela va exécuter `npm run build` si le changement se produit sur la branche\n`main` et télécharger le répertoire de compilation (build directory) en tant\nqu'artefact à utiliser lors de l'étape suivante.\n\n\nEnsuite, ajoutons un job qui sera réellement déployé sur votre bucket S3.\nCollez le code suivant dans votre fichier `.gitLab-ci.yml` :\n\n\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\n\nCela utilise les [ancres\nYAML](https://docs.gitlab.com/ee/ci/yaml/yaml_optimization.html#yaml-anchors-for-scripts)\npour exécuter le script `assume_role`, puis utilise `aws cli` pour\ntélécharger votre artefact de compilation dans le compartiment que vous avez\ndéfini en tant que variable. Ce job ne s'exécute que si le changement se\nproduit sur la branche `main`.\n\n\nAssurez-vous que la valeur `aud` correspond à celle que vous avez saisie\npour votre audience au moment de la configuration du fournisseur d'identité.\nDans notre cas, nous avons saisi `react-s3_gl`.\n\n\nVotre fichier `.gitLab-ci.yml` complet devrait ressembler à ceci :\n\n\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\n### Testez votre pipeline\n\n\nPour tester votre pipeline, dans `App.js`, modifiez cette ligne `Edit\n\u003Ccode>src/App.js\u003C/code> and save to reload.` par ceci :  `This was deployed\nfrom GitLab`. Maintenant, validez vos modifications dans la branche `main`.\nLe pipeline devrait se lancer et une fois terminé avec succès, vous devriez\nvoir votre application mise à jour avec l'URL de votre site web statique.\n\n\n![Application React mise à\njour](https://about.gitlab.com/images/blogimages/2023-02-10-how-to-deploy-react-to-amazon-s3/auto_deploy.png){:\n.shadow}\n\n\nVous disposez désormais d'un pipeline CI/CD construit dans GitLab qui reçoit\ndes informations d'identification temporaires d'AWS à l'aide d'OpenID\nConnect et qui se déploie automatiquement dans votre compartiment Amazon S3.\nPour aller plus loin, vous pouvez [sécuriser votre\napplication](https://docs.gitlab.com/ee/user/application_security/secure_your_application.html)\navec les outils de sécurité intégrés de GitLab.\n\n\nDécouvrez [tout le\ncode](https://gitlab.com/guided-explorations/engineering-tutorials/react-s3)\nde ce projet.\n","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,154,159],{"text":150,"config":151},"Application Security Testing",{"href":152,"dataGaName":153,"dataGaLocation":44},"/solutions/application-security-testing/","Application security testing",{"text":155,"config":156},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":157,"dataGaLocation":44,"dataGaName":158},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":160,"config":161},"Software Compliance",{"href":162,"dataGaName":160,"dataGaLocation":44},"/solutions/software-compliance/",{"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},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.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},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":435,"config":440},{"src":441,"dataGaName":438,"dataGaLocation":433},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.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,"titleMobile":457,"button":458,"config":463,"_id":465,"_type":30,"_source":32,"_file":466,"_stem":467,"_extension":35},"/shared/fr-fr/banner","La plateforme GitLab Duo Agent est maintenant disponible en version bêta publique !",{"text":459,"config":460},"Essayer la version bêta",{"href":461,"dataGaName":462,"dataGaLocation":44},"/fr-fr/gitlab-duo/agent-platform/","duo banner",{"layout":464},"release","content:shared:fr-fr:banner.yml","shared/fr-fr/banner.yml","shared/fr-fr/banner",{"_path":469,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"data":470,"_id":676,"_type":30,"title":677,"_source":32,"_file":678,"_stem":679,"_extension":35},"/shared/fr-fr/main-footer",{"text":471,"source":472,"edit":478,"contribute":483,"config":488,"items":493,"minimal":667},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence",{"text":473,"config":474},"Afficher le code source de la page",{"href":475,"dataGaName":476,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":479,"config":480},"Modifier cette page",{"href":481,"dataGaName":482,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":484,"config":485},"Veuillez contribuer",{"href":486,"dataGaName":487,"dataGaLocation":477},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":489,"facebook":490,"youtube":491,"linkedin":492},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[494,517,571,604,638],{"title":62,"links":495,"subMenu":500},[496],{"text":497,"config":498},"Plateforme DevSecOps",{"href":71,"dataGaName":499,"dataGaLocation":477},"devsecops platform",[501],{"title":204,"links":502},[503,507,512],{"text":504,"config":505},"Voir les forfaits",{"href":206,"dataGaName":506,"dataGaLocation":477},"view plans",{"text":508,"config":509},"Pourquoi choisir GitLab Premium ?",{"href":510,"dataGaName":511,"dataGaLocation":477},"/fr-fr/pricing/premium/","why premium",{"text":513,"config":514},"Pourquoi choisir GitLab Ultimate ?",{"href":515,"dataGaName":516,"dataGaLocation":477},"/fr-fr/pricing/ultimate/","why ultimate",{"title":518,"links":519},"Solutions",[520,525,528,530,535,540,544,547,550,555,557,559,561,566],{"text":521,"config":522},"Transformation digitale",{"href":523,"dataGaName":524,"dataGaLocation":477},"/fr-fr/topics/digital-transformation/","digital transformation",{"text":526,"config":527},"Sécurité et conformité",{"href":152,"dataGaName":153,"dataGaLocation":477},{"text":137,"config":529},{"href":121,"dataGaName":122,"dataGaLocation":477},{"text":531,"config":532},"Développement agile",{"href":533,"dataGaName":534,"dataGaLocation":477},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":536,"config":537},"Transformation cloud",{"href":538,"dataGaName":539,"dataGaLocation":477},"/fr-fr/topics/cloud-native/","cloud transformation",{"text":541,"config":542},"SCM",{"href":134,"dataGaName":543,"dataGaLocation":477},"source code management",{"text":24,"config":545},{"href":126,"dataGaName":546,"dataGaLocation":477},"continuous integration & delivery",{"text":176,"config":548},{"href":178,"dataGaName":549,"dataGaLocation":477},"value stream management",{"text":551,"config":552},"GitOps",{"href":553,"dataGaName":554,"dataGaLocation":477},"/fr-fr/solutions/gitops/","gitops",{"text":189,"config":556},{"href":191,"dataGaName":192,"dataGaLocation":477},{"text":194,"config":558},{"href":196,"dataGaName":197,"dataGaLocation":477},{"text":199,"config":560},{"href":201,"dataGaName":202,"dataGaLocation":477},{"text":562,"config":563},"Formation",{"href":564,"dataGaName":565,"dataGaLocation":477},"/fr-fr/solutions/education/","education",{"text":567,"config":568},"Services financiers",{"href":569,"dataGaName":570,"dataGaLocation":477},"/fr-fr/solutions/finance/","financial services",{"title":209,"links":572},[573,575,577,579,582,584,588,590,592,594,596,598,600,602],{"text":221,"config":574},{"href":223,"dataGaName":224,"dataGaLocation":477},{"text":226,"config":576},{"href":228,"dataGaName":229,"dataGaLocation":477},{"text":231,"config":578},{"href":233,"dataGaName":234,"dataGaLocation":477},{"text":236,"config":580},{"href":238,"dataGaName":581,"dataGaLocation":477},"docs",{"text":259,"config":583},{"href":261,"dataGaName":5},{"text":585,"config":586},"Histoires de réussite client",{"href":587,"dataGaLocation":477},"/customers/",{"text":254,"config":589},{"href":256,"dataGaName":257,"dataGaLocation":477},{"text":263,"config":591},{"href":265,"dataGaName":266,"dataGaLocation":477},{"text":276,"config":593},{"href":278,"dataGaName":279,"dataGaLocation":477},{"text":268,"config":595},{"href":270,"dataGaName":271,"dataGaLocation":477},{"text":281,"config":597},{"href":283,"dataGaName":284,"dataGaLocation":477},{"text":286,"config":599},{"href":288,"dataGaName":289,"dataGaLocation":477},{"text":291,"config":601},{"href":293,"dataGaName":294,"dataGaLocation":477},{"text":296,"config":603},{"href":298,"dataGaName":299,"dataGaLocation":477},{"title":314,"links":605},[606,608,610,612,614,616,618,622,627,629,631,633],{"text":321,"config":607},{"href":323,"dataGaName":316,"dataGaLocation":477},{"text":326,"config":609},{"href":328,"dataGaName":329,"dataGaLocation":477},{"text":334,"config":611},{"href":336,"dataGaName":337,"dataGaLocation":477},{"text":339,"config":613},{"href":341,"dataGaName":342,"dataGaLocation":477},{"text":344,"config":615},{"href":346,"dataGaName":347,"dataGaLocation":477},{"text":349,"config":617},{"href":351,"dataGaName":352,"dataGaLocation":477},{"text":619,"config":620},"Sustainability",{"href":621,"dataGaName":619,"dataGaLocation":477},"/sustainability/",{"text":623,"config":624},"Diversité, inclusion et appartenance (DIB)",{"href":625,"dataGaName":626,"dataGaLocation":477},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":354,"config":628},{"href":356,"dataGaName":357,"dataGaLocation":477},{"text":364,"config":630},{"href":366,"dataGaName":367,"dataGaLocation":477},{"text":369,"config":632},{"href":371,"dataGaName":372,"dataGaLocation":477},{"text":634,"config":635},"Déclaration de transparence sur l'esclavage moderne",{"href":636,"dataGaName":637,"dataGaLocation":477},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":374,"links":639},[640,643,645,647,652,657,662],{"text":641,"config":642},"Échanger avec un expert",{"href":53,"dataGaName":54,"dataGaLocation":477},{"text":383,"config":644},{"href":385,"dataGaName":386,"dataGaLocation":477},{"text":388,"config":646},{"href":390,"dataGaName":391,"dataGaLocation":477},{"text":648,"config":649},"Statut",{"href":650,"dataGaName":651,"dataGaLocation":477},"https://status.gitlab.com/","status",{"text":653,"config":654},"Conditions d'utilisation",{"href":655,"dataGaName":656},"/terms/","terms of use",{"text":658,"config":659},"Déclaration de confidentialité",{"href":660,"dataGaName":661,"dataGaLocation":477},"/fr-fr/privacy/","privacy statement",{"text":663,"config":664},"Préférences en matière de cookies",{"dataGaName":665,"dataGaLocation":477,"id":666,"isOneTrustButton":107},"cookie preferences","ot-sdk-btn",{"items":668},[669,671,674],{"text":653,"config":670},{"href":655,"dataGaName":656,"dataGaLocation":477},{"text":672,"config":673},"Politique de confidentialité",{"href":660,"dataGaName":661,"dataGaLocation":477},{"text":663,"config":675},{"dataGaName":665,"dataGaLocation":477,"id":666,"isOneTrustButton":107},"content:shared:fr-fr:main-footer.yml","Main Footer","shared/fr-fr/main-footer.yml","shared/fr-fr/main-footer",[681],{"_path":682,"_dir":683,"_draft":6,"_partial":6,"_locale":7,"content":684,"config":688,"_id":690,"_type":30,"title":18,"_source":32,"_file":691,"_stem":692,"_extension":35},"/en-us/blog/authors/jeremy-wagner","authors",{"name":18,"config":685},{"headshot":686,"ctfId":687},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663285/Blog/Author%20Headshots/jeremywagner-headshot.jpg","jeremywagner",{"template":689},"BlogAuthor","content:en-us:blog:authors:jeremy-wagner.yml","en-us/blog/authors/jeremy-wagner.yml","en-us/blog/authors/jeremy-wagner",{"_path":694,"_dir":38,"_draft":6,"_partial":6,"_locale":7,"header":695,"eyebrow":696,"blurb":697,"button":698,"secondaryButton":702,"_id":704,"_type":30,"title":705,"_source":32,"_file":706,"_stem":707,"_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":699},{"href":700,"dataGaName":49,"dataGaLocation":701},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":51,"config":703},{"href":53,"dataGaName":54,"dataGaLocation":701},"content:shared:fr-fr:next-steps.yml","Next Steps","shared/fr-fr/next-steps.yml","shared/fr-fr/next-steps",1758326264865]