[{"data":1,"prerenderedAt":2541},["ShallowReactive",2],{"/fr-fr/blog/secure-ai-agent-deployment-to-gke":3,"navigation-fr-fr":1759,"banner-fr-fr":2193,"footer-fr-fr":2201,"blog-post-authors-fr-fr-Regnard Raquedan":2439,"blog-related-posts-fr-fr-secure-ai-agent-deployment-to-gke":2454,"blog-promotions-fr-fr":2479,"next-steps-fr-fr":2532},{"id":4,"title":5,"authors":6,"body":8,"category":1738,"date":1739,"description":1740,"extension":1741,"externalUrl":1742,"faq":1742,"featured":1743,"heroImage":1744,"meta":1745,"navigation":288,"path":1746,"seo":1747,"slug":1750,"stem":1751,"tags":1752,"template":1757,"updatedDate":1742,"__hash__":1758},"blogPosts/fr-fr/blog/secure-ai-agent-deployment-to-gke.md","Déploiement sécurisé d'agents d'IA sur GKE",[7],"Regnard Raquedan",{"type":9,"value":10,"toc":1727},"minimark",[11,28,33,48,51,58,64,70,73,77,80,93,96,107,111,116,119,126,129,143,146,150,153,182,185,191,202,205,209,219,225,264,272,1137,1142,1145,1148,1151,1650,1654,1657,1664,1678,1682,1685,1688,1700,1723],[12,13,14,15,21,22,27],"p",{},"Créer des ",[16,17,20],"a",{"href":18,"rel":19},"https://about.gitlab.com/fr-fr/gitlab-duo-agent-platform/",[],"agents d'IA"," est passionnant, mais leur déploiement sécurisé en production est parfois compliqué. Dans ce tutoriel, vous découvrirez comment ",[16,23,26],{"href":24,"rel":25},"https://cloud.google.com/blog/topics/partners/understand-the-google-cloud-gitlab-integration",[],"l'intégration native de GitLab avec Google Cloud"," facilite le déploiement d'agents d'IA vers Google Kubernetes Engine (GKE), avec scans de sécurité intégrés et sans clés de compte de service.",[29,30,32],"h2",{"id":31},"pourquoi-choisir-gke-pour-déployer-vos-agents-dia","Pourquoi choisir GKE pour déployer vos agents d'IA ?",[12,34,35,36,41,42,47],{},"GKE offre une orchestration d'entreprise qui s'intègre parfaitement aux pipelines ",[16,37,40],{"href":38,"rel":39},"https://about.gitlab.com/fr-fr/topics/ci-cd/",[],"CI/CD"," de GitLab grâce à l'authentification OpenID Connect (OIDC). Votre équipe de développement peut déployer des agents d'IA tout en conservant une visibilité, une conformité et un contrôle complets sur votre infrastructure cloud. Ce guide utilise l'Agent Development Kit (",[16,43,46],{"href":44,"rel":45},"https://developers.googleblog.com/en/agent-development-kit-easy-to-build-multi-agent-applications/",[],"ADK",") de Google afin de créer l'application, ce qui garantit une intégration fluide lors du déploiement avec GitLab.",[12,49,50],{},"Voici trois avantages clés de cette approche :",[12,52,53,57],{},[54,55,56],"strong",{},"Contrôle total de l'infrastructure :"," vos données, vos règles, votre environnement. Vous conservez un contrôle complet sur l'emplacement d'exécution de vos agents d'IA et de leur configuration.",[12,59,60,63],{},[54,61,62],{},"Intégration native avec GitLab :"," pas de solution de contournement complexe. Vos pipelines existants fonctionnent immédiatement grâce à l'intégration native de GitLab avec Google Cloud.",[12,65,66,69],{},[54,67,68],{},"Mise à l'échelle de niveau production :"," GKE gère automatiquement la mise à l'échelle et l'orchestration interne à mesure que vos charges de travail d'IA augmentent.",[12,71,72],{},"Avec GKE, GitLab offre la fiabilité d'entreprise dont vos déploiements d'IA ont besoin sans sacrifier l'expérience développeur que vos équipes attendent.",[29,74,76],{"id":75},"prérequis","Prérequis",[12,78,79],{},"Avant de commencer, assurez-vous d'avoir activé ces API :",[81,82,83,87,90],"ul",{},[84,85,86],"li",{},"API GKE",[84,88,89],{},"API Artifact Registry",[84,91,92],{},"API Vertex AI",[12,94,95],{},"Assurez-vous également de disposer des éléments suivant :",[81,97,98,101,104],{},[84,99,100],{},"Un projet GitLab créé",[84,102,103],{},"Un cluster GKE provisionné",[84,105,106],{},"Un dépôt Artifact Registry créé",[29,108,110],{"id":109},"le-processus-de-déploiement","Le processus de déploiement",[112,113,115],"h3",{"id":114},"_1-configurer-iam-et-les-autorisations-sur-gitlab","1. Configurer IAM et les autorisations sur GitLab",[12,117,118],{},"Accédez à vos intégrations GitLab afin de configurer l'authentification Google Cloud (IAM).",[12,120,121,122,125],{},"Accédez à ",[54,123,124],{},"Paramètres > Intégrations"," et configurez l'intégration Google Cloud. Si vous utilisez une intégration au niveau du groupe, notez que les paramètres par défaut sont déjà hérités par les projets. Il vous suffit donc de configurer vos paramètres une fois au niveau du groupe pour que tous les projets en bénéficient et les héritent.",[12,127,128],{},"Pour configurer les paramètres, vous devez fournir les éléments suivants :",[81,130,131,134,137,140],{},[84,132,133],{},"ID du projet",[84,135,136],{},"Numéro du projet",[84,138,139],{},"ID du pool d'identités de charge de travail",[84,141,142],{},"ID du fournisseur",[12,144,145],{},"Une fois ces informations renseignées, GitLab fournit un script à exécuter dans Google Cloud Console via Cloud Shell. Le résultat de l'exécution de ce script est un pool de fédération d'identité de charge de travail avec l'identité de service de compte principal nécessaire pour permettre l'accès approprié.",[112,147,149],{"id":148},"_2-configurer-lintégration-à-artifact-registry","2. Configurer l'intégration à Artifact Registry",[12,151,152],{},"Toujours dans les paramètres d'intégration de GitLab, configurez la gestion des artefacts :",[154,155,156,163,169],"ol",{},[84,157,158,159,162],{},"Cliquez sur ",[54,160,161],{},"Gestion des artefacts",".",[84,164,165,166,162],{},"Sélectionnez ",[54,167,168],{},"Google Artifact Registry",[84,170,171,172],{},"Indiquez les éléments suivants :",[81,173,174,176,179],{},[84,175,133],{},[84,177,178],{},"Nom du dépôt (créé au préalable)",[84,180,181],{},"Emplacement du dépôt",[12,183,184],{},"GitLab fournit un autre script à exécuter dans Google Cloud Console.",[12,186,187,190],{},[54,188,189],{},"Important :"," avant de continuer, ajoutez ces rôles supplémentaires au pool de fédération d'identité de charge de travail :",[81,192,193,196,199],{},[84,194,195],{},"Utilisateur de compte de service",[84,197,198],{},"Développeur Kubernetes",[84,200,201],{},"Observateur de cluster Kubernetes",[12,203,204],{},"Ces autorisations permettent à GitLab de déployer vers GKE dans les étapes suivantes.",[112,206,208],{"id":207},"_3-créer-le-pipeline-cicd","3. Créer le pipeline CI/CD",[12,210,211,212,218],{},"Voici maintenant la partie essentielle : la création du ",[16,213,217],{"href":214,"rel":215,"title":216},"https://about.gitlab.com/fr-fr/topics/ci-cd/cicd-pipeline/",[],"Pipeline CI/CD","pipeline CI/CD"," pour le déploiement.",[12,220,121,221,224],{},[54,222,223],{},"Compilation > Éditeur de pipeline"," et définissez votre pipeline en quatre étapes :",[81,226,227,240,246,252],{},[84,228,229,232,233,239],{},[54,230,231],{},"Build :"," ",[16,234,238],{"href":235,"rel":236,"title":237},"https://about.gitlab.com/fr-fr/blog/what-is-docker-comprehensive-guide/",[],"Qu'est-ce que Docker ?","Docker"," crée l'image de conteneur.",[84,241,242,245],{},[54,243,244],{},"Test :"," GitLab Auto DevOps fournit des scans de sécurité intégrés afin de garantir l'absence de vulnérabilités.",[84,247,248,251],{},[54,249,250],{},"Importation :"," utilise le composant CI/CD intégré de GitLab pour effectuer un push vers Google Artifact Registry.",[84,253,254,257,258,263],{},[54,255,256],{},"Déploiement :"," utilise la configuration ",[16,259,262],{"href":260,"rel":261,"title":262},"https://about.gitlab.com/fr-fr/blog/kubernetes-the-container-orchestration-solution/",[],"Kubernetes"," pour déployer vers GKE.",[12,265,266,267,271],{},"Voici le fichier ",[268,269,270],"code",{},".gitlab-ci.yml"," complet :",[273,274,279],"pre",{"className":275,"code":276,"language":277,"meta":278,"style":278},"language-yaml shiki shiki-themes github-light","\n\n\ndefault:\n  tags: [ saas-linux-2xlarge-amd64 ]\n\nstages:\n  - build\n  - test\n  - upload\n  - deploy\n\nvariables:\n  GITLAB_IMAGE: $CI_REGISTRY_IMAGE/main:$CI_COMMIT_SHORT_SHA\n  AR_IMAGE: $GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/main:$CI_COMMIT_SHORT_SHA\n  GCP_PROJECT_ID: \"your-project-id\"\n  GKE_CLUSTER: \"your-cluster\"\n  GKE_REGION: \"us-central1\"\n  KSA_NAME: \"ai-agent-ksa\"\n\nbuild:\n  image: docker:24.0.5\n  stage: build\n  services:\n    - docker:24.0.5-dind\n  before_script:\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n  script:\n    - docker build -t $GITLAB_IMAGE .\n    - docker push $GITLAB_IMAGE\n\ninclude:\n  - template: Jobs/Dependency-Scanning.gitlab-ci.yml\n  - template: Jobs/Container-Scanning.gitlab-ci.yml\n  - template: Jobs/Secret-Detection.gitlab-ci.yml\n  - component: gitlab.com/google-gitlab-components/artifact-registry/upload-artifact-registry@main\n    inputs:\n      stage: upload\n      source: $GITLAB_IMAGE\n      target: $AR_IMAGE\n\ndeploy:\n  stage: deploy\n  image: google/cloud-sdk:slim\n  identity: google_cloud\n  before_script:\n    - apt-get update && apt-get install -y kubectl google-cloud-sdk-gke-gcloud-auth-plugin\n    - gcloud container clusters get-credentials $GKE_CLUSTER --region $GKE_REGION --project $GCP_PROJECT_ID\n  script:\n    - |\n      kubectl apply -f - \u003C\u003CEOF\n      apiVersion: apps/v1\n      kind: Deployment\n      metadata:\n        name: ai-agent\n        namespace: default\n      spec:\n        replicas: 2\n        selector:\n          matchLabels:\n            app: ai-agent\n        template:\n          metadata:\n            labels:\n              app: ai-agent\n          spec:\n            serviceAccountName: $KSA_NAME\n            containers:\n            - name: ai-agent\n              image: $AR_IMAGE\n              ports:\n              - containerPort: 8080\n              resources:\n                requests: {cpu: 500m, memory: 1Gi}\n                limits: {cpu: 2000m, memory: 4Gi}\n              livenessProbe:\n                httpGet: {path: /health, port: 8080}\n                initialDelaySeconds: 60\n              readinessProbe:\n                httpGet: {path: /health, port: 8080}\n                initialDelaySeconds: 30\n      ---\n      apiVersion: v1\n      kind: Service\n      metadata:\n        name: ai-agent-service\n        namespace: default\n      spec:\n        type: LoadBalancer\n        ports:\n        - port: 80\n          targetPort: 8080\n        selector:\n          app: ai-agent\n      ---\n      apiVersion: autoscaling/v2\n      kind: HorizontalPodAutoscaler\n      metadata:\n        name: ai-agent-hpa\n        namespace: default\n      spec:\n        scaleTargetRef:\n          apiVersion: apps/v1\n          kind: Deployment\n          name: ai-agent\n        minReplicas: 2\n        maxReplicas: 10\n        metrics:\n        - type: Resource\n          resource:\n            name: cpu\n            target: {type: Utilization, averageUtilization: 70}\n      EOF\n\n      kubectl rollout status deployment/ai-agent -n default --timeout=5m\n      EXTERNAL_IP=$(kubectl get service ai-agent-service -n default -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n      echo \"Deployed at: http://$EXTERNAL_IP\"\n  only:\n    - main\n","yaml","",[268,280,281,290,295,300,311,327,332,340,349,357,365,373,378,386,398,409,420,431,442,453,458,466,477,487,495,504,512,520,528,536,544,549,557,570,582,594,607,615,625,636,647,652,660,669,679,690,697,705,713,720,729,735,741,747,753,759,765,771,777,783,789,795,801,807,813,819,825,831,837,843,849,855,861,867,873,879,885,891,897,903,908,914,920,926,932,937,943,948,953,959,965,971,977,982,988,993,999,1005,1010,1016,1021,1026,1032,1038,1044,1050,1056,1062,1068,1074,1080,1086,1092,1098,1103,1109,1115,1121,1129],{"__ignoreMap":278},[282,283,286],"span",{"class":284,"line":285},"line",1,[282,287,289],{"emptyLinePlaceholder":288},true,"\n",[282,291,293],{"class":284,"line":292},2,[282,294,289],{"emptyLinePlaceholder":288},[282,296,298],{"class":284,"line":297},3,[282,299,289],{"emptyLinePlaceholder":288},[282,301,303,307],{"class":284,"line":302},4,[282,304,306],{"class":305},"shJU0","default",[282,308,310],{"class":309},"sgsFI",":\n",[282,312,314,317,320,324],{"class":284,"line":313},5,[282,315,316],{"class":305},"  tags",[282,318,319],{"class":309},": [ ",[282,321,323],{"class":322},"sYBdl","saas-linux-2xlarge-amd64",[282,325,326],{"class":309}," ]\n",[282,328,330],{"class":284,"line":329},6,[282,331,289],{"emptyLinePlaceholder":288},[282,333,335,338],{"class":284,"line":334},7,[282,336,337],{"class":305},"stages",[282,339,310],{"class":309},[282,341,343,346],{"class":284,"line":342},8,[282,344,345],{"class":309},"  - ",[282,347,348],{"class":322},"build\n",[282,350,352,354],{"class":284,"line":351},9,[282,353,345],{"class":309},[282,355,356],{"class":322},"test\n",[282,358,360,362],{"class":284,"line":359},10,[282,361,345],{"class":309},[282,363,364],{"class":322},"upload\n",[282,366,368,370],{"class":284,"line":367},11,[282,369,345],{"class":309},[282,371,372],{"class":322},"deploy\n",[282,374,376],{"class":284,"line":375},12,[282,377,289],{"emptyLinePlaceholder":288},[282,379,381,384],{"class":284,"line":380},13,[282,382,383],{"class":305},"variables",[282,385,310],{"class":309},[282,387,389,392,395],{"class":284,"line":388},14,[282,390,391],{"class":305},"  GITLAB_IMAGE",[282,393,394],{"class":309},": ",[282,396,397],{"class":322},"$CI_REGISTRY_IMAGE/main:$CI_COMMIT_SHORT_SHA\n",[282,399,401,404,406],{"class":284,"line":400},15,[282,402,403],{"class":305},"  AR_IMAGE",[282,405,394],{"class":309},[282,407,408],{"class":322},"$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_LOCATION-docker.pkg.dev/$GOOGLE_ARTIFACT_REGISTRY_PROJECT_ID/$GOOGLE_ARTIFACT_REGISTRY_REPOSITORY_NAME/main:$CI_COMMIT_SHORT_SHA\n",[282,410,412,415,417],{"class":284,"line":411},16,[282,413,414],{"class":305},"  GCP_PROJECT_ID",[282,416,394],{"class":309},[282,418,419],{"class":322},"\"your-project-id\"\n",[282,421,423,426,428],{"class":284,"line":422},17,[282,424,425],{"class":305},"  GKE_CLUSTER",[282,427,394],{"class":309},[282,429,430],{"class":322},"\"your-cluster\"\n",[282,432,434,437,439],{"class":284,"line":433},18,[282,435,436],{"class":305},"  GKE_REGION",[282,438,394],{"class":309},[282,440,441],{"class":322},"\"us-central1\"\n",[282,443,445,448,450],{"class":284,"line":444},19,[282,446,447],{"class":305},"  KSA_NAME",[282,449,394],{"class":309},[282,451,452],{"class":322},"\"ai-agent-ksa\"\n",[282,454,456],{"class":284,"line":455},20,[282,457,289],{"emptyLinePlaceholder":288},[282,459,461,464],{"class":284,"line":460},21,[282,462,463],{"class":305},"build",[282,465,310],{"class":309},[282,467,469,472,474],{"class":284,"line":468},22,[282,470,471],{"class":305},"  image",[282,473,394],{"class":309},[282,475,476],{"class":322},"docker:24.0.5\n",[282,478,480,483,485],{"class":284,"line":479},23,[282,481,482],{"class":305},"  stage",[282,484,394],{"class":309},[282,486,348],{"class":322},[282,488,490,493],{"class":284,"line":489},24,[282,491,492],{"class":305},"  services",[282,494,310],{"class":309},[282,496,498,501],{"class":284,"line":497},25,[282,499,500],{"class":309},"    - ",[282,502,503],{"class":322},"docker:24.0.5-dind\n",[282,505,507,510],{"class":284,"line":506},26,[282,508,509],{"class":305},"  before_script",[282,511,310],{"class":309},[282,513,515,517],{"class":284,"line":514},27,[282,516,500],{"class":309},[282,518,519],{"class":322},"docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n",[282,521,523,526],{"class":284,"line":522},28,[282,524,525],{"class":305},"  script",[282,527,310],{"class":309},[282,529,531,533],{"class":284,"line":530},29,[282,532,500],{"class":309},[282,534,535],{"class":322},"docker build -t $GITLAB_IMAGE .\n",[282,537,539,541],{"class":284,"line":538},30,[282,540,500],{"class":309},[282,542,543],{"class":322},"docker push $GITLAB_IMAGE\n",[282,545,547],{"class":284,"line":546},31,[282,548,289],{"emptyLinePlaceholder":288},[282,550,552,555],{"class":284,"line":551},32,[282,553,554],{"class":305},"include",[282,556,310],{"class":309},[282,558,560,562,565,567],{"class":284,"line":559},33,[282,561,345],{"class":309},[282,563,564],{"class":305},"template",[282,566,394],{"class":309},[282,568,569],{"class":322},"Jobs/Dependency-Scanning.gitlab-ci.yml\n",[282,571,573,575,577,579],{"class":284,"line":572},34,[282,574,345],{"class":309},[282,576,564],{"class":305},[282,578,394],{"class":309},[282,580,581],{"class":322},"Jobs/Container-Scanning.gitlab-ci.yml\n",[282,583,585,587,589,591],{"class":284,"line":584},35,[282,586,345],{"class":309},[282,588,564],{"class":305},[282,590,394],{"class":309},[282,592,593],{"class":322},"Jobs/Secret-Detection.gitlab-ci.yml\n",[282,595,597,599,602,604],{"class":284,"line":596},36,[282,598,345],{"class":309},[282,600,601],{"class":305},"component",[282,603,394],{"class":309},[282,605,606],{"class":322},"gitlab.com/google-gitlab-components/artifact-registry/upload-artifact-registry@main\n",[282,608,610,613],{"class":284,"line":609},37,[282,611,612],{"class":305},"    inputs",[282,614,310],{"class":309},[282,616,618,621,623],{"class":284,"line":617},38,[282,619,620],{"class":305},"      stage",[282,622,394],{"class":309},[282,624,364],{"class":322},[282,626,628,631,633],{"class":284,"line":627},39,[282,629,630],{"class":305},"      source",[282,632,394],{"class":309},[282,634,635],{"class":322},"$GITLAB_IMAGE\n",[282,637,639,642,644],{"class":284,"line":638},40,[282,640,641],{"class":305},"      target",[282,643,394],{"class":309},[282,645,646],{"class":322},"$AR_IMAGE\n",[282,648,650],{"class":284,"line":649},41,[282,651,289],{"emptyLinePlaceholder":288},[282,653,655,658],{"class":284,"line":654},42,[282,656,657],{"class":305},"deploy",[282,659,310],{"class":309},[282,661,663,665,667],{"class":284,"line":662},43,[282,664,482],{"class":305},[282,666,394],{"class":309},[282,668,372],{"class":322},[282,670,672,674,676],{"class":284,"line":671},44,[282,673,471],{"class":305},[282,675,394],{"class":309},[282,677,678],{"class":322},"google/cloud-sdk:slim\n",[282,680,682,685,687],{"class":284,"line":681},45,[282,683,684],{"class":305},"  identity",[282,686,394],{"class":309},[282,688,689],{"class":322},"google_cloud\n",[282,691,693,695],{"class":284,"line":692},46,[282,694,509],{"class":305},[282,696,310],{"class":309},[282,698,700,702],{"class":284,"line":699},47,[282,701,500],{"class":309},[282,703,704],{"class":322},"apt-get update && apt-get install -y kubectl google-cloud-sdk-gke-gcloud-auth-plugin\n",[282,706,708,710],{"class":284,"line":707},48,[282,709,500],{"class":309},[282,711,712],{"class":322},"gcloud container clusters get-credentials $GKE_CLUSTER --region $GKE_REGION --project $GCP_PROJECT_ID\n",[282,714,716,718],{"class":284,"line":715},49,[282,717,525],{"class":305},[282,719,310],{"class":309},[282,721,723,725],{"class":284,"line":722},50,[282,724,500],{"class":309},[282,726,728],{"class":727},"sD7c4","|\n",[282,730,732],{"class":284,"line":731},51,[282,733,734],{"class":322},"      kubectl apply -f - \u003C\u003CEOF\n",[282,736,738],{"class":284,"line":737},52,[282,739,740],{"class":322},"      apiVersion: apps/v1\n",[282,742,744],{"class":284,"line":743},53,[282,745,746],{"class":322},"      kind: Deployment\n",[282,748,750],{"class":284,"line":749},54,[282,751,752],{"class":322},"      metadata:\n",[282,754,756],{"class":284,"line":755},55,[282,757,758],{"class":322},"        name: ai-agent\n",[282,760,762],{"class":284,"line":761},56,[282,763,764],{"class":322},"        namespace: default\n",[282,766,768],{"class":284,"line":767},57,[282,769,770],{"class":322},"      spec:\n",[282,772,774],{"class":284,"line":773},58,[282,775,776],{"class":322},"        replicas: 2\n",[282,778,780],{"class":284,"line":779},59,[282,781,782],{"class":322},"        selector:\n",[282,784,786],{"class":284,"line":785},60,[282,787,788],{"class":322},"          matchLabels:\n",[282,790,792],{"class":284,"line":791},61,[282,793,794],{"class":322},"            app: ai-agent\n",[282,796,798],{"class":284,"line":797},62,[282,799,800],{"class":322},"        template:\n",[282,802,804],{"class":284,"line":803},63,[282,805,806],{"class":322},"          metadata:\n",[282,808,810],{"class":284,"line":809},64,[282,811,812],{"class":322},"            labels:\n",[282,814,816],{"class":284,"line":815},65,[282,817,818],{"class":322},"              app: ai-agent\n",[282,820,822],{"class":284,"line":821},66,[282,823,824],{"class":322},"          spec:\n",[282,826,828],{"class":284,"line":827},67,[282,829,830],{"class":322},"            serviceAccountName: $KSA_NAME\n",[282,832,834],{"class":284,"line":833},68,[282,835,836],{"class":322},"            containers:\n",[282,838,840],{"class":284,"line":839},69,[282,841,842],{"class":322},"            - name: ai-agent\n",[282,844,846],{"class":284,"line":845},70,[282,847,848],{"class":322},"              image: $AR_IMAGE\n",[282,850,852],{"class":284,"line":851},71,[282,853,854],{"class":322},"              ports:\n",[282,856,858],{"class":284,"line":857},72,[282,859,860],{"class":322},"              - containerPort: 8080\n",[282,862,864],{"class":284,"line":863},73,[282,865,866],{"class":322},"              resources:\n",[282,868,870],{"class":284,"line":869},74,[282,871,872],{"class":322},"                requests: {cpu: 500m, memory: 1Gi}\n",[282,874,876],{"class":284,"line":875},75,[282,877,878],{"class":322},"                limits: {cpu: 2000m, memory: 4Gi}\n",[282,880,882],{"class":284,"line":881},76,[282,883,884],{"class":322},"              livenessProbe:\n",[282,886,888],{"class":284,"line":887},77,[282,889,890],{"class":322},"                httpGet: {path: /health, port: 8080}\n",[282,892,894],{"class":284,"line":893},78,[282,895,896],{"class":322},"                initialDelaySeconds: 60\n",[282,898,900],{"class":284,"line":899},79,[282,901,902],{"class":322},"              readinessProbe:\n",[282,904,906],{"class":284,"line":905},80,[282,907,890],{"class":322},[282,909,911],{"class":284,"line":910},81,[282,912,913],{"class":322},"                initialDelaySeconds: 30\n",[282,915,917],{"class":284,"line":916},82,[282,918,919],{"class":322},"      ---\n",[282,921,923],{"class":284,"line":922},83,[282,924,925],{"class":322},"      apiVersion: v1\n",[282,927,929],{"class":284,"line":928},84,[282,930,931],{"class":322},"      kind: Service\n",[282,933,935],{"class":284,"line":934},85,[282,936,752],{"class":322},[282,938,940],{"class":284,"line":939},86,[282,941,942],{"class":322},"        name: ai-agent-service\n",[282,944,946],{"class":284,"line":945},87,[282,947,764],{"class":322},[282,949,951],{"class":284,"line":950},88,[282,952,770],{"class":322},[282,954,956],{"class":284,"line":955},89,[282,957,958],{"class":322},"        type: LoadBalancer\n",[282,960,962],{"class":284,"line":961},90,[282,963,964],{"class":322},"        ports:\n",[282,966,968],{"class":284,"line":967},91,[282,969,970],{"class":322},"        - port: 80\n",[282,972,974],{"class":284,"line":973},92,[282,975,976],{"class":322},"          targetPort: 8080\n",[282,978,980],{"class":284,"line":979},93,[282,981,782],{"class":322},[282,983,985],{"class":284,"line":984},94,[282,986,987],{"class":322},"          app: ai-agent\n",[282,989,991],{"class":284,"line":990},95,[282,992,919],{"class":322},[282,994,996],{"class":284,"line":995},96,[282,997,998],{"class":322},"      apiVersion: autoscaling/v2\n",[282,1000,1002],{"class":284,"line":1001},97,[282,1003,1004],{"class":322},"      kind: HorizontalPodAutoscaler\n",[282,1006,1008],{"class":284,"line":1007},98,[282,1009,752],{"class":322},[282,1011,1013],{"class":284,"line":1012},99,[282,1014,1015],{"class":322},"        name: ai-agent-hpa\n",[282,1017,1019],{"class":284,"line":1018},100,[282,1020,764],{"class":322},[282,1022,1024],{"class":284,"line":1023},101,[282,1025,770],{"class":322},[282,1027,1029],{"class":284,"line":1028},102,[282,1030,1031],{"class":322},"        scaleTargetRef:\n",[282,1033,1035],{"class":284,"line":1034},103,[282,1036,1037],{"class":322},"          apiVersion: apps/v1\n",[282,1039,1041],{"class":284,"line":1040},104,[282,1042,1043],{"class":322},"          kind: Deployment\n",[282,1045,1047],{"class":284,"line":1046},105,[282,1048,1049],{"class":322},"          name: ai-agent\n",[282,1051,1053],{"class":284,"line":1052},106,[282,1054,1055],{"class":322},"        minReplicas: 2\n",[282,1057,1059],{"class":284,"line":1058},107,[282,1060,1061],{"class":322},"        maxReplicas: 10\n",[282,1063,1065],{"class":284,"line":1064},108,[282,1066,1067],{"class":322},"        metrics:\n",[282,1069,1071],{"class":284,"line":1070},109,[282,1072,1073],{"class":322},"        - type: Resource\n",[282,1075,1077],{"class":284,"line":1076},110,[282,1078,1079],{"class":322},"          resource:\n",[282,1081,1083],{"class":284,"line":1082},111,[282,1084,1085],{"class":322},"            name: cpu\n",[282,1087,1089],{"class":284,"line":1088},112,[282,1090,1091],{"class":322},"            target: {type: Utilization, averageUtilization: 70}\n",[282,1093,1095],{"class":284,"line":1094},113,[282,1096,1097],{"class":322},"      EOF\n",[282,1099,1101],{"class":284,"line":1100},114,[282,1102,289],{"emptyLinePlaceholder":288},[282,1104,1106],{"class":284,"line":1105},115,[282,1107,1108],{"class":322},"      kubectl rollout status deployment/ai-agent -n default --timeout=5m\n",[282,1110,1112],{"class":284,"line":1111},116,[282,1113,1114],{"class":322},"      EXTERNAL_IP=$(kubectl get service ai-agent-service -n default -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n",[282,1116,1118],{"class":284,"line":1117},117,[282,1119,1120],{"class":322},"      echo \"Deployed at: http://$EXTERNAL_IP\"\n",[282,1122,1124,1127],{"class":284,"line":1123},118,[282,1125,1126],{"class":305},"  only",[282,1128,310],{"class":309},[282,1130,1132,1134],{"class":284,"line":1131},119,[282,1133,500],{"class":309},[282,1135,1136],{"class":322},"main\n",[1138,1139,1141],"h4",{"id":1140},"configuration-essentielle-pour-gke","Configuration essentielle pour GKE",[12,1143,1144],{},"Pour que tout fonctionne, et c'est la raison pour laquelle nous avons besoin de cette configuration supplémentaire pour GKE, nous devons disposer d'un compte de service Kubernetes dans le cluster qui peut fonctionner avec Vertex AI. Ce compte de service doit être autorisé à accéder aux capacités d'IA de Google Cloud.",[12,1146,1147],{},"Sans cela, nous pouvons déployer l'application, mais l'agent d'IA ne fonctionnera pas. Nous devons créer un compte de service Kubernetes capable d'accéder à Vertex AI.",[12,1149,1150],{},"Exécutez cette configuration ponctuelle :",[273,1152,1156],{"className":1153,"code":1154,"language":1155,"meta":278,"style":278},"language-bash shiki shiki-themes github-light","\n\n\n#!/bin/bash\n\n\n\nPROJECT_ID=\"your-project-id\"\n\n\n\nGSA_NAME=\"ai-agent-vertex\"\n\n\n\nGSA_EMAIL=\"${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com\"\n\n\n\nKSA_NAME=\"ai-agent-ksa\"\n\n\n\nCLUSTER_NAME=\"your-cluster\"\n\n\n\nREGION=\"us-central1\"\n\n\n\n\n# Create GCP Service Account\n\n\n\ngcloud iam service-accounts create $GSA_NAME \\\n    --display-name=\"AI Agent Vertex AI\" \\\n    --project=$PROJECT_ID\n\n# Grant Vertex AI permissions\n\n\n\ngcloud projects add-iam-policy-binding $PROJECT_ID \\\n    --member=\"serviceAccount:${GSA_EMAIL}\" \\\n    --role=\"roles/aiplatform.user\"\n\n# Get cluster credentials\n\n\n\ngcloud container clusters get-credentials $CLUSTER_NAME \\\n    --region $REGION --project $PROJECT_ID\n\n# Create Kubernetes Service Account\n\n\n\nkubectl create serviceaccount $KSA_NAME -n default\n\n\n\n\n# Link accounts\n\n\n\nkubectl annotate serviceaccount $KSA_NAME -n default \\\n    iam.gke.io/gcp-service-account=${GSA_EMAIL}\n\ngcloud iam service-accounts add-iam-policy-binding ${GSA_EMAIL} \\\n    --role=roles/iam.workloadIdentityUser \\\n    --member=\"serviceAccount:${PROJECT_ID}.svc.id.goog[default/${KSA_NAME}]\" \\\n    --project=$PROJECT_ID\n","bash",[268,1157,1158,1162,1166,1170,1176,1180,1184,1188,1198,1202,1206,1210,1220,1224,1228,1232,1252,1256,1260,1264,1273,1277,1281,1285,1294,1298,1302,1306,1315,1319,1323,1327,1331,1336,1340,1344,1348,1370,1381,1389,1393,1398,1402,1406,1410,1425,1440,1448,1452,1457,1461,1465,1469,1487,1501,1505,1510,1514,1518,1522,1541,1545,1549,1553,1557,1562,1566,1570,1574,1592,1600,1604,1619,1626,1644],{"__ignoreMap":278},[282,1159,1160],{"class":284,"line":285},[282,1161,289],{"emptyLinePlaceholder":288},[282,1163,1164],{"class":284,"line":292},[282,1165,289],{"emptyLinePlaceholder":288},[282,1167,1168],{"class":284,"line":297},[282,1169,289],{"emptyLinePlaceholder":288},[282,1171,1172],{"class":284,"line":302},[282,1173,1175],{"class":1174},"sAwPA","#!/bin/bash\n",[282,1177,1178],{"class":284,"line":313},[282,1179,289],{"emptyLinePlaceholder":288},[282,1181,1182],{"class":284,"line":329},[282,1183,289],{"emptyLinePlaceholder":288},[282,1185,1186],{"class":284,"line":334},[282,1187,289],{"emptyLinePlaceholder":288},[282,1189,1190,1193,1196],{"class":284,"line":342},[282,1191,1192],{"class":309},"PROJECT_ID",[282,1194,1195],{"class":727},"=",[282,1197,419],{"class":322},[282,1199,1200],{"class":284,"line":351},[282,1201,289],{"emptyLinePlaceholder":288},[282,1203,1204],{"class":284,"line":359},[282,1205,289],{"emptyLinePlaceholder":288},[282,1207,1208],{"class":284,"line":367},[282,1209,289],{"emptyLinePlaceholder":288},[282,1211,1212,1215,1217],{"class":284,"line":375},[282,1213,1214],{"class":309},"GSA_NAME",[282,1216,1195],{"class":727},[282,1218,1219],{"class":322},"\"ai-agent-vertex\"\n",[282,1221,1222],{"class":284,"line":380},[282,1223,289],{"emptyLinePlaceholder":288},[282,1225,1226],{"class":284,"line":388},[282,1227,289],{"emptyLinePlaceholder":288},[282,1229,1230],{"class":284,"line":400},[282,1231,289],{"emptyLinePlaceholder":288},[282,1233,1234,1237,1239,1242,1244,1247,1249],{"class":284,"line":411},[282,1235,1236],{"class":309},"GSA_EMAIL",[282,1238,1195],{"class":727},[282,1240,1241],{"class":322},"\"${",[282,1243,1214],{"class":309},[282,1245,1246],{"class":322},"}@${",[282,1248,1192],{"class":309},[282,1250,1251],{"class":322},"}.iam.gserviceaccount.com\"\n",[282,1253,1254],{"class":284,"line":422},[282,1255,289],{"emptyLinePlaceholder":288},[282,1257,1258],{"class":284,"line":433},[282,1259,289],{"emptyLinePlaceholder":288},[282,1261,1262],{"class":284,"line":444},[282,1263,289],{"emptyLinePlaceholder":288},[282,1265,1266,1269,1271],{"class":284,"line":455},[282,1267,1268],{"class":309},"KSA_NAME",[282,1270,1195],{"class":727},[282,1272,452],{"class":322},[282,1274,1275],{"class":284,"line":460},[282,1276,289],{"emptyLinePlaceholder":288},[282,1278,1279],{"class":284,"line":468},[282,1280,289],{"emptyLinePlaceholder":288},[282,1282,1283],{"class":284,"line":479},[282,1284,289],{"emptyLinePlaceholder":288},[282,1286,1287,1290,1292],{"class":284,"line":489},[282,1288,1289],{"class":309},"CLUSTER_NAME",[282,1291,1195],{"class":727},[282,1293,430],{"class":322},[282,1295,1296],{"class":284,"line":497},[282,1297,289],{"emptyLinePlaceholder":288},[282,1299,1300],{"class":284,"line":506},[282,1301,289],{"emptyLinePlaceholder":288},[282,1303,1304],{"class":284,"line":514},[282,1305,289],{"emptyLinePlaceholder":288},[282,1307,1308,1311,1313],{"class":284,"line":522},[282,1309,1310],{"class":309},"REGION",[282,1312,1195],{"class":727},[282,1314,441],{"class":322},[282,1316,1317],{"class":284,"line":530},[282,1318,289],{"emptyLinePlaceholder":288},[282,1320,1321],{"class":284,"line":538},[282,1322,289],{"emptyLinePlaceholder":288},[282,1324,1325],{"class":284,"line":546},[282,1326,289],{"emptyLinePlaceholder":288},[282,1328,1329],{"class":284,"line":551},[282,1330,289],{"emptyLinePlaceholder":288},[282,1332,1333],{"class":284,"line":559},[282,1334,1335],{"class":1174},"# Create GCP Service Account\n",[282,1337,1338],{"class":284,"line":572},[282,1339,289],{"emptyLinePlaceholder":288},[282,1341,1342],{"class":284,"line":584},[282,1343,289],{"emptyLinePlaceholder":288},[282,1345,1346],{"class":284,"line":596},[282,1347,289],{"emptyLinePlaceholder":288},[282,1349,1350,1354,1357,1360,1363,1366],{"class":284,"line":609},[282,1351,1353],{"class":1352},"s7eDp","gcloud",[282,1355,1356],{"class":322}," iam",[282,1358,1359],{"class":322}," service-accounts",[282,1361,1362],{"class":322}," create",[282,1364,1365],{"class":309}," $GSA_NAME ",[282,1367,1369],{"class":1368},"sYu0t","\\\n",[282,1371,1372,1375,1378],{"class":284,"line":617},[282,1373,1374],{"class":1368},"    --display-name=",[282,1376,1377],{"class":322},"\"AI Agent Vertex AI\"",[282,1379,1380],{"class":1368}," \\\n",[282,1382,1383,1386],{"class":284,"line":627},[282,1384,1385],{"class":1368},"    --project=",[282,1387,1388],{"class":309},"$PROJECT_ID\n",[282,1390,1391],{"class":284,"line":638},[282,1392,289],{"emptyLinePlaceholder":288},[282,1394,1395],{"class":284,"line":649},[282,1396,1397],{"class":1174},"# Grant Vertex AI permissions\n",[282,1399,1400],{"class":284,"line":654},[282,1401,289],{"emptyLinePlaceholder":288},[282,1403,1404],{"class":284,"line":662},[282,1405,289],{"emptyLinePlaceholder":288},[282,1407,1408],{"class":284,"line":671},[282,1409,289],{"emptyLinePlaceholder":288},[282,1411,1412,1414,1417,1420,1423],{"class":284,"line":681},[282,1413,1353],{"class":1352},[282,1415,1416],{"class":322}," projects",[282,1418,1419],{"class":322}," add-iam-policy-binding",[282,1421,1422],{"class":309}," $PROJECT_ID ",[282,1424,1369],{"class":1368},[282,1426,1427,1430,1433,1435,1438],{"class":284,"line":692},[282,1428,1429],{"class":1368},"    --member=",[282,1431,1432],{"class":322},"\"serviceAccount:${",[282,1434,1236],{"class":309},[282,1436,1437],{"class":322},"}\"",[282,1439,1380],{"class":1368},[282,1441,1442,1445],{"class":284,"line":699},[282,1443,1444],{"class":1368},"    --role=",[282,1446,1447],{"class":322},"\"roles/aiplatform.user\"\n",[282,1449,1450],{"class":284,"line":707},[282,1451,289],{"emptyLinePlaceholder":288},[282,1453,1454],{"class":284,"line":715},[282,1455,1456],{"class":1174},"# Get cluster credentials\n",[282,1458,1459],{"class":284,"line":722},[282,1460,289],{"emptyLinePlaceholder":288},[282,1462,1463],{"class":284,"line":731},[282,1464,289],{"emptyLinePlaceholder":288},[282,1466,1467],{"class":284,"line":737},[282,1468,289],{"emptyLinePlaceholder":288},[282,1470,1471,1473,1476,1479,1482,1485],{"class":284,"line":743},[282,1472,1353],{"class":1352},[282,1474,1475],{"class":322}," container",[282,1477,1478],{"class":322}," clusters",[282,1480,1481],{"class":322}," get-credentials",[282,1483,1484],{"class":309}," $CLUSTER_NAME ",[282,1486,1369],{"class":1368},[282,1488,1489,1492,1495,1498],{"class":284,"line":749},[282,1490,1491],{"class":1368},"    --region",[282,1493,1494],{"class":309}," $REGION ",[282,1496,1497],{"class":1368},"--project",[282,1499,1500],{"class":309}," $PROJECT_ID\n",[282,1502,1503],{"class":284,"line":755},[282,1504,289],{"emptyLinePlaceholder":288},[282,1506,1507],{"class":284,"line":761},[282,1508,1509],{"class":1174},"# Create Kubernetes Service Account\n",[282,1511,1512],{"class":284,"line":767},[282,1513,289],{"emptyLinePlaceholder":288},[282,1515,1516],{"class":284,"line":773},[282,1517,289],{"emptyLinePlaceholder":288},[282,1519,1520],{"class":284,"line":779},[282,1521,289],{"emptyLinePlaceholder":288},[282,1523,1524,1527,1529,1532,1535,1538],{"class":284,"line":785},[282,1525,1526],{"class":1352},"kubectl",[282,1528,1362],{"class":322},[282,1530,1531],{"class":322}," serviceaccount",[282,1533,1534],{"class":309}," $KSA_NAME ",[282,1536,1537],{"class":1368},"-n",[282,1539,1540],{"class":322}," default\n",[282,1542,1543],{"class":284,"line":791},[282,1544,289],{"emptyLinePlaceholder":288},[282,1546,1547],{"class":284,"line":797},[282,1548,289],{"emptyLinePlaceholder":288},[282,1550,1551],{"class":284,"line":803},[282,1552,289],{"emptyLinePlaceholder":288},[282,1554,1555],{"class":284,"line":809},[282,1556,289],{"emptyLinePlaceholder":288},[282,1558,1559],{"class":284,"line":815},[282,1560,1561],{"class":1174},"# Link accounts\n",[282,1563,1564],{"class":284,"line":821},[282,1565,289],{"emptyLinePlaceholder":288},[282,1567,1568],{"class":284,"line":827},[282,1569,289],{"emptyLinePlaceholder":288},[282,1571,1572],{"class":284,"line":833},[282,1573,289],{"emptyLinePlaceholder":288},[282,1575,1576,1578,1581,1583,1585,1587,1590],{"class":284,"line":839},[282,1577,1526],{"class":1352},[282,1579,1580],{"class":322}," annotate",[282,1582,1531],{"class":322},[282,1584,1534],{"class":309},[282,1586,1537],{"class":1368},[282,1588,1589],{"class":322}," default",[282,1591,1380],{"class":1368},[282,1593,1594,1597],{"class":284,"line":845},[282,1595,1596],{"class":322},"    iam.gke.io/gcp-service-account=",[282,1598,1599],{"class":309},"${GSA_EMAIL}\n",[282,1601,1602],{"class":284,"line":851},[282,1603,289],{"emptyLinePlaceholder":288},[282,1605,1606,1608,1610,1612,1614,1617],{"class":284,"line":857},[282,1607,1353],{"class":1352},[282,1609,1356],{"class":322},[282,1611,1359],{"class":322},[282,1613,1419],{"class":322},[282,1615,1616],{"class":309}," ${GSA_EMAIL} ",[282,1618,1369],{"class":1368},[282,1620,1621,1624],{"class":284,"line":863},[282,1622,1623],{"class":1368},"    --role=roles/iam.workloadIdentityUser",[282,1625,1380],{"class":1368},[282,1627,1628,1630,1632,1634,1637,1639,1642],{"class":284,"line":869},[282,1629,1429],{"class":1368},[282,1631,1432],{"class":322},[282,1633,1192],{"class":309},[282,1635,1636],{"class":322},"}.svc.id.goog[default/${",[282,1638,1268],{"class":309},[282,1640,1641],{"class":322},"}]\"",[282,1643,1380],{"class":1368},[282,1645,1646,1648],{"class":284,"line":875},[282,1647,1385],{"class":1368},[282,1649,1388],{"class":309},[112,1651,1653],{"id":1652},"_4-déployer-vers-gke","4. Déployer vers GKE",[12,1655,1656],{},"Une fois que vous avez terminé, effectuez un push vers le pipeline et le tour est joué.",[12,1658,1659,1660,1663],{},"Le pipeline vient d'être déployé. Accédez à ",[54,1661,1662],{},"CI/CD > Pipelines"," pour voir les quatre étapes :",[81,1665,1666,1669,1672,1675],{},[84,1667,1668],{},"Build",[84,1670,1671],{},"Test (avec tous les scans de sécurité définis)",[84,1673,1674],{},"Importation vers Artifact Registry (réussie)",[84,1676,1677],{},"Déploiement vers Kubernetes dans GKE (réussi)",[29,1679,1681],{"id":1680},"résumé","Résumé",[12,1683,1684],{},"Avec GitLab et Google Cloud, vous êtes en mesure de déployer votre agent d'IA vers GKE en toute simplicité et sécurité en quelques étapes seulement grâce à l'intégration native de GitLab avec Google Cloud.",[12,1686,1687],{},"Regardez cette démo :",[1689,1690,1693,1694],"figure",{"className":1691},[1692],"video_container","\n  ",[1695,1696,232],"iframe",{"src":1697,"frameBorder":1698,"allowFullScreen":1699},"https://www.youtube.com/embed/mc2pCL5Qjus?si=QoH02lvz5KH5Ku9O","0","true",[1701,1702,1703],"blockquote",{},[12,1704,1705,1706,1711,1712,1717,1718,162],{},"Utilisez ",[16,1707,1710],{"href":1708,"rel":1709},"https://gitlab.com/gitlab-partners-public/google-cloud/demos/gke-ai-agent",[],"l'exemple de code complet de ce tutoriel"," pour commencer dès maintenant. Vous n’utilisez pas encore GitLab ? Découvrez la plateforme DevSecOps et profitez d'",[16,1713,1716],{"href":1714,"rel":1715},"https://about.gitlab.com/fr-fr/free-trial/",[],"un essai gratuit",". Les startups hébergées sur Google Cloud disposent d'",[16,1719,1722],{"href":1720,"rel":1721},"https://about.gitlab.com/fr-fr/solutions/startups/google-cloud/",[],"une offre spéciale pour essayer et utiliser GitLab",[1724,1725,1726],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":278,"searchDepth":292,"depth":292,"links":1728},[1729,1730,1731,1737],{"id":31,"depth":292,"text":32},{"id":75,"depth":292,"text":76},{"id":109,"depth":292,"text":110,"children":1732},[1733,1734,1735,1736],{"id":114,"depth":297,"text":115},{"id":148,"depth":297,"text":149},{"id":207,"depth":297,"text":208},{"id":1652,"depth":297,"text":1653},{"id":1680,"depth":292,"text":1681},"ai","2026-02-06","Ce guide explique comment déployer un agent d'IA basé sur l'Agent Development Kit vers Google Kubernetes Engine à l'aide de la plateforme DevSecOps de GitLab en toute simplicité et sécurité.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1749670563/Blog/Hero%20Images/cloudcomputing.jpg",{},"/fr-fr/blog/secure-ai-agent-deployment-to-gke",{"config":1748,"title":5,"description":1749},{"noIndex":1743},"Découvrez comment déployer un agent d'IA basé sur ADK vers GKE à l'aide de la plateforme DevSecOps de GitLab en toute simplicité et sécurité.","secure-ai-agent-deployment-to-gke","fr-fr/blog/secure-ai-agent-deployment-to-gke",[1753,1754,1755,1756],"AI","google","cloud native","tutorial","BlogPost","E9w1YBS8D3rkQ-xZo5ptzBPq6rk10JUrb0w0hBRFAdk",{"logo":1760,"freeTrial":1765,"sales":1770,"login":1775,"items":1780,"search":2108,"minimal":2144,"duo":2163,"switchNav":2172,"pricingDeployment":2183},{"config":1761},{"href":1762,"dataGaName":1763,"dataGaLocation":1764},"/fr-fr/","gitlab logo","header",{"text":1766,"config":1767},"Commencer un essai gratuit",{"href":1768,"dataGaName":1769,"dataGaLocation":1764},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":1771,"config":1772},"Demander une démo",{"href":1773,"dataGaName":1774,"dataGaLocation":1764},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":1776,"config":1777},"Connexion",{"href":1778,"dataGaName":1779,"dataGaLocation":1764},"https://gitlab.com/users/sign_in/","sign in",[1781,1810,1911,1916,2030,2086],{"text":1782,"config":1783,"menu":1785},"Plateforme",{"dataNavLevelOne":1784},"platform",{"type":1786,"columns":1787},"cards",[1788,1794,1802],{"title":1782,"description":1789,"link":1790},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":1791,"config":1792},"Explorer notre plateforme",{"href":1793,"dataGaName":1784,"dataGaLocation":1764},"/fr-fr/platform/",{"title":1795,"description":1796,"link":1797},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":1798,"config":1799},"Découvrir GitLab Duo",{"href":1800,"dataGaName":1801,"dataGaLocation":1764},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1803,"description":1804,"link":1805},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":1806,"config":1807},"En savoir plus",{"href":1808,"dataGaName":1809,"dataGaLocation":1764},"/fr-fr/why-gitlab/","why gitlab",{"text":1811,"left":288,"config":1812,"menu":1814},"Produit",{"dataNavLevelOne":1813},"solutions",{"type":1815,"link":1816,"columns":1820,"feature":1890},"lists",{"text":1817,"config":1818},"Voir toutes les solutions",{"href":1819,"dataGaName":1813,"dataGaLocation":1764},"/fr-fr/solutions/",[1821,1845,1868],{"title":1822,"description":1823,"link":1824,"items":1829},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":1825},{"icon":1826,"href":1827,"dataGaName":1828,"dataGaLocation":1764},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[1830,1833,1836,1841],{"text":40,"config":1831},{"href":1832,"dataGaLocation":1764,"dataGaName":40},"/fr-fr/solutions/continuous-integration/",{"text":1795,"config":1834},{"href":1800,"dataGaLocation":1764,"dataGaName":1835},"gitlab duo agent platform - product menu",{"text":1837,"config":1838},"Gestion du code source",{"href":1839,"dataGaLocation":1764,"dataGaName":1840},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":1842,"config":1843},"Livraison de logiciels automatisée",{"href":1827,"dataGaLocation":1764,"dataGaName":1844},"Automated software delivery",{"title":1846,"description":1847,"link":1848,"items":1853},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":1849},{"href":1850,"dataGaName":1851,"dataGaLocation":1764,"icon":1852},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1854,1858,1863],{"text":1855,"config":1856},"Tests de sécurité des applications",{"href":1850,"dataGaName":1857,"dataGaLocation":1764},"Application security testing",{"text":1859,"config":1860},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":1861,"dataGaLocation":1764,"dataGaName":1862},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":1864,"config":1865},"Conformité logicielle",{"href":1866,"dataGaName":1867,"dataGaLocation":1764},"/fr-fr/solutions/software-compliance/","software compliance",{"title":1869,"link":1870,"items":1875},"Mesures",{"config":1871},{"icon":1872,"href":1873,"dataGaName":1874,"dataGaLocation":1764},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[1876,1880,1885],{"text":1877,"config":1878},"Visibilité et mesures",{"href":1873,"dataGaLocation":1764,"dataGaName":1879},"Visibility and Measurement",{"text":1881,"config":1882},"Gestion de la chaîne de valeur",{"href":1883,"dataGaLocation":1764,"dataGaName":1884},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":1886,"config":1887},"Analyses et informations",{"href":1888,"dataGaLocation":1764,"dataGaName":1889},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":1891,"type":1815,"items":1892},"GitLab",[1893,1899,1905],{"text":1894,"config":1895},"Entreprises",{"icon":1896,"href":1897,"dataGaLocation":1764,"dataGaName":1898},"Building","/fr-fr/enterprise/","enterprise",{"text":1900,"config":1901},"Pour les PME",{"icon":1902,"href":1903,"dataGaLocation":1764,"dataGaName":1904},"Work","/fr-fr/small-business/","small business",{"text":1906,"config":1907},"Pour le secteur public",{"icon":1908,"href":1909,"dataGaLocation":1764,"dataGaName":1910},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":1912,"config":1913},"Tarifs",{"href":1914,"dataGaName":1915,"dataGaLocation":1764,"dataNavLevelOne":1915},"/fr-fr/pricing/","pricing",{"text":1917,"config":1918,"menu":1920},"Ressources",{"dataNavLevelOne":1919},"resources",{"type":1815,"link":1921,"columns":1925,"feature":2019},{"text":1922,"config":1923},"Afficher toutes les ressources",{"href":1924,"dataGaName":1919,"dataGaLocation":1764},"/fr-fr/resources/",[1926,1959,1986],{"title":1927,"items":1928},"Premiers pas",[1929,1934,1939,1944,1949,1954],{"text":1930,"config":1931},"Installation",{"href":1932,"dataGaName":1933,"dataGaLocation":1764},"/fr-fr/install/","install",{"text":1935,"config":1936},"Guides de démarrage",{"href":1937,"dataGaName":1938,"dataGaLocation":1764},"/fr-fr/get-started/","quick setup checklists",{"text":1940,"config":1941},"Apprentissage",{"href":1942,"dataGaLocation":1764,"dataGaName":1943},"https://university.gitlab.com/","learn",{"text":1945,"config":1946},"Documentation",{"href":1947,"dataGaName":1948,"dataGaLocation":1764},"https://docs.gitlab.com/","product documentation",{"text":1950,"config":1951},"Vidéos sur les bonnes pratiques",{"href":1952,"dataGaName":1953,"dataGaLocation":1764},"/fr-fr/getting-started-videos/","best practice videos",{"text":1955,"config":1956},"Intégrations",{"href":1957,"dataGaName":1958,"dataGaLocation":1764},"/fr-fr/integrations/","integrations",{"title":1960,"items":1961},"Découvrir",[1962,1967,1972,1977,1981],{"text":1963,"config":1964},"Témoignages clients",{"href":1965,"dataGaName":1966,"dataGaLocation":1764},"/fr-fr/customers/","customer success stories",{"text":1968,"config":1969},"Blog",{"href":1970,"dataGaName":1971,"dataGaLocation":1764},"/fr-fr/blog/","blog",{"text":1973,"config":1974},"Demo Hub",{"href":1975,"dataGaName":1976,"dataGaLocation":1764},"/fr-fr/demo-hub/","demo hub",{"text":1978,"config":1979},"The Source",{"href":1980,"dataGaName":1971,"dataGaLocation":1764},"/fr-fr/the-source/",{"text":1982,"config":1983},"Travail à distance",{"href":1984,"dataGaName":1985,"dataGaLocation":1764},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1987,"items":1988},"Connecter",[1989,1994,1999,2004,2009,2014],{"text":1990,"config":1991},"Services GitLab",{"href":1992,"dataGaName":1993,"dataGaLocation":1764},"/fr-fr/services/","services",{"text":1995,"config":1996},"Contribuer",{"href":1997,"dataGaName":1998,"dataGaLocation":1764},"https://contributors.gitlab.com","contribute",{"text":2000,"config":2001},"Communauté",{"href":2002,"dataGaName":2003,"dataGaLocation":1764},"/community/","community",{"text":2005,"config":2006},"Forum",{"href":2007,"dataGaName":2008,"dataGaLocation":1764},"https://forum.gitlab.com/","forum",{"text":2010,"config":2011},"Événements",{"href":2012,"dataGaName":2013,"dataGaLocation":1764},"/events/","events",{"text":2015,"config":2016},"Partenaires",{"href":2017,"dataGaName":2018,"dataGaLocation":1764},"/fr-fr/partners/","partners",{"config":2020,"title":2023,"text":2024,"link":2025},{"background":2021,"textColor":2022},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":2026,"config":2027},"Lire les articles les plus récents",{"href":2028,"dataGaName":2029,"dataGaLocation":1764},"/fr-fr/whats-new/","whats new",{"text":2031,"config":2032,"menu":2034},"Société",{"dataNavLevelOne":2033},"company",{"type":1815,"columns":2035},[2036],{"items":2037},[2038,2043,2049,2051,2056,2061,2066,2071,2076,2081],{"text":2039,"config":2040},"À propos",{"href":2041,"dataGaName":2042,"dataGaLocation":1764},"/fr-fr/company/","about",{"text":2044,"config":2045,"footerGa":2048},"Carrières",{"href":2046,"dataGaName":2047,"dataGaLocation":1764},"/jobs/","jobs",{"dataGaName":2047},{"text":2010,"config":2050},{"href":2012,"dataGaName":2013,"dataGaLocation":1764},{"text":2052,"config":2053},"Leadership",{"href":2054,"dataGaName":2055,"dataGaLocation":1764},"/company/team/e-group/","leadership",{"text":2057,"config":2058},"Manuel",{"href":2059,"dataGaName":2060,"dataGaLocation":1764},"https://handbook.gitlab.com/","handbook",{"text":2062,"config":2063},"Relations avec les investisseurs",{"href":2064,"dataGaName":2065,"dataGaLocation":1764},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2067,"config":2068},"Trust Center",{"href":2069,"dataGaName":2070,"dataGaLocation":1764},"/fr-fr/security/","trust center",{"text":2072,"config":2073},"Centre pour la transparence de l'IA",{"href":2074,"dataGaName":2075,"dataGaLocation":1764},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":2077,"config":2078},"Newsletter",{"href":2079,"dataGaName":2080,"dataGaLocation":1764},"/company/contact/#contact-forms","newsletter",{"text":2082,"config":2083},"Presse",{"href":2084,"dataGaName":2085,"dataGaLocation":1764},"/press/","press",{"text":2087,"config":2088,"menu":2089},"Nous contacter",{"dataNavLevelOne":2033},{"type":1815,"columns":2090},[2091],{"items":2092},[2093,2098,2103],{"text":2094,"config":2095},"Contacter l'équipe commerciale",{"href":2096,"dataGaName":2097,"dataGaLocation":1764},"/fr-fr/sales/","talk to sales",{"text":2099,"config":2100},"Assistance GitLab",{"href":2101,"dataGaName":2102,"dataGaLocation":1764},"https://support.gitlab.com/hc/en-us","support portal",{"text":2104,"config":2105},"Portail clients GitLab",{"href":2106,"dataGaName":2107,"dataGaLocation":1764},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2109,"login":2110,"suggestions":2117},"Fermer",{"text":2111,"link":2112},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":2113,"config":2114},"GitLab.com",{"href":1778,"dataGaName":2115,"dataGaLocation":2116},"search login","search",{"text":2118,"default":2119},"Suggestions",[2120,2123,2128,2130,2135,2140],{"text":1795,"config":2121},{"href":1800,"dataGaName":2122,"dataGaLocation":2116},"GitLab Duo Agent Platform",{"text":2124,"config":2125},"Suggestions de code (IA)",{"href":2126,"dataGaName":2127,"dataGaLocation":2116},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":40,"config":2129},{"href":1832,"dataGaName":40,"dataGaLocation":2116},{"text":2131,"config":2132},"GitLab sur AWS",{"href":2133,"dataGaName":2134,"dataGaLocation":2116},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":2136,"config":2137},"GitLab sur Google Cloud",{"href":2138,"dataGaName":2139,"dataGaLocation":2116},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":2141,"config":2142},"Pourquoi utiliser GitLab ?",{"href":1808,"dataGaName":2143,"dataGaLocation":2116},"Why GitLab?",{"freeTrial":2145,"mobileIcon":2150,"desktopIcon":2155,"secondaryButton":2158},{"text":2146,"config":2147},"Commencer votre essai gratuit",{"href":2148,"dataGaName":1769,"dataGaLocation":2149},"https://gitlab.com/-/trials/new/","nav",{"altText":2151,"config":2152},"Icône GitLab",{"src":2153,"dataGaName":2154,"dataGaLocation":2149},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2151,"config":2156},{"src":2157,"dataGaName":2154,"dataGaLocation":2149},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2159,"config":2160},"Commencer",{"href":2161,"dataGaName":2162,"dataGaLocation":2149},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":2164,"mobileIcon":2168,"desktopIcon":2170},{"text":2165,"config":2166},"En savoir plus sur GitLab Duo",{"href":1800,"dataGaName":2167,"dataGaLocation":2149},"gitlab duo",{"altText":2151,"config":2169},{"src":2153,"dataGaName":2154,"dataGaLocation":2149},{"altText":2151,"config":2171},{"src":2157,"dataGaName":2154,"dataGaLocation":2149},{"button":2173,"mobileIcon":2178,"desktopIcon":2180},{"text":2174,"config":2175},"/switch",{"href":2176,"dataGaName":2177,"dataGaLocation":2149},"#contact","switch",{"altText":2151,"config":2179},{"src":2153,"dataGaName":2154,"dataGaLocation":2149},{"altText":2151,"config":2181},{"src":2182,"dataGaName":2154,"dataGaLocation":2149},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2184,"mobileIcon":2189,"desktopIcon":2191},{"text":2185,"config":2186},"Retour aux tarifs",{"href":1914,"dataGaName":2187,"dataGaLocation":2149,"icon":2188},"back to pricing","GoBack",{"altText":2151,"config":2190},{"src":2153,"dataGaName":2154,"dataGaLocation":2149},{"altText":2151,"config":2192},{"src":2157,"dataGaName":2154,"dataGaLocation":2149},{"title":2194,"button":2195,"config":2199},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":1806,"config":2196},{"href":2197,"dataGaName":2198,"dataGaLocation":1764},"/fr-fr/gitlab-orbit/","orbit",{"layout":2200,"disabled":1743},"release",{"data":2202},{"text":2203,"source":2204,"edit":2210,"contribute":2215,"config":2219,"items":2224,"minimal":2431},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":2205,"config":2206},"Afficher le code source de la page",{"href":2207,"dataGaName":2208,"dataGaLocation":2209},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2211,"config":2212},"Modifier cette page",{"href":2213,"dataGaName":2214,"dataGaLocation":2209},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1995,"config":2216},{"href":2217,"dataGaName":2218,"dataGaLocation":2209},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2220,"facebook":2221,"youtube":2222,"linkedin":2223},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2225,2271,2323,2366,2398],{"title":1912,"links":2226,"subMenu":2241},[2227,2231,2236],{"text":2228,"config":2229},"Voir les forfaits",{"href":1914,"dataGaName":2230,"dataGaLocation":2209},"view plans",{"text":2232,"config":2233},"GitLab Premium",{"href":2234,"dataGaName":2235,"dataGaLocation":2209},"/fr-fr/pricing/premium/","why premium",{"text":2237,"config":2238},"GitLab Ultimate",{"href":2239,"dataGaName":2240,"dataGaLocation":2209},"/fr-fr/pricing/ultimate/","why ultimate",[2242],{"title":2087,"links":2243},[2244,2246,2248,2251,2256,2261,2266],{"text":2094,"config":2245},{"href":2096,"dataGaName":1774,"dataGaLocation":2209},{"text":2099,"config":2247},{"href":2101,"dataGaName":2102,"dataGaLocation":2209},{"text":2249,"config":2250},"Portail clients",{"href":2106,"dataGaName":2107,"dataGaLocation":2209},{"text":2252,"config":2253},"Statut",{"href":2254,"dataGaName":2255,"dataGaLocation":2209},"https://status.gitlab.com/","status",{"text":2257,"config":2258},"Conditions d'utilisation",{"href":2259,"dataGaName":2260,"dataGaLocation":2209},"/terms/","terms of use",{"text":2262,"config":2263},"Politique de confidentialité",{"href":2264,"dataGaName":2265,"dataGaLocation":2209},"/fr-fr/privacy/","privacy statement",{"text":2267,"config":2268},"Gestion des cookies",{"dataGaName":2269,"dataGaLocation":2209,"id":2270,"isOneTrustButton":288},"cookie preferences","ot-sdk-btn",{"title":1811,"links":2272,"subMenu":2281},[2273,2277],{"text":2274,"config":2275},"Plateforme DevSecOps",{"href":1793,"dataGaName":2276,"dataGaLocation":2209},"devsecops platform",{"text":2278,"config":2279},"Développement assisté par l'IA",{"href":1800,"dataGaName":2280,"dataGaLocation":2209},"ai-assisted development",[2282],{"title":2283,"links":2284},"Thèmes",[2285,2289,2294,2299,2304,2309,2313,2318],{"text":40,"config":2286},{"href":2287,"dataGaName":2288,"dataGaLocation":2209},"/fr-fr/topics/ci-cd/","cicd",{"text":2290,"config":2291},"GitOps",{"href":2292,"dataGaName":2293,"dataGaLocation":2209},"/fr-fr/topics/gitops/","gitops",{"text":2295,"config":2296},"DevOps",{"href":2297,"dataGaName":2298,"dataGaLocation":2209},"/fr-fr/topics/devops/","devops",{"text":2300,"config":2301},"Contrôle de version",{"href":2302,"dataGaName":2303,"dataGaLocation":2209},"/fr-fr/topics/version-control/","version control",{"text":2305,"config":2306},"DevSecOps",{"href":2307,"dataGaName":2308,"dataGaLocation":2209},"/fr-fr/topics/devsecops/","devsecops",{"text":2310,"config":2311},"Cloud-native",{"href":2312,"dataGaName":1755,"dataGaLocation":2209},"/fr-fr/topics/cloud-native/",{"text":2314,"config":2315},"IA pour la programmation",{"href":2316,"dataGaName":2317,"dataGaLocation":2209},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":2319,"config":2320},"IA agentique",{"href":2321,"dataGaName":2322,"dataGaLocation":2209},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":2324,"links":2325},"Solutions",[2326,2329,2331,2336,2339,2342,2345,2348,2350,2353,2356,2361],{"text":1855,"config":2327},{"href":1850,"dataGaName":2328,"dataGaLocation":2209},"Application Security Testing",{"text":1842,"config":2330},{"href":1827,"dataGaName":1828,"dataGaLocation":2209},{"text":2332,"config":2333},"Développement Agile",{"href":2334,"dataGaName":2335,"dataGaLocation":2209},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":1837,"config":2337},{"href":1839,"dataGaName":2338,"dataGaLocation":2209},"source code management",{"text":40,"config":2340},{"href":1832,"dataGaName":2341,"dataGaLocation":2209},"continuous integration & delivery",{"text":1881,"config":2343},{"href":1883,"dataGaName":2344,"dataGaLocation":2209},"value stream management",{"text":2290,"config":2346},{"href":2347,"dataGaName":2293,"dataGaLocation":2209},"/fr-fr/solutions/gitops/",{"text":1894,"config":2349},{"href":1897,"dataGaName":1898,"dataGaLocation":2209},{"text":2351,"config":2352},"PME",{"href":1903,"dataGaName":1904,"dataGaLocation":2209},{"text":2354,"config":2355},"Secteur public",{"href":1909,"dataGaName":1910,"dataGaLocation":2209},{"text":2357,"config":2358},"Éducation",{"href":2359,"dataGaName":2360,"dataGaLocation":2209},"/fr-fr/solutions/education/","education",{"text":2362,"config":2363},"Services financiers",{"href":2364,"dataGaName":2365,"dataGaLocation":2209},"/fr-fr/solutions/finance/","financial services",{"title":1917,"links":2367},[2368,2370,2372,2374,2377,2379,2382,2384,2386,2388,2390,2392,2394,2396],{"text":1930,"config":2369},{"href":1932,"dataGaName":1933,"dataGaLocation":2209},{"text":1935,"config":2371},{"href":1937,"dataGaName":1938,"dataGaLocation":2209},{"text":1940,"config":2373},{"href":1942,"dataGaName":1943,"dataGaLocation":2209},{"text":1945,"config":2375},{"href":1947,"dataGaName":2376,"dataGaLocation":2209},"docs",{"text":1968,"config":2378},{"href":1970,"dataGaName":1971,"dataGaLocation":2209},{"text":2380,"config":2381},"Nouveautés",{"href":2028,"dataGaName":2029,"dataGaLocation":2209},{"text":1963,"config":2383},{"href":1965,"dataGaName":1966,"dataGaLocation":2209},{"text":1982,"config":2385},{"href":1984,"dataGaName":1985,"dataGaLocation":2209},{"text":1990,"config":2387},{"href":1992,"dataGaName":1993,"dataGaLocation":2209},{"text":1995,"config":2389},{"href":1997,"dataGaName":1998,"dataGaLocation":2209},{"text":2000,"config":2391},{"href":2002,"dataGaName":2003,"dataGaLocation":2209},{"text":2005,"config":2393},{"href":2007,"dataGaName":2008,"dataGaLocation":2209},{"text":2010,"config":2395},{"href":2012,"dataGaName":2013,"dataGaLocation":2209},{"text":2015,"config":2397},{"href":2017,"dataGaName":2018,"dataGaLocation":2209},{"title":2031,"links":2399},[2400,2402,2404,2406,2408,2410,2415,2420,2422,2424,2426],{"text":2039,"config":2401},{"href":2041,"dataGaName":2033,"dataGaLocation":2209},{"text":2044,"config":2403},{"href":2046,"dataGaName":2047,"dataGaLocation":2209},{"text":2052,"config":2405},{"href":2054,"dataGaName":2055,"dataGaLocation":2209},{"text":2057,"config":2407},{"href":2059,"dataGaName":2060,"dataGaLocation":2209},{"text":2062,"config":2409},{"href":2064,"dataGaName":2065,"dataGaLocation":2209},{"text":2411,"config":2412},"Développement durable",{"href":2413,"dataGaName":2414,"dataGaLocation":2209},"/sustainability/","Sustainability",{"text":2416,"config":2417},"Diversité, inclusion et appartenance (DIB)",{"href":2418,"dataGaName":2419,"dataGaLocation":2209},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2067,"config":2421},{"href":2069,"dataGaName":2070,"dataGaLocation":2209},{"text":2077,"config":2423},{"href":2079,"dataGaName":2080,"dataGaLocation":2209},{"text":2082,"config":2425},{"href":2084,"dataGaName":2085,"dataGaLocation":2209},{"text":2427,"config":2428},"Déclaration de transparence sur l'esclavage moderne",{"href":2429,"dataGaName":2430,"dataGaLocation":2209},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2432},[2433,2435,2437],{"text":2257,"config":2434},{"href":2259,"dataGaName":2260,"dataGaLocation":2209},{"text":2267,"config":2436},{"dataGaName":2269,"dataGaLocation":2209,"id":2270,"isOneTrustButton":288},{"text":2262,"config":2438},{"href":2264,"dataGaName":2265,"dataGaLocation":2209},[2440],{"id":2441,"title":7,"body":1742,"config":2442,"content":2444,"description":1742,"extension":2448,"meta":2449,"navigation":288,"path":2450,"seo":2451,"stem":2452,"__hash__":2453},"blogAuthors/en-us/blog/authors/regnard-raquedan.yml",{"template":2443},"BlogAuthor",{"name":7,"config":2445},{"headshot":2446,"ctfId":2447},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663118/Blog/Author%20Headshots/regnard_raquedan_headshot.png","rraquedan","yml",{},"/en-us/blog/authors/regnard-raquedan",{},"en-us/blog/authors/regnard-raquedan","1JCF9gTeSA0OaLWrorCsz7_b5_2A2kagAMVhH8r4NcM",[2455,2463,2471],{"title":2456,"description":2457,"heroImage":2458,"category":1738,"date":2459,"authors":2460,"slug":2462,"externalUrl":1742},"Moderniser Java avec Cursor et GitLab","Ce tutoriel commence par la correction ciblée de tests, introduit des murs qualité et met en œuvre des modifications de code en tenant compte du contexte du cycle de développement, des tests et des preuves de revue.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-08-12",[2461],"Michael Friedrich","modernize-java-with-cursor-and-gitlab",{"title":2464,"description":2465,"heroImage":2466,"category":1738,"date":2467,"authors":2468,"slug":2470,"externalUrl":1742},"Comment utiliser des agents d'IA pour migrer la limitation de débit de GitLab","Découvrez comment notre équipe composée de trois personnes a utilisé GitLab Duo Agent Platform, ainsi que d'autres outils d'IA, pour migrer avec succès le système de limitation de débit et les leçons que nous en avons tirées.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1773075582/yiosxfhwk8rfkulrtchv.png","2026-08-10",[2469],"Sam Wiskow","ai-agents-for-migrating-rate-limiting-system",{"title":2472,"description":2473,"heroImage":2474,"category":1738,"date":2475,"authors":2476,"slug":2478,"externalUrl":1742},"Codage agentique : le contexte fait la différence","Les agents de codage accélèrent le développement. Grâce au contexte dans GitLab, les entreprises évitent les correctifs superficiels et raccourcissent les cycles de revue.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1773856365/gsx2c0vqlswox3ldmq88.jpg","2026-08-03",[2477],"Jessica Taylor","agentic-coding-only-as-good-as-context",{"promotions":2480},[2481,2494,2506,2518],{"id":2482,"categories":2483,"header":2484,"text":2485,"button":2486,"image":2491},"ai-modernization",[1738],"L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":2487,"config":2488},"Obtenez votre score de maturité IA",{"href":2489,"dataGaName":2490,"dataGaLocation":1971},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":2492},{"src":2493},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2495,"categories":2496,"header":2498,"text":2485,"button":2499,"image":2503},"devops-modernization",[2497,2308],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":2500,"config":2501},"Obtenez votre score de maturité DevOps",{"href":2502,"dataGaName":2490,"dataGaLocation":1971},"/fr-fr/assessments/devops-modernization-assessment/",{"config":2504},{"src":2505},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2507,"categories":2508,"header":2510,"text":2485,"button":2511,"image":2515},"security-modernization",[2509],"security","Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":2512,"config":2513},"Obtenez votre score de maturité en matière de sécurité",{"href":2514,"dataGaName":2490,"dataGaLocation":1971},"/fr-fr/assessments/security-modernization-assessment/",{"config":2516},{"src":2517},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2519,"paths":2520,"header":2523,"text":2524,"button":2525,"image":2530},"github-azure-migration",[2521,2522],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Votre équipe est-elle prête pour la migration de GitHub vers Azure ?","GitHub a déjà commencé sa migration vers Azure. Découvrez ce que cela signifie pour vous.",{"text":2526,"config":2527},"Découvrez les différences entre GitLab et GitHub",{"href":2528,"dataGaName":2529,"dataGaLocation":1971},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2531},{"src":2505},{"header":2533,"blurb":2534,"button":2535,"secondaryButton":2539},"Commencez à développer plus rapidement dès aujourd'hui","Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.\n",{"text":1766,"config":2536},{"href":2537,"dataGaName":1769,"dataGaLocation":2538},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":2094,"config":2540},{"href":2096,"dataGaName":1774,"dataGaLocation":2538},1786803764018]