[{"data":1,"prerenderedAt":1895},["ShallowReactive",2],{"/blog/secure-and-fast-deployments-to-google-agent-engine-with-gitlab":3,"navigation-en-us":1111,"banner-en-us":1538,"footer-en-us":1548,"blog-post-authors-en-us-Regnard Raquedan":1792,"blog-related-posts-en-us-secure-and-fast-deployments-to-google-agent-engine-with-gitlab":1807,"blog-promotions-en-us":1832,"next-steps-en-us":1885},{"id":4,"title":5,"authors":6,"body":8,"category":1091,"date":1092,"description":1093,"extension":1094,"externalUrl":1095,"faq":1095,"featured":1096,"heroImage":1097,"meta":1098,"navigation":235,"path":1099,"seo":1100,"slug":1102,"stem":1103,"tags":1104,"template":1109,"updatedDate":1095,"__hash__":1110},"blogPosts/en-us/blog/secure-and-fast-deployments-to-google-agent-engine-with-gitlab.md","Secure and fast deployments to Google Agent Engine with GitLab",[7],"Regnard Raquedan",{"type":9,"value":10,"toc":1078},"minimark",[11,28,33,36,40,43,46,69,73,76,98,101,105,108,111,157,160,166,179,182,331,335,342,699,702,708,714,719,739,743,746,766,769,786,790,793,816,984,987,991,994,1020,1024,1027,1041,1044,1057,1074],[12,13,14,15,21,22,27],"p",{},"In this tutorial, you'll learn how to deploy an AI agent built with Google's Agent Development Kit (",[16,17,20],"a",{"href":18,"rel":19},"https://google.github.io/adk-docs/",[],"ADK",") to ",[16,23,26],{"href":24,"rel":25},"https://cloud.google.com/vertex-ai/generative-ai/docs/agent-engine/overview",[],"Agent Engine"," using GitLab's native Google Cloud integration and CI/CD pipelines. We'll cover IAM configuration, pipeline setup, and testing your deployed agent.",[29,30,32],"h2",{"id":31},"what-is-agent-engine-and-why-does-it-matter","What is Agent Engine and why does it matter?",[12,34,35],{},"Agent Engine is Google Cloud's managed runtime specifically designed for AI agents. Think of it as the production home for your agents — where they live, run, and scale without you having to manage the underlying infrastructure. Agent Engine handles infrastructure, scaling, session management, and memory storage so you can focus on building your agent — not managing servers. It also integrates natively with Google Cloud's logging, monitoring, and IAM.",[29,37,39],{"id":38},"why-use-gitlab-to-deploy-to-agent-engine","Why use GitLab to deploy to Agent Engine?",[12,41,42],{},"AI agent deployment is typically difficult to configure correctly. Security considerations, CI/CD orchestration, and cloud permissions create friction that slows down development cycles.",[12,44,45],{},"GitLab streamlines this entire process while enhancing security:",[47,48,49,57,63],"ul",{},[50,51,52,56],"li",{},[53,54,55],"strong",{},"Built-in security scanning"," — Every deployment is automatically scanned for vulnerabilities without additional configuration.",[50,58,59,62],{},[53,60,61],{},"Native Google Cloud integration"," — Workload Identity Federation eliminates the need for service account keys.",[50,64,65,68],{},[53,66,67],{},"Simplified CI/CD"," — GitLab's templates handle complex deployment logic.",[29,70,72],{"id":71},"prerequisites","Prerequisites",[12,74,75],{},"Before you begin, ensure you have:",[47,77,78,89,92,95],{},[50,79,80,81],{},"A Google Cloud project with the following APIs enabled:\n",[47,82,83,86],{},[50,84,85],{},"Cloud Storage API",[50,87,88],{},"Vertex AI API",[50,90,91],{},"A GitLab project for your source code and CI/CD pipeline",[50,93,94],{},"A Google Cloud Storage bucket for staging deployments",[50,96,97],{},"Google Cloud IAM integration configured in GitLab (see Step 1)",[12,99,100],{},"Here are the steps to follow.",[29,102,104],{"id":103},"_1-configure-iam-integration","1. Configure IAM integration",[12,106,107],{},"The foundation of secure deployment is proper IAM configuration between GitLab and Google Cloud using Workload Identity Federation.",[12,109,110],{},"In your GitLab project:",[112,113,114,121,128],"ol",{},[50,115,116,117,120],{},"Navigate to ",[53,118,119],{},"Settings > Integrations",".",[50,122,123,124,127],{},"Locate the ",[53,125,126],{},"Google Cloud IAM"," integration.",[50,129,130,131],{},"Provide the following information:\n",[47,132,133,139,145,151],{},[50,134,135,138],{},[53,136,137],{},"Project ID",": Your Google Cloud project ID",[50,140,141,144],{},[53,142,143],{},"Project Number",": Found in your Google Cloud console",[50,146,147,150],{},[53,148,149],{},"Workload Identity Pool ID",": A unique identifier for your identity pool",[50,152,153,156],{},[53,154,155],{},"Provider ID",": A unique identifier for your identity provider",[12,158,159],{},"GitLab generates a script for you. Copy and run this script in Google Cloud Shell to establish the Workload Identity Federation between platforms.",[12,161,162,165],{},[53,163,164],{},"Important:"," Add these additional roles to your service principal for Agent Engine deployment:",[47,167,168,174],{},[50,169,170],{},[171,172,173],"code",{},"roles/aiplatform.user",[50,175,176],{},[171,177,178],{},"roles/storage.objectAdmin",[12,180,181],{},"You can add these roles using gcloud commands:",[183,184,189],"pre",{"className":185,"code":186,"language":187,"meta":188,"style":188},"language-bash shiki shiki-themes github-light","GCP_PROJECT_ID=\"\u003Cyour-project-id>\"\nGCP_PROJECT_NUMBER=\"\u003Cyour-project-number>\"\nGCP_WORKLOAD_IDENTITY_POOL=\"\u003Cyour-pool-id>\"\n\ngcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \\\n  --member=\"principalSet://iam.googleapis.com/projects/${GCP_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GCP_WORKLOAD_IDENTITY_POOL}/attribute.developer_access/true\" \\\n  --role='roles/aiplatform.user'\n\ngcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \\\n  --member=\"principalSet://iam.googleapis.com/projects/${GCP_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GCP_WORKLOAD_IDENTITY_POOL}/attribute.developer_access/true\" \\\n  --role='roles/storage.objectAdmin'\n","bash","",[171,190,191,208,219,230,237,257,279,288,293,306,323],{"__ignoreMap":188},[192,193,196,200,204],"span",{"class":194,"line":195},"line",1,[192,197,199],{"class":198},"sgsFI","GCP_PROJECT_ID",[192,201,203],{"class":202},"sD7c4","=",[192,205,207],{"class":206},"sYBdl","\"\u003Cyour-project-id>\"\n",[192,209,211,214,216],{"class":194,"line":210},2,[192,212,213],{"class":198},"GCP_PROJECT_NUMBER",[192,215,203],{"class":202},[192,217,218],{"class":206},"\"\u003Cyour-project-number>\"\n",[192,220,222,225,227],{"class":194,"line":221},3,[192,223,224],{"class":198},"GCP_WORKLOAD_IDENTITY_POOL",[192,226,203],{"class":202},[192,228,229],{"class":206},"\"\u003Cyour-pool-id>\"\n",[192,231,233],{"class":194,"line":232},4,[192,234,236],{"emptyLinePlaceholder":235},true,"\n",[192,238,240,244,247,250,253],{"class":194,"line":239},5,[192,241,243],{"class":242},"s7eDp","gcloud",[192,245,246],{"class":206}," projects",[192,248,249],{"class":206}," add-iam-policy-binding",[192,251,252],{"class":198}," ${GCP_PROJECT_ID} ",[192,254,256],{"class":255},"sYu0t","\\\n",[192,258,260,263,266,268,271,273,276],{"class":194,"line":259},6,[192,261,262],{"class":255},"  --member=",[192,264,265],{"class":206},"\"principalSet://iam.googleapis.com/projects/${",[192,267,213],{"class":198},[192,269,270],{"class":206},"}/locations/global/workloadIdentityPools/${",[192,272,224],{"class":198},[192,274,275],{"class":206},"}/attribute.developer_access/true\"",[192,277,278],{"class":255}," \\\n",[192,280,282,285],{"class":194,"line":281},7,[192,283,284],{"class":255},"  --role=",[192,286,287],{"class":206},"'roles/aiplatform.user'\n",[192,289,291],{"class":194,"line":290},8,[192,292,236],{"emptyLinePlaceholder":235},[192,294,296,298,300,302,304],{"class":194,"line":295},9,[192,297,243],{"class":242},[192,299,246],{"class":206},[192,301,249],{"class":206},[192,303,252],{"class":198},[192,305,256],{"class":255},[192,307,309,311,313,315,317,319,321],{"class":194,"line":308},10,[192,310,262],{"class":255},[192,312,265],{"class":206},[192,314,213],{"class":198},[192,316,270],{"class":206},[192,318,224],{"class":198},[192,320,275],{"class":206},[192,322,278],{"class":255},[192,324,326,328],{"class":194,"line":325},11,[192,327,284],{"class":255},[192,329,330],{"class":206},"'roles/storage.objectAdmin'\n",[29,332,334],{"id":333},"_2-create-the-cicd-pipeline","2. Create the CI/CD pipeline",[12,336,337,338,341],{},"Now for the core of the deployment — the CI/CD pipeline. Create a ",[171,339,340],{},".gitlab-ci.yml"," file in your project root:",[183,343,347],{"className":344,"code":345,"language":346,"meta":188,"style":188},"language-yaml shiki shiki-themes github-light","stages:\n  - test\n  - deploy\n\ncache:\n  paths:\n    - .cache/pip\n  key: ${CI_COMMIT_REF_SLUG}\n\nvariables:\n  GCP_PROJECT_ID: \"\u003Cyour-project-id>\"\n  GCP_REGION: \"us-central1\"\n  STORAGE_BUCKET: \"\u003Cyour-staging-bucket>\"\n  AGENT_NAME: \"Canada City Advisor\"\n  AGENT_ENTRY: \"canada_city_advisor\"\n\nimage: google/cloud-sdk:slim\n\n# Security scanning templates\ninclude:\n  - template: Jobs/Dependency-Scanning.gitlab-ci.yml\n  - template: Jobs/SAST.gitlab-ci.yml\n  - template: Jobs/Secret-Detection.gitlab-ci.yml\n\ndeploy-agent:\n  stage: deploy\n  identity: google_cloud\n  rules:\n    - if: $CI_COMMIT_BRANCH == \"main\"\n  before_script:\n    - gcloud config set core/disable_usage_reporting true\n    - gcloud config set component_manager/disable_update_check true\n    - pip install -q --no-cache-dir --upgrade pip google-genai google-cloud-aiplatform -r requirements.txt --break-system-packages\n  script:\n    - gcloud config set project $GCP_PROJECT_ID\n    - adk deploy agent_engine \n        --project=$GCP_PROJECT_ID \n        --region=$GCP_REGION \n        --staging_bucket=gs://$STORAGE_BUCKET \n        --display_name=\"$AGENT_NAME\" \n        $AGENT_ENTRY\n","yaml",[171,348,349,358,366,373,377,384,391,399,410,414,421,430,441,452,463,474,479,490,495,502,510,523,535,547,552,560,570,581,589,602,610,618,626,634,642,650,661,669,677,685,693],{"__ignoreMap":188},[192,350,351,355],{"class":194,"line":195},[192,352,354],{"class":353},"shJU0","stages",[192,356,357],{"class":198},":\n",[192,359,360,363],{"class":194,"line":210},[192,361,362],{"class":198},"  - ",[192,364,365],{"class":206},"test\n",[192,367,368,370],{"class":194,"line":221},[192,369,362],{"class":198},[192,371,372],{"class":206},"deploy\n",[192,374,375],{"class":194,"line":232},[192,376,236],{"emptyLinePlaceholder":235},[192,378,379,382],{"class":194,"line":239},[192,380,381],{"class":353},"cache",[192,383,357],{"class":198},[192,385,386,389],{"class":194,"line":259},[192,387,388],{"class":353},"  paths",[192,390,357],{"class":198},[192,392,393,396],{"class":194,"line":281},[192,394,395],{"class":198},"    - ",[192,397,398],{"class":206},".cache/pip\n",[192,400,401,404,407],{"class":194,"line":290},[192,402,403],{"class":353},"  key",[192,405,406],{"class":198},": ",[192,408,409],{"class":206},"${CI_COMMIT_REF_SLUG}\n",[192,411,412],{"class":194,"line":295},[192,413,236],{"emptyLinePlaceholder":235},[192,415,416,419],{"class":194,"line":308},[192,417,418],{"class":353},"variables",[192,420,357],{"class":198},[192,422,423,426,428],{"class":194,"line":325},[192,424,425],{"class":353},"  GCP_PROJECT_ID",[192,427,406],{"class":198},[192,429,207],{"class":206},[192,431,433,436,438],{"class":194,"line":432},12,[192,434,435],{"class":353},"  GCP_REGION",[192,437,406],{"class":198},[192,439,440],{"class":206},"\"us-central1\"\n",[192,442,444,447,449],{"class":194,"line":443},13,[192,445,446],{"class":353},"  STORAGE_BUCKET",[192,448,406],{"class":198},[192,450,451],{"class":206},"\"\u003Cyour-staging-bucket>\"\n",[192,453,455,458,460],{"class":194,"line":454},14,[192,456,457],{"class":353},"  AGENT_NAME",[192,459,406],{"class":198},[192,461,462],{"class":206},"\"Canada City Advisor\"\n",[192,464,466,469,471],{"class":194,"line":465},15,[192,467,468],{"class":353},"  AGENT_ENTRY",[192,470,406],{"class":198},[192,472,473],{"class":206},"\"canada_city_advisor\"\n",[192,475,477],{"class":194,"line":476},16,[192,478,236],{"emptyLinePlaceholder":235},[192,480,482,485,487],{"class":194,"line":481},17,[192,483,484],{"class":353},"image",[192,486,406],{"class":198},[192,488,489],{"class":206},"google/cloud-sdk:slim\n",[192,491,493],{"class":194,"line":492},18,[192,494,236],{"emptyLinePlaceholder":235},[192,496,498],{"class":194,"line":497},19,[192,499,501],{"class":500},"sAwPA","# Security scanning templates\n",[192,503,505,508],{"class":194,"line":504},20,[192,506,507],{"class":353},"include",[192,509,357],{"class":198},[192,511,513,515,518,520],{"class":194,"line":512},21,[192,514,362],{"class":198},[192,516,517],{"class":353},"template",[192,519,406],{"class":198},[192,521,522],{"class":206},"Jobs/Dependency-Scanning.gitlab-ci.yml\n",[192,524,526,528,530,532],{"class":194,"line":525},22,[192,527,362],{"class":198},[192,529,517],{"class":353},[192,531,406],{"class":198},[192,533,534],{"class":206},"Jobs/SAST.gitlab-ci.yml\n",[192,536,538,540,542,544],{"class":194,"line":537},23,[192,539,362],{"class":198},[192,541,517],{"class":353},[192,543,406],{"class":198},[192,545,546],{"class":206},"Jobs/Secret-Detection.gitlab-ci.yml\n",[192,548,550],{"class":194,"line":549},24,[192,551,236],{"emptyLinePlaceholder":235},[192,553,555,558],{"class":194,"line":554},25,[192,556,557],{"class":353},"deploy-agent",[192,559,357],{"class":198},[192,561,563,566,568],{"class":194,"line":562},26,[192,564,565],{"class":353},"  stage",[192,567,406],{"class":198},[192,569,372],{"class":206},[192,571,573,576,578],{"class":194,"line":572},27,[192,574,575],{"class":353},"  identity",[192,577,406],{"class":198},[192,579,580],{"class":206},"google_cloud\n",[192,582,584,587],{"class":194,"line":583},28,[192,585,586],{"class":353},"  rules",[192,588,357],{"class":198},[192,590,592,594,597,599],{"class":194,"line":591},29,[192,593,395],{"class":198},[192,595,596],{"class":353},"if",[192,598,406],{"class":198},[192,600,601],{"class":206},"$CI_COMMIT_BRANCH == \"main\"\n",[192,603,605,608],{"class":194,"line":604},30,[192,606,607],{"class":353},"  before_script",[192,609,357],{"class":198},[192,611,613,615],{"class":194,"line":612},31,[192,614,395],{"class":198},[192,616,617],{"class":206},"gcloud config set core/disable_usage_reporting true\n",[192,619,621,623],{"class":194,"line":620},32,[192,622,395],{"class":198},[192,624,625],{"class":206},"gcloud config set component_manager/disable_update_check true\n",[192,627,629,631],{"class":194,"line":628},33,[192,630,395],{"class":198},[192,632,633],{"class":206},"pip install -q --no-cache-dir --upgrade pip google-genai google-cloud-aiplatform -r requirements.txt --break-system-packages\n",[192,635,637,640],{"class":194,"line":636},34,[192,638,639],{"class":353},"  script",[192,641,357],{"class":198},[192,643,645,647],{"class":194,"line":644},35,[192,646,395],{"class":198},[192,648,649],{"class":206},"gcloud config set project $GCP_PROJECT_ID\n",[192,651,653,655,658],{"class":194,"line":652},36,[192,654,395],{"class":198},[192,656,657],{"class":206},"adk deploy agent_engine",[192,659,660],{"class":198}," \n",[192,662,664,667],{"class":194,"line":663},37,[192,665,666],{"class":206},"        --project=$GCP_PROJECT_ID",[192,668,660],{"class":198},[192,670,672,675],{"class":194,"line":671},38,[192,673,674],{"class":206},"        --region=$GCP_REGION",[192,676,660],{"class":198},[192,678,680,683],{"class":194,"line":679},39,[192,681,682],{"class":206},"        --staging_bucket=gs://$STORAGE_BUCKET",[192,684,660],{"class":198},[192,686,688,691],{"class":194,"line":687},40,[192,689,690],{"class":206},"        --display_name=\"$AGENT_NAME\"",[192,692,660],{"class":198},[192,694,696],{"class":194,"line":695},41,[192,697,698],{"class":206},"        $AGENT_ENTRY\n",[12,700,701],{},"The pipeline consists of two stages:",[12,703,704,707],{},[53,705,706],{},"Test stage"," — GitLab's security scanners run automatically. The included templates provide dependency scanning, static application security testing (SAST), and secret detection without additional configuration.",[12,709,710,713],{},[53,711,712],{},"Deploy stage"," — Uses the ADK CLI to deploy your agent directly to Agent Engine. The staging bucket temporarily holds your application workload before Agent Engine picks it up for deployment.",[715,716,718],"h3",{"id":717},"key-configuration-notes","Key configuration notes",[47,720,721,728,731,736],{},[50,722,723,724,727],{},"The ",[171,725,726],{},"identity: google_cloud"," directive enables keyless authentication via Workload Identity Federation.",[50,729,730],{},"Security scanners are included as templates, meaning they run by default with no setup required.",[50,732,723,733,735],{},[171,734,657],{}," command handles all the complexity of packaging and deploying your agent.",[50,737,738],{},"Pipeline caching speeds up subsequent deployments by preserving pip dependencies.",[29,740,742],{"id":741},"_3-deploy-and-verify","3. Deploy and verify",[12,744,745],{},"With your pipeline configured:",[112,747,748,754,760,763],{},[50,749,750,751,753],{},"Commit your agent code and ",[171,752,340],{}," to GitLab.",[50,755,116,756,759],{},[53,757,758],{},"Build > Pipelines"," to monitor execution.",[50,761,762],{},"Watch the test stage complete security scans.",[50,764,765],{},"Observe the deploy stage push your agent to Agent Engine.",[12,767,768],{},"Once the pipeline succeeds, verify your deployment in the Google Cloud Console:",[112,770,771,776,779],{},[50,772,116,773,120],{},[53,774,775],{},"Vertex AI > Agent Engine",[50,777,778],{},"Locate your deployed agent.",[50,780,781,782,785],{},"Note the ",[53,783,784],{},"resource name"," — you'll need this for testing.",[29,787,789],{"id":788},"_4-test-your-deployed-agent","4. Test your deployed agent",[12,791,792],{},"Test your agent using a curl command. You'll need three pieces of information:",[47,794,795,801,806],{},[50,796,797,800],{},[53,798,799],{},"Agent ID",": From the Agent Engine console (the resource name's numeric identifier)",[50,802,803,805],{},[53,804,137],{},": Your Google Cloud project",[50,807,808,811,812,815],{},[53,809,810],{},"Location",": The region where you deployed (e.g., ",[171,813,814],{},"us-central1",")",[183,817,819],{"className":185,"code":818,"language":187,"meta":188,"style":188},"PROJECT_ID=\"\u003Cyour-project-id>\"\nLOCATION=\"us-central1\"\nAGENT_ID=\"\u003Cyour-agent-id>\"\nTOKEN=$(gcloud auth print-access-token)\n\ncurl -X POST \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  \"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/reasoningEngines/${AGENT_ID}:streamQuery\" \\\n  -d '{\n    \"input\": {\n      \"message\": \"I make $85,000 per year and I prefer cities with mild winters and a vibrant cultural scene. I also want to be near the coast if possible. What Canadian cities would you recommend?\",\n      \"user_id\": \"demo-user\"\n    }\n  }' | jq -r '.content.parts[0].text'\n",[171,820,821,830,839,849,870,874,887,903,912,939,947,952,957,962,967],{"__ignoreMap":188},[192,822,823,826,828],{"class":194,"line":195},[192,824,825],{"class":198},"PROJECT_ID",[192,827,203],{"class":202},[192,829,207],{"class":206},[192,831,832,835,837],{"class":194,"line":210},[192,833,834],{"class":198},"LOCATION",[192,836,203],{"class":202},[192,838,440],{"class":206},[192,840,841,844,846],{"class":194,"line":221},[192,842,843],{"class":198},"AGENT_ID",[192,845,203],{"class":202},[192,847,848],{"class":206},"\"\u003Cyour-agent-id>\"\n",[192,850,851,854,856,859,861,864,867],{"class":194,"line":232},[192,852,853],{"class":198},"TOKEN",[192,855,203],{"class":202},[192,857,858],{"class":198},"$(",[192,860,243],{"class":242},[192,862,863],{"class":206}," auth",[192,865,866],{"class":206}," print-access-token",[192,868,869],{"class":198},")\n",[192,871,872],{"class":194,"line":239},[192,873,236],{"emptyLinePlaceholder":235},[192,875,876,879,882,885],{"class":194,"line":259},[192,877,878],{"class":242},"curl",[192,880,881],{"class":255}," -X",[192,883,884],{"class":206}," POST",[192,886,278],{"class":255},[192,888,889,892,895,898,901],{"class":194,"line":281},[192,890,891],{"class":255},"  -H",[192,893,894],{"class":206}," \"Authorization: Bearer ",[192,896,897],{"class":198},"$TOKEN",[192,899,900],{"class":206},"\"",[192,902,278],{"class":255},[192,904,905,907,910],{"class":194,"line":290},[192,906,891],{"class":255},[192,908,909],{"class":206}," \"Content-Type: application/json\"",[192,911,278],{"class":255},[192,913,914,917,919,922,924,927,929,932,934,937],{"class":194,"line":295},[192,915,916],{"class":206},"  \"https://${",[192,918,834],{"class":198},[192,920,921],{"class":206},"}-aiplatform.googleapis.com/v1/projects/${",[192,923,825],{"class":198},[192,925,926],{"class":206},"}/locations/${",[192,928,834],{"class":198},[192,930,931],{"class":206},"}/reasoningEngines/${",[192,933,843],{"class":198},[192,935,936],{"class":206},"}:streamQuery\"",[192,938,278],{"class":255},[192,940,941,944],{"class":194,"line":308},[192,942,943],{"class":255},"  -d",[192,945,946],{"class":206}," '{\n",[192,948,949],{"class":194,"line":325},[192,950,951],{"class":206},"    \"input\": {\n",[192,953,954],{"class":194,"line":432},[192,955,956],{"class":206},"      \"message\": \"I make $85,000 per year and I prefer cities with mild winters and a vibrant cultural scene. I also want to be near the coast if possible. What Canadian cities would you recommend?\",\n",[192,958,959],{"class":194,"line":443},[192,960,961],{"class":206},"      \"user_id\": \"demo-user\"\n",[192,963,964],{"class":194,"line":454},[192,965,966],{"class":206},"    }\n",[192,968,969,972,975,978,981],{"class":194,"line":465},[192,970,971],{"class":206},"  }'",[192,973,974],{"class":202}," |",[192,976,977],{"class":242}," jq",[192,979,980],{"class":255}," -r",[192,982,983],{"class":206}," '.content.parts[0].text'\n",[12,985,986],{},"If everything is configured correctly, your agent will respond with personalized city recommendations based on the budget and lifestyle preferences provided.",[29,988,990],{"id":989},"security-benefits-of-this-approach","Security benefits of this approach",[12,992,993],{},"This deployment pattern provides several security advantages:",[47,995,996,1002,1008,1014],{},[50,997,998,1001],{},[53,999,1000],{},"No long-lived credentials",": Workload Identity Federation eliminates service account keys entirely.",[50,1003,1004,1007],{},[53,1005,1006],{},"Automated vulnerability scanning",": Every deployment is scanned before reaching production.",[50,1009,1010,1013],{},[53,1011,1012],{},"Complete audit trail",": GitLab maintains full visibility of who deployed what and when.",[50,1015,1016,1019],{},[53,1017,1018],{},"Principle of least privilege",": Fine-grained IAM roles limit access to only what's needed.",[29,1021,1023],{"id":1022},"summary","Summary",[12,1025,1026],{},"Deploying AI agents to production doesn't have to be complex. By combining GitLab's DevSecOps platform with Google Cloud's Agent Engine, you get:",[47,1028,1029,1032,1035,1038],{},[50,1030,1031],{},"A managed runtime that handles scaling and infrastructure",[50,1033,1034],{},"Built-in security scanning without additional tooling",[50,1036,1037],{},"Keyless authentication via native cloud integration",[50,1039,1040],{},"A streamlined deployment process that fits modern AI development workflows",[12,1042,1043],{},"Watch the full demo:",[1045,1046,1049,1050,1049],"figure",{"className":1047},[1048],"video_container"," ",[1051,1052,1049],"iframe",{"src":1053,"frameBorder":1054,"allowFullScreen":1055,"title":1056},"https://www.youtube.com/embed/sxVFa2Mk-x4?si=Oi3cUjhgd7FT2yEd","0","true","Deploy AI Agents to Agent Engine with GitLab",[1058,1059,1060],"blockquote",{},[12,1061,1062,1063,1068,1069,120],{},"Ready to try it yourself? Use this tutorial's ",[16,1064,1067],{"href":1065,"rel":1066},"https://gitlab.com/gitlab-partners-public/google-cloud/demos/agent-engine-demo",[],"complete code example"," to get started now. Not a GitLab customer yet? Explore the DevSecOps platform with ",[16,1070,1073],{"href":1071,"rel":1072},"https://about.gitlab.com/free-trial/",[],"a free trial",[1075,1076,1077],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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 .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":188,"searchDepth":210,"depth":210,"links":1079},[1080,1081,1082,1083,1084,1087,1088,1089,1090],{"id":31,"depth":210,"text":32},{"id":38,"depth":210,"text":39},{"id":71,"depth":210,"text":72},{"id":103,"depth":210,"text":104},{"id":333,"depth":210,"text":334,"children":1085},[1086],{"id":717,"depth":221,"text":718},{"id":741,"depth":210,"text":742},{"id":788,"depth":210,"text":789},{"id":989,"depth":210,"text":990},{"id":1022,"depth":210,"text":1023},"ai","2026-02-26","Follow this step-by-step guide to build an AI agent with Google's Agent Development Kit and deploy to Agent Engine using GitLab.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772111172/mwhgbjawn62kymfwrhle.png",{},"/en-us/blog/secure-and-fast-deployments-to-google-agent-engine-with-gitlab",{"config":1101,"title":5,"description":1093},{"noIndex":1096},"secure-and-fast-deployments-to-google-agent-engine-with-gitlab","en-us/blog/secure-and-fast-deployments-to-google-agent-engine-with-gitlab",[1105,1106,1107,1108],"AI","google","CI/CD","DevSecOps","BlogPost","PrfrL3b7zpoRaz-vgZDvOcCL_YMBXUGlw4sKQlBdHlE",{"logo":1112,"freeTrial":1117,"sales":1122,"login":1127,"items":1132,"search":1458,"minimal":1489,"duo":1508,"switchNav":1517,"pricingDeployment":1528},{"config":1113},{"href":1114,"dataGaName":1115,"dataGaLocation":1116},"/","gitlab logo","header",{"text":1118,"config":1119},"Get free trial",{"href":1120,"dataGaName":1121,"dataGaLocation":1116},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":1123,"config":1124},"Request a demo",{"href":1125,"dataGaName":1126,"dataGaLocation":1116},"/sales/?contact-topic=request-demo","sales",{"text":1128,"config":1129},"Sign in",{"href":1130,"dataGaName":1131,"dataGaLocation":1116},"https://gitlab.com/users/sign_in/","sign in",[1133,1162,1261,1266,1380,1436],{"text":1134,"config":1135,"menu":1137},"Platform",{"dataNavLevelOne":1136},"platform",{"type":1138,"columns":1139},"cards",[1140,1146,1154],{"title":1134,"description":1141,"link":1142},"The intelligent orchestration platform for DevSecOps",{"text":1143,"config":1144},"Explore our Platform",{"href":1145,"dataGaName":1136,"dataGaLocation":1116},"/platform/",{"title":1147,"description":1148,"link":1149},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":1150,"config":1151},"Meet GitLab Duo",{"href":1152,"dataGaName":1153,"dataGaLocation":1116},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1155,"description":1156,"link":1157},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":1158,"config":1159},"Learn more",{"href":1160,"dataGaName":1161,"dataGaLocation":1116},"/why-gitlab/","why gitlab",{"text":1163,"left":235,"config":1164,"menu":1166},"Product",{"dataNavLevelOne":1165},"solutions",{"type":1167,"link":1168,"columns":1172,"feature":1240},"lists",{"text":1169,"config":1170},"View all Solutions",{"href":1171,"dataGaName":1165,"dataGaLocation":1116},"/solutions/",[1173,1196,1219],{"title":1174,"description":1175,"link":1176,"items":1181},"Automation","CI/CD and automation to accelerate deployment",{"config":1177},{"icon":1178,"href":1179,"dataGaName":1180,"dataGaLocation":1116},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[1182,1185,1188,1192],{"text":1107,"config":1183},{"href":1184,"dataGaLocation":1116,"dataGaName":1107},"/solutions/continuous-integration/",{"text":1147,"config":1186},{"href":1152,"dataGaLocation":1116,"dataGaName":1187},"gitlab duo agent platform - product menu",{"text":1189,"config":1190},"Source Code Management",{"href":1191,"dataGaLocation":1116,"dataGaName":1189},"/solutions/source-code-management/",{"text":1193,"config":1194},"Automated Software Delivery",{"href":1179,"dataGaLocation":1116,"dataGaName":1195},"Automated software delivery",{"title":1197,"description":1198,"link":1199,"items":1204},"Security","Deliver code faster without compromising security",{"config":1200},{"href":1201,"dataGaName":1202,"dataGaLocation":1116,"icon":1203},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1205,1209,1214],{"text":1206,"config":1207},"Application Security Testing",{"href":1201,"dataGaName":1208,"dataGaLocation":1116},"Application security testing",{"text":1210,"config":1211},"Software Supply Chain Security",{"href":1212,"dataGaLocation":1116,"dataGaName":1213},"/solutions/supply-chain/","Software supply chain security",{"text":1215,"config":1216},"Software Compliance",{"href":1217,"dataGaName":1218,"dataGaLocation":1116},"/solutions/software-compliance/","software compliance",{"title":1220,"link":1221,"items":1226},"Measurement",{"config":1222},{"icon":1223,"href":1224,"dataGaName":1225,"dataGaLocation":1116},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[1227,1231,1235],{"text":1228,"config":1229},"Visibility & Measurement",{"href":1224,"dataGaLocation":1116,"dataGaName":1230},"Visibility and Measurement",{"text":1232,"config":1233},"Value Stream Management",{"href":1234,"dataGaLocation":1116,"dataGaName":1232},"/solutions/value-stream-management/",{"text":1236,"config":1237},"Analytics & Insights",{"href":1238,"dataGaLocation":1116,"dataGaName":1239},"/solutions/analytics-and-insights/","Analytics and insights",{"title":1241,"type":1167,"items":1242},"GitLab for",[1243,1249,1255],{"text":1244,"config":1245},"Enterprise",{"icon":1246,"href":1247,"dataGaLocation":1116,"dataGaName":1248},"Building","/enterprise/","enterprise",{"text":1250,"config":1251},"Small Business",{"icon":1252,"href":1253,"dataGaLocation":1116,"dataGaName":1254},"Work","/small-business/","small business",{"text":1256,"config":1257},"Public Sector",{"icon":1258,"href":1259,"dataGaLocation":1116,"dataGaName":1260},"Organization","/solutions/public-sector/","public sector",{"text":1262,"config":1263},"Pricing",{"href":1264,"dataGaName":1265,"dataGaLocation":1116,"dataNavLevelOne":1265},"/pricing/","pricing",{"text":1267,"config":1268,"menu":1270},"Resources",{"dataNavLevelOne":1269},"resources",{"type":1167,"link":1271,"columns":1275,"feature":1369},{"text":1272,"config":1273},"View all resources",{"href":1274,"dataGaName":1269,"dataGaLocation":1116},"/resources/",[1276,1309,1336],{"title":1277,"items":1278},"Getting started",[1279,1284,1289,1294,1299,1304],{"text":1280,"config":1281},"Install",{"href":1282,"dataGaName":1283,"dataGaLocation":1116},"/install/","install",{"text":1285,"config":1286},"Quick start guides",{"href":1287,"dataGaName":1288,"dataGaLocation":1116},"/get-started/","quick setup checklists",{"text":1290,"config":1291},"Learn",{"href":1292,"dataGaLocation":1116,"dataGaName":1293},"https://university.gitlab.com/","learn",{"text":1295,"config":1296},"Product documentation",{"href":1297,"dataGaName":1298,"dataGaLocation":1116},"https://docs.gitlab.com/","product documentation",{"text":1300,"config":1301},"Best practice videos",{"href":1302,"dataGaName":1303,"dataGaLocation":1116},"/getting-started-videos/","best practice videos",{"text":1305,"config":1306},"Integrations",{"href":1307,"dataGaName":1308,"dataGaLocation":1116},"/integrations/","integrations",{"title":1310,"items":1311},"Discover",[1312,1317,1322,1327,1331],{"text":1313,"config":1314},"Customer success stories",{"href":1315,"dataGaName":1316,"dataGaLocation":1116},"/customers/","customer success stories",{"text":1318,"config":1319},"Blog",{"href":1320,"dataGaName":1321,"dataGaLocation":1116},"/blog/","blog",{"text":1323,"config":1324},"Demo Hub",{"href":1325,"dataGaName":1326,"dataGaLocation":1116},"/demo-hub/","demo hub",{"text":1328,"config":1329},"The Source",{"href":1330,"dataGaName":1321,"dataGaLocation":1116},"/the-source/",{"text":1332,"config":1333},"Remote",{"href":1334,"dataGaName":1335,"dataGaLocation":1116},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1337,"items":1338},"Connect",[1339,1344,1349,1354,1359,1364],{"text":1340,"config":1341},"GitLab Services",{"href":1342,"dataGaName":1343,"dataGaLocation":1116},"/services/","services",{"text":1345,"config":1346},"Contribute",{"href":1347,"dataGaName":1348,"dataGaLocation":1116},"https://contributors.gitlab.com","contribute",{"text":1350,"config":1351},"Community",{"href":1352,"dataGaName":1353,"dataGaLocation":1116},"/community/","community",{"text":1355,"config":1356},"Forum",{"href":1357,"dataGaName":1358,"dataGaLocation":1116},"https://forum.gitlab.com/","forum",{"text":1360,"config":1361},"Events",{"href":1362,"dataGaName":1363,"dataGaLocation":1116},"/events/","events",{"text":1365,"config":1366},"Partners",{"href":1367,"dataGaName":1368,"dataGaLocation":1116},"/partners/","partners",{"config":1370,"title":1373,"text":1374,"link":1375},{"background":1371,"textColor":1372},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":1376,"config":1377},"Read the latest",{"href":1378,"dataGaName":1379,"dataGaLocation":1116},"/whats-new/","whats new",{"text":1381,"config":1382,"menu":1384},"Company",{"dataNavLevelOne":1383},"company",{"type":1167,"columns":1385},[1386],{"items":1387},[1388,1393,1399,1401,1406,1411,1416,1421,1426,1431],{"text":1389,"config":1390},"About",{"href":1391,"dataGaName":1392,"dataGaLocation":1116},"/company/","about",{"text":1394,"config":1395,"footerGa":1398},"Jobs",{"href":1396,"dataGaName":1397,"dataGaLocation":1116},"/jobs/","jobs",{"dataGaName":1397},{"text":1360,"config":1400},{"href":1362,"dataGaName":1363,"dataGaLocation":1116},{"text":1402,"config":1403},"Leadership",{"href":1404,"dataGaName":1405,"dataGaLocation":1116},"/company/team/e-group/","leadership",{"text":1407,"config":1408},"Handbook",{"href":1409,"dataGaName":1410,"dataGaLocation":1116},"https://handbook.gitlab.com/","handbook",{"text":1412,"config":1413},"Investor relations",{"href":1414,"dataGaName":1415,"dataGaLocation":1116},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1417,"config":1418},"Trust Center",{"href":1419,"dataGaName":1420,"dataGaLocation":1116},"/security/","trust center",{"text":1422,"config":1423},"AI Transparency Center",{"href":1424,"dataGaName":1425,"dataGaLocation":1116},"/ai-transparency-center/","ai transparency center",{"text":1427,"config":1428},"Newsletter",{"href":1429,"dataGaName":1430,"dataGaLocation":1116},"/company/contact/#contact-forms","newsletter",{"text":1432,"config":1433},"Press",{"href":1434,"dataGaName":1435,"dataGaLocation":1116},"/press/","press",{"text":1437,"config":1438,"menu":1439},"Contact us",{"dataNavLevelOne":1383},{"type":1167,"columns":1440},[1441],{"items":1442},[1443,1448,1453],{"text":1444,"config":1445},"Talk to sales",{"href":1446,"dataGaName":1447,"dataGaLocation":1116},"/sales/","talk to sales",{"text":1449,"config":1450},"Support portal",{"href":1451,"dataGaName":1452,"dataGaLocation":1116},"https://support.gitlab.com/hc/en-us","support portal",{"text":1454,"config":1455},"Customer portal",{"href":1456,"dataGaName":1457,"dataGaLocation":1116},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1459,"login":1460,"suggestions":1467},"Close",{"text":1461,"link":1462},"To search repositories and projects, login to",{"text":1463,"config":1464},"gitlab.com",{"href":1130,"dataGaName":1465,"dataGaLocation":1466},"search login","search",{"text":1468,"default":1469},"Suggestions",[1470,1472,1476,1478,1482,1486],{"text":1147,"config":1471},{"href":1152,"dataGaName":1147,"dataGaLocation":1466},{"text":1473,"config":1474},"Code Suggestions (AI)",{"href":1475,"dataGaName":1473,"dataGaLocation":1466},"/solutions/code-suggestions/",{"text":1107,"config":1477},{"href":1184,"dataGaName":1107,"dataGaLocation":1466},{"text":1479,"config":1480},"GitLab on AWS",{"href":1481,"dataGaName":1479,"dataGaLocation":1466},"/partners/technology-partners/aws/",{"text":1483,"config":1484},"GitLab on Google Cloud",{"href":1485,"dataGaName":1483,"dataGaLocation":1466},"/partners/technology-partners/google-cloud-platform/",{"text":1487,"config":1488},"Why GitLab?",{"href":1160,"dataGaName":1487,"dataGaLocation":1466},{"freeTrial":1490,"mobileIcon":1495,"desktopIcon":1500,"secondaryButton":1503},{"text":1491,"config":1492},"Start free trial",{"href":1493,"dataGaName":1121,"dataGaLocation":1494},"https://gitlab.com/-/trials/new/","nav",{"altText":1496,"config":1497},"Gitlab Icon",{"src":1498,"dataGaName":1499,"dataGaLocation":1494},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1496,"config":1501},{"src":1502,"dataGaName":1499,"dataGaLocation":1494},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1504,"config":1505},"Get Started",{"href":1506,"dataGaName":1507,"dataGaLocation":1494},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1509,"mobileIcon":1513,"desktopIcon":1515},{"text":1510,"config":1511},"Learn more about GitLab Duo",{"href":1152,"dataGaName":1512,"dataGaLocation":1494},"gitlab duo",{"altText":1496,"config":1514},{"src":1498,"dataGaName":1499,"dataGaLocation":1494},{"altText":1496,"config":1516},{"src":1502,"dataGaName":1499,"dataGaLocation":1494},{"button":1518,"mobileIcon":1523,"desktopIcon":1525},{"text":1519,"config":1520},"/switch",{"href":1521,"dataGaName":1522,"dataGaLocation":1494},"#contact","switch",{"altText":1496,"config":1524},{"src":1498,"dataGaName":1499,"dataGaLocation":1494},{"altText":1496,"config":1526},{"src":1527,"dataGaName":1499,"dataGaLocation":1494},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1529,"mobileIcon":1534,"desktopIcon":1536},{"text":1530,"config":1531},"Back to pricing",{"href":1264,"dataGaName":1532,"dataGaLocation":1494,"icon":1533},"back to pricing","GoBack",{"altText":1496,"config":1535},{"src":1498,"dataGaName":1499,"dataGaLocation":1494},{"altText":1496,"config":1537},{"src":1502,"dataGaName":1499,"dataGaLocation":1494},{"title":1539,"titleMobile":1540,"button":1541,"config":1546},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":1158,"config":1542},{"href":1543,"dataGaName":1544,"dataGaLocation":1545},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1547,"disabled":1096},"release",{"data":1549},{"text":1550,"source":1551,"edit":1557,"contribute":1562,"config":1567,"items":1572,"minimal":1781},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1552,"config":1553},"View page source",{"href":1554,"dataGaName":1555,"dataGaLocation":1556},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1558,"config":1559},"Edit this page",{"href":1560,"dataGaName":1561,"dataGaLocation":1556},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1563,"config":1564},"Please contribute",{"href":1565,"dataGaName":1566,"dataGaLocation":1556},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1568,"facebook":1569,"youtube":1570,"linkedin":1571},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1573,1620,1673,1717,1749],{"title":1262,"links":1574,"subMenu":1589},[1575,1579,1584],{"text":1576,"config":1577},"View plans",{"href":1264,"dataGaName":1578,"dataGaLocation":1556},"view plans",{"text":1580,"config":1581},"Why Premium?",{"href":1582,"dataGaName":1583,"dataGaLocation":1556},"/pricing/premium/","why premium",{"text":1585,"config":1586},"Why Ultimate?",{"href":1587,"dataGaName":1588,"dataGaLocation":1556},"/pricing/ultimate/","why ultimate",[1590],{"title":1591,"links":1592},"Contact Us",[1593,1596,1598,1600,1605,1610,1615],{"text":1594,"config":1595},"Contact sales",{"href":1446,"dataGaName":1126,"dataGaLocation":1556},{"text":1449,"config":1597},{"href":1451,"dataGaName":1452,"dataGaLocation":1556},{"text":1454,"config":1599},{"href":1456,"dataGaName":1457,"dataGaLocation":1556},{"text":1601,"config":1602},"Status",{"href":1603,"dataGaName":1604,"dataGaLocation":1556},"https://status.gitlab.com/","status",{"text":1606,"config":1607},"Terms of use",{"href":1608,"dataGaName":1609,"dataGaLocation":1556},"/terms/","terms of use",{"text":1611,"config":1612},"Privacy statement",{"href":1613,"dataGaName":1614,"dataGaLocation":1556},"/privacy/","privacy statement",{"text":1616,"config":1617},"Cookie preferences",{"dataGaName":1618,"dataGaLocation":1556,"id":1619,"isOneTrustButton":235},"cookie preferences","ot-sdk-btn",{"title":1163,"links":1621,"subMenu":1630},[1622,1626],{"text":1623,"config":1624},"DevSecOps platform",{"href":1145,"dataGaName":1625,"dataGaLocation":1556},"devsecops platform",{"text":1627,"config":1628},"AI-Assisted Development",{"href":1152,"dataGaName":1629,"dataGaLocation":1556},"ai-assisted development",[1631],{"title":1632,"links":1633},"Topics",[1634,1639,1644,1649,1654,1658,1663,1668],{"text":1635,"config":1636},"CICD",{"href":1637,"dataGaName":1638,"dataGaLocation":1556},"/topics/ci-cd/","cicd",{"text":1640,"config":1641},"GitOps",{"href":1642,"dataGaName":1643,"dataGaLocation":1556},"/topics/gitops/","gitops",{"text":1645,"config":1646},"DevOps",{"href":1647,"dataGaName":1648,"dataGaLocation":1556},"/topics/devops/","devops",{"text":1650,"config":1651},"Version Control",{"href":1652,"dataGaName":1653,"dataGaLocation":1556},"/topics/version-control/","version control",{"text":1108,"config":1655},{"href":1656,"dataGaName":1657,"dataGaLocation":1556},"/topics/devsecops/","devsecops",{"text":1659,"config":1660},"Cloud Native",{"href":1661,"dataGaName":1662,"dataGaLocation":1556},"/topics/cloud-native/","cloud native",{"text":1664,"config":1665},"AI for Coding",{"href":1666,"dataGaName":1667,"dataGaLocation":1556},"/topics/devops/ai-for-coding/","ai for coding",{"text":1669,"config":1670},"Agentic AI",{"href":1671,"dataGaName":1672,"dataGaLocation":1556},"/topics/agentic-ai/","agentic ai",{"title":1674,"links":1675},"Solutions",[1676,1678,1680,1685,1689,1692,1696,1699,1701,1704,1707,1712],{"text":1206,"config":1677},{"href":1201,"dataGaName":1206,"dataGaLocation":1556},{"text":1195,"config":1679},{"href":1179,"dataGaName":1180,"dataGaLocation":1556},{"text":1681,"config":1682},"Agile development",{"href":1683,"dataGaName":1684,"dataGaLocation":1556},"/solutions/agile-delivery/","agile delivery",{"text":1686,"config":1687},"SCM",{"href":1191,"dataGaName":1688,"dataGaLocation":1556},"source code management",{"text":1635,"config":1690},{"href":1184,"dataGaName":1691,"dataGaLocation":1556},"continuous integration & delivery",{"text":1693,"config":1694},"Value stream management",{"href":1234,"dataGaName":1695,"dataGaLocation":1556},"value stream management",{"text":1640,"config":1697},{"href":1698,"dataGaName":1643,"dataGaLocation":1556},"/solutions/gitops/",{"text":1244,"config":1700},{"href":1247,"dataGaName":1248,"dataGaLocation":1556},{"text":1702,"config":1703},"Small business",{"href":1253,"dataGaName":1254,"dataGaLocation":1556},{"text":1705,"config":1706},"Public sector",{"href":1259,"dataGaName":1260,"dataGaLocation":1556},{"text":1708,"config":1709},"Education",{"href":1710,"dataGaName":1711,"dataGaLocation":1556},"/solutions/education/","education",{"text":1713,"config":1714},"Financial services",{"href":1715,"dataGaName":1716,"dataGaLocation":1556},"/solutions/finance/","financial services",{"title":1267,"links":1718},[1719,1721,1723,1725,1728,1730,1733,1735,1737,1739,1741,1743,1745,1747],{"text":1280,"config":1720},{"href":1282,"dataGaName":1283,"dataGaLocation":1556},{"text":1285,"config":1722},{"href":1287,"dataGaName":1288,"dataGaLocation":1556},{"text":1290,"config":1724},{"href":1292,"dataGaName":1293,"dataGaLocation":1556},{"text":1295,"config":1726},{"href":1297,"dataGaName":1727,"dataGaLocation":1556},"docs",{"text":1318,"config":1729},{"href":1320,"dataGaName":1321,"dataGaLocation":1556},{"text":1731,"config":1732},"What's new",{"href":1378,"dataGaName":1379,"dataGaLocation":1556},{"text":1313,"config":1734},{"href":1315,"dataGaName":1316,"dataGaLocation":1556},{"text":1332,"config":1736},{"href":1334,"dataGaName":1335,"dataGaLocation":1556},{"text":1340,"config":1738},{"href":1342,"dataGaName":1343,"dataGaLocation":1556},{"text":1345,"config":1740},{"href":1347,"dataGaName":1348,"dataGaLocation":1556},{"text":1350,"config":1742},{"href":1352,"dataGaName":1353,"dataGaLocation":1556},{"text":1355,"config":1744},{"href":1357,"dataGaName":1358,"dataGaLocation":1556},{"text":1360,"config":1746},{"href":1362,"dataGaName":1363,"dataGaLocation":1556},{"text":1365,"config":1748},{"href":1367,"dataGaName":1368,"dataGaLocation":1556},{"title":1381,"links":1750},[1751,1753,1755,1757,1759,1761,1765,1770,1772,1774,1776],{"text":1389,"config":1752},{"href":1391,"dataGaName":1383,"dataGaLocation":1556},{"text":1394,"config":1754},{"href":1396,"dataGaName":1397,"dataGaLocation":1556},{"text":1402,"config":1756},{"href":1404,"dataGaName":1405,"dataGaLocation":1556},{"text":1407,"config":1758},{"href":1409,"dataGaName":1410,"dataGaLocation":1556},{"text":1412,"config":1760},{"href":1414,"dataGaName":1415,"dataGaLocation":1556},{"text":1762,"config":1763},"Sustainability",{"href":1764,"dataGaName":1762,"dataGaLocation":1556},"/sustainability/",{"text":1766,"config":1767},"Diversity, inclusion and belonging (DIB)",{"href":1768,"dataGaName":1769,"dataGaLocation":1556},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1417,"config":1771},{"href":1419,"dataGaName":1420,"dataGaLocation":1556},{"text":1427,"config":1773},{"href":1429,"dataGaName":1430,"dataGaLocation":1556},{"text":1432,"config":1775},{"href":1434,"dataGaName":1435,"dataGaLocation":1556},{"text":1777,"config":1778},"Modern Slavery Transparency Statement",{"href":1779,"dataGaName":1780,"dataGaLocation":1556},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1782},[1783,1786,1789],{"text":1784,"config":1785},"Terms",{"href":1608,"dataGaName":1609,"dataGaLocation":1556},{"text":1787,"config":1788},"Cookies",{"dataGaName":1618,"dataGaLocation":1556,"id":1619,"isOneTrustButton":235},{"text":1790,"config":1791},"Privacy",{"href":1613,"dataGaName":1614,"dataGaLocation":1556},[1793],{"id":1794,"title":7,"body":1095,"config":1795,"content":1797,"description":1095,"extension":1801,"meta":1802,"navigation":235,"path":1803,"seo":1804,"stem":1805,"__hash__":1806},"blogAuthors/en-us/blog/authors/regnard-raquedan.yml",{"template":1796},"BlogAuthor",{"name":7,"config":1798},{"headshot":1799,"ctfId":1800},"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",[1808,1816,1824],{"title":1809,"description":1810,"heroImage":1811,"category":1091,"date":1812,"authors":1813,"slug":1815,"externalUrl":1095},"How I built a demo generator with GitLab Duo Agent Platform","Demos haven't always looked like this. Looking back over my career, here's how they have evolved. Follow the tutorial to build your own demo and agent.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-08-13",[1814],"Itzik Gan Baruch","agentic-click-through-demo",{"title":1817,"description":1818,"heroImage":1819,"category":1091,"date":1820,"authors":1821,"slug":1823,"externalUrl":1095},"How to govern agentic AI, MCPs, and AI code assistants","AI agents can write, push, and deploy without human review at each step. Learn a practical framework for controlling access, permissions, and audit trails.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785337625/ifzlc2hyzaxhzmjgyymh.png","2026-07-31",[1822],"Julie Griffin","govern-agentic-ai-mcps-code-assistants",{"title":1825,"description":1826,"heroImage":1827,"category":1091,"date":1828,"authors":1829,"slug":1831,"externalUrl":1095},"Claude Opus 5 on GitLab: Reasoning built for the hard tasks","Anthropic’s Claude Opus 5 is now available on GitLab Duo Agent Platform, delivering deeper reasoning without sacrificing speed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-07-27",[1830],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"promotions":1833},[1834,1847,1859,1871],{"id":1835,"categories":1836,"header":1837,"text":1838,"button":1839,"image":1844},"ai-modernization",[1091],"Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1840,"config":1841},"Get your AI maturity score",{"href":1842,"dataGaName":1843,"dataGaLocation":1321},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1845},{"src":1846},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1848,"categories":1849,"header":1851,"text":1838,"button":1852,"image":1856},"devops-modernization",[1850,1657],"product","Are you just managing tools or shipping innovation?",{"text":1853,"config":1854},"Get your DevOps maturity score",{"href":1855,"dataGaName":1843,"dataGaLocation":1321},"/assessments/devops-modernization-assessment/",{"config":1857},{"src":1858},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1860,"categories":1861,"header":1863,"text":1838,"button":1864,"image":1868},"security-modernization",[1862],"security","Are you trading speed for security?",{"text":1865,"config":1866},"Get your security maturity score",{"href":1867,"dataGaName":1843,"dataGaLocation":1321},"/assessments/security-modernization-assessment/",{"config":1869},{"src":1870},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1872,"paths":1873,"header":1876,"text":1877,"button":1878,"image":1883},"github-azure-migration",[1874,1875],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":1879,"config":1880},"See how GitLab compares to GitHub",{"href":1881,"dataGaName":1882,"dataGaLocation":1321},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1884},{"src":1858},{"header":1886,"blurb":1887,"button":1888,"secondaryButton":1893},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1889,"config":1890},"Get your free trial",{"href":1891,"dataGaName":1121,"dataGaLocation":1892},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1594,"config":1894},{"href":1446,"dataGaName":1126,"dataGaLocation":1892},1786803774413]