[{"data":1,"prerenderedAt":1142},["ShallowReactive",2],{"/blog/gitlab-ci-on-google-kubernetes-engine":3,"navigation-en-us":360,"banner-en-us":785,"footer-en-us":795,"blog-post-authors-en-us-Elliot Rushton":1038,"blog-related-posts-en-us-gitlab-ci-on-google-kubernetes-engine":1052,"blog-promotions-en-us":1078,"next-steps-en-us":1132},{"id":4,"title":5,"authors":6,"body":8,"category":335,"date":336,"description":337,"extension":338,"externalUrl":339,"faq":339,"featured":340,"heroImage":341,"meta":342,"navigation":343,"path":344,"seo":345,"slug":349,"stem":350,"tags":351,"template":358,"updatedDate":339,"__hash__":359},"blogPosts/en-us/blog/gitlab-ci-on-google-kubernetes-engine.md","GitLab CI/CD on Google Kubernetes Engine in 15 minutes or less",[7],"Elliot Rushton",{"type":9,"value":10,"toc":319},"minimark",[11,31,39,44,47,82,86,93,98,101,107,110,116,120,123,129,133,136,142,146,154,157,160,166,174,180,184,187,193,196,202,206,209,215,218,224,227,233,237,240,262,271,275,305],[12,13,14,15,20,21,25,26,30],"p",{},"If you use ",[16,17,19],"a",{"href":18},"/pricing/#self-managed","GitLab Self-Managed",", then getting started with GitLab CI using ",[16,22,24],{"href":23},"/partners/technology-partners/google-cloud-platform/","GitLab's integration with Google Kubernetes Engine (GKE)"," can be accomplished in a few simple steps. We have several blog posts and documentation that provide detailed ",[16,27,29],{"href":28},"#other-resources","setup instructions for working with Kubernetes clusters",". In this post, we highlight the essential steps so that you can get going with GitLab CI/CD in less than 15 minutes.",[12,32,33,34,38],{},"By using the GitLab and GKE integration, with one click, you install GitLab Runners on GKE and immediately start running your CI pipelines. Runners are the lightweight agents that execute the CI jobs in your ",[16,35,37],{"href":36},"/topics/ci-cd/","GitLab CI/CD"," pipeline.",[40,41,43],"h2",{"id":42},"prerequisites","Prerequisites:",[12,45,46],{},"The following pre-requisities will need to have been configured in order for you to use the built in GitLab GKE integration:",[48,49,50,54,62],"ul",{},[51,52,53],"li",{},"GitLab instance installed and configured with user credentials",[51,55,56,61],{},[16,57,60],{"href":58,"rel":59},"https://docs.gitlab.com/integration/google/",[],"Google OAuth2 OmniAuth Provider"," installed and configured on your GitLab instance",[51,63,64,65,70,71],{},"A Google Cloud project with the following ",[16,66,69],{"href":67,"rel":68},"https://docs.gitlab.com/integration/google/#enabling-google-oauth",[],"APIs enabled",":\n",[48,72,73,76,79],{},[51,74,75],{},"Google Kubernetes Engine API",[51,77,78],{},"Cloud Resource Manager API",[51,80,81],{},"Cloud Billing API",[40,83,85],{"id":84},"get-started","Get started",[12,87,88],{},[89,90],"img",{"alt":91,"src":92},"Setup pipeline","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398062/blog/Content%20Images/ci-gke-in-15/gke_in_15_pipeline.png",[94,95,97],"h3",{"id":96},"step-1","Step 1",[12,99,100],{},"We’re going to add a shared runner at the instance level. First, as an administrator, click the “Admin Area” icon",[12,102,103],{},[89,104],{"alt":105,"src":106},"Runner setup step 1","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398051/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_001.png",[12,108,109],{},"Then on the left menu, select “Kubernetes”",[12,111,112],{},[89,113],{"alt":114,"src":115},"Runner setup step 2","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398051/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_002.png",[94,117,119],{"id":118},"step-2","Step 2",[12,121,122],{},"Click the green “Add Kubernetes cluster” button.",[12,124,125],{},[89,126],{"alt":127,"src":128},"Runner setup step 3","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398051/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_003.png",[94,130,132],{"id":131},"step-3","Step 3",[12,134,135],{},"The screen to “Add a Kubernetes cluster integration” should come up. Click on the “Google GKE” icon on the right.",[12,137,138],{},[89,139],{"alt":140,"src":141},"Runner setup step 4","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398051/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_004.png",[94,143,145],{"id":144},"step-4","Step 4",[12,147,148,149,153],{},"Give your cluster a name, and select a “Google Cloud Platform project” from your linked GCP account. If no projects are populated in the menu then either your Google OAUTH2 integration isn’t configured correctly or your project is missing the needed permissions. Check that these are set up and that the ",[16,150,152],{"href":151},"#prerequisites","APIs mentioned in the prerequisites above"," are enabled.",[12,155,156],{},"Choose a zone in which to run your cluster. For the purposes of running CI, the number of nodes in your cluster is going to be how many simultaneous jobs you can run at given time. As we are using the built-in GitLab Google Kubernetes integration, you can set a maximum of four nodes.\nHere we set that to three.",[12,158,159],{},"Click “Create Kubernetes Cluster”",[12,161,162],{},[89,163],{"alt":164,"src":165},"Runner setup step 5","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398052/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_005.png",[12,167,168,169,173],{},"It takes a few minutes for the cluster to be created. While it’s happening you should see a screen like this. You can leave this screen and come back (by going to “Admin Area> Kubernetes > ",[170,171,172],"span",{},"your cluster name","”)",[12,175,176],{},[89,177],{"alt":178,"src":179},"Runner setup step 6","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398052/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_006.png",[94,181,183],{"id":182},"step-5","Step 5",[12,185,186],{},"Once the cluster has been created, we need to install two applications. First, install “Helm Tiller” by clicking on the “Install” button next to it.",[12,188,189],{},[89,190],{"alt":191,"src":192},"Runner setup step 7","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398052/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_007.png",[12,194,195],{},"This takes a moment, but should be much quicker than creating the cluster initially was.",[12,197,198],{},[89,199],{"alt":200,"src":201},"Runner setup step 8","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398062/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_008.png",[94,203,205],{"id":204},"step-6","Step 6",[12,207,208],{},"Now that Helm Tiller is installed, more applications can be installed. For this tutorial we only need to install the “GitLab Runner” application. Click the install button next to GitLab Runner.",[12,210,211],{},[89,212],{"alt":213,"src":214},"Runner setup step 9","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398063/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_009.png",[12,216,217],{},"Again, this should go pretty quickly.",[12,219,220],{},[89,221],{"alt":222,"src":223},"Runner setup step 10","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398062/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_010.png",[12,225,226],{},"Once done, the button will change to an “Uninstall” button. You’re now set up with shared runners on your GitLab instance and can run your first CI pipeline!",[12,228,229],{},[89,230],{"alt":231,"src":232},"Runner setup step 11","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398062/blog/Content%20Images/ci-gke-in-15/ci_gke_in_15_011.png",[94,234,236],{"id":235},"next-steps","Next steps",[12,238,239],{},"Now that you are up and running with GitLab CI/CD on GKE, you can build and run your first GitLab CI/CD pipeline. Here are links to a few resources to get you started.",[48,241,242,249,255],{},[51,243,244],{},[16,245,248],{"href":246,"rel":247},"https://docs.gitlab.com/ci/quick_start/",[],"Getting Started with GitLab CI/CD",[51,250,251],{},[16,252,254],{"href":253},"/blog/building-a-cicd-pipeline-in-20-mins/","How to build a CI/CD pipeline in 20 minutes or less",[51,256,257],{},[16,258,261],{"href":259,"rel":260},"https://docs.gitlab.com/topics/autodevops/cloud_deployments/auto_devops_with_gke/",[],"Getting started with Auto DevOps",[12,263,264,265,270],{},"If you are planning to manage your own fleet of GitLab Runners, then you may also be thinking about how best to set up autoscaling of GitLab Runners. As we have just set up your first Runner on GKE, then you can review the ",[16,266,269],{"href":267,"rel":268},"https://docs.gitlab.com/runner/executors/kubernetes/",[],"GitLab Runner Kubernetes Executor docs"," for additional details as to how the GitLab Runner uses Kubernetes to run builds on a Kubernetes cluster.",[94,272,274],{"id":273},"other-resources","Other resources",[48,276,277,284,291,298],{},[51,278,279],{},[16,280,283],{"href":281,"rel":282},"https://about.gitlab.com/events/",[],"Scalable app depoyment webcast",[51,285,286],{},[16,287,290],{"href":288,"rel":289},"https://docs.gitlab.com/charts/",[],"Install GitLab on a cloud native environment",[51,292,293],{},[16,294,297],{"href":295,"rel":296},"https://docs.gitlab.com/user/project/clusters/add_remove_clusters/",[],"Adding and removing Kubernetes clusters",[51,299,300],{},[16,301,304],{"href":302,"rel":303},"https://cloud.google.com/solutions/deploying-production-ready-gitlab-on-gke",[],"Deploy production-ready GitLab on Google Kubernetes Engine",[12,306,307,308,313,314],{},"Cover image by ",[16,309,312],{"href":310,"rel":311},"https://unsplash.com/photos/rBPOfVqROzY",[],"Agê Barros"," on ",[16,315,318],{"href":316,"rel":317},"https://www.unsplash.com",[],"Unsplash",{"title":320,"searchDepth":321,"depth":321,"links":322},"",2,[323,324],{"id":42,"depth":321,"text":43},{"id":84,"depth":321,"text":85,"children":325},[326,328,329,330,331,332,333,334],{"id":96,"depth":327,"text":97},3,{"id":118,"depth":327,"text":119},{"id":131,"depth":327,"text":132},{"id":144,"depth":327,"text":145},{"id":182,"depth":327,"text":183},{"id":204,"depth":327,"text":205},{"id":235,"depth":327,"text":236},{"id":273,"depth":327,"text":274},"engineering","2020-03-27","Install GitLab's Runner on GKE in a few simple steps and get started with GitLab CI/CD pipelines.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667003/Blog/Hero%20Images/gke_in_15_cover_2.jpg",{},true,"/en-us/blog/gitlab-ci-on-google-kubernetes-engine",{"title":5,"description":337,"ogTitle":5,"ogDescription":337,"noIndex":340,"ogImage":341,"ogUrl":346,"ogSiteName":347,"ogType":348,"canonicalUrls":346},"https://about.gitlab.com/blog/gitlab-ci-on-google-kubernetes-engine","https://about.gitlab.com","article","gitlab-ci-on-google-kubernetes-engine","en-us/blog/gitlab-ci-on-google-kubernetes-engine",[352,353,354,355,356,357],"integrations","kubernetes","cloud native","CI/CD","GKE","google","BlogPost","PhtZuYr-GZWUp1IyOS3hmEHFB_pEuJM-vWoIIUFCX50",{"logo":361,"freeTrial":366,"sales":371,"login":376,"items":381,"search":706,"minimal":736,"duo":755,"switchNav":764,"pricingDeployment":775},{"config":362},{"href":363,"dataGaName":364,"dataGaLocation":365},"/","gitlab logo","header",{"text":367,"config":368},"Get free trial",{"href":369,"dataGaName":370,"dataGaLocation":365},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":372,"config":373},"Request a demo",{"href":374,"dataGaName":375,"dataGaLocation":365},"/sales/?contact-topic=request-demo","sales",{"text":377,"config":378},"Sign in",{"href":379,"dataGaName":380,"dataGaLocation":365},"https://gitlab.com/users/sign_in/","sign in",[382,411,510,515,628,684],{"text":383,"config":384,"menu":386},"Platform",{"dataNavLevelOne":385},"platform",{"type":387,"columns":388},"cards",[389,395,403],{"title":383,"description":390,"link":391},"The intelligent orchestration platform for DevSecOps",{"text":392,"config":393},"Explore our Platform",{"href":394,"dataGaName":385,"dataGaLocation":365},"/platform/",{"title":396,"description":397,"link":398},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":399,"config":400},"Meet GitLab Duo",{"href":401,"dataGaName":402,"dataGaLocation":365},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":404,"description":405,"link":406},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":407,"config":408},"Learn more",{"href":409,"dataGaName":410,"dataGaLocation":365},"/why-gitlab/","why gitlab",{"text":412,"left":343,"config":413,"menu":415},"Product",{"dataNavLevelOne":414},"solutions",{"type":416,"link":417,"columns":421,"feature":489},"lists",{"text":418,"config":419},"View all Solutions",{"href":420,"dataGaName":414,"dataGaLocation":365},"/solutions/",[422,445,468],{"title":423,"description":424,"link":425,"items":430},"Automation","CI/CD and automation to accelerate deployment",{"config":426},{"icon":427,"href":428,"dataGaName":429,"dataGaLocation":365},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[431,434,437,441],{"text":355,"config":432},{"href":433,"dataGaLocation":365,"dataGaName":355},"/solutions/continuous-integration/",{"text":396,"config":435},{"href":401,"dataGaLocation":365,"dataGaName":436},"gitlab duo agent platform - product menu",{"text":438,"config":439},"Source Code Management",{"href":440,"dataGaLocation":365,"dataGaName":438},"/solutions/source-code-management/",{"text":442,"config":443},"Automated Software Delivery",{"href":428,"dataGaLocation":365,"dataGaName":444},"Automated software delivery",{"title":446,"description":447,"link":448,"items":453},"Security","Deliver code faster without compromising security",{"config":449},{"href":450,"dataGaName":451,"dataGaLocation":365,"icon":452},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[454,458,463],{"text":455,"config":456},"Application Security Testing",{"href":450,"dataGaName":457,"dataGaLocation":365},"Application security testing",{"text":459,"config":460},"Software Supply Chain Security",{"href":461,"dataGaLocation":365,"dataGaName":462},"/solutions/supply-chain/","Software supply chain security",{"text":464,"config":465},"Software Compliance",{"href":466,"dataGaName":467,"dataGaLocation":365},"/solutions/software-compliance/","software compliance",{"title":469,"link":470,"items":475},"Measurement",{"config":471},{"icon":472,"href":473,"dataGaName":474,"dataGaLocation":365},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[476,480,484],{"text":477,"config":478},"Visibility & Measurement",{"href":473,"dataGaLocation":365,"dataGaName":479},"Visibility and Measurement",{"text":481,"config":482},"Value Stream Management",{"href":483,"dataGaLocation":365,"dataGaName":481},"/solutions/value-stream-management/",{"text":485,"config":486},"Analytics & Insights",{"href":487,"dataGaLocation":365,"dataGaName":488},"/solutions/analytics-and-insights/","Analytics and insights",{"title":490,"type":416,"items":491},"GitLab for",[492,498,504],{"text":493,"config":494},"Enterprise",{"icon":495,"href":496,"dataGaLocation":365,"dataGaName":497},"Building","/enterprise/","enterprise",{"text":499,"config":500},"Small Business",{"icon":501,"href":502,"dataGaLocation":365,"dataGaName":503},"Work","/small-business/","small business",{"text":505,"config":506},"Public Sector",{"icon":507,"href":508,"dataGaLocation":365,"dataGaName":509},"Organization","/solutions/public-sector/","public sector",{"text":511,"config":512},"Pricing",{"href":513,"dataGaName":514,"dataGaLocation":365,"dataNavLevelOne":514},"/pricing/","pricing",{"text":516,"config":517,"menu":519},"Resources",{"dataNavLevelOne":518},"resources",{"type":416,"link":520,"columns":524,"feature":617},{"text":521,"config":522},"View all resources",{"href":523,"dataGaName":518,"dataGaLocation":365},"/resources/",[525,557,584],{"title":526,"items":527},"Getting started",[528,533,538,543,548,553],{"text":529,"config":530},"Install",{"href":531,"dataGaName":532,"dataGaLocation":365},"/install/","install",{"text":534,"config":535},"Quick start guides",{"href":536,"dataGaName":537,"dataGaLocation":365},"/get-started/","quick setup checklists",{"text":539,"config":540},"Learn",{"href":541,"dataGaLocation":365,"dataGaName":542},"https://university.gitlab.com/","learn",{"text":544,"config":545},"Product documentation",{"href":546,"dataGaName":547,"dataGaLocation":365},"https://docs.gitlab.com/","product documentation",{"text":549,"config":550},"Best practice videos",{"href":551,"dataGaName":552,"dataGaLocation":365},"/getting-started-videos/","best practice videos",{"text":554,"config":555},"Integrations",{"href":556,"dataGaName":352,"dataGaLocation":365},"/integrations/",{"title":558,"items":559},"Discover",[560,565,570,575,579],{"text":561,"config":562},"Customer success stories",{"href":563,"dataGaName":564,"dataGaLocation":365},"/customers/","customer success stories",{"text":566,"config":567},"Blog",{"href":568,"dataGaName":569,"dataGaLocation":365},"/blog/","blog",{"text":571,"config":572},"Demo Hub",{"href":573,"dataGaName":574,"dataGaLocation":365},"/demo-hub/","demo hub",{"text":576,"config":577},"The Source",{"href":578,"dataGaName":569,"dataGaLocation":365},"/the-source/",{"text":580,"config":581},"Remote",{"href":582,"dataGaName":583,"dataGaLocation":365},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":585,"items":586},"Connect",[587,592,597,602,607,612],{"text":588,"config":589},"GitLab Services",{"href":590,"dataGaName":591,"dataGaLocation":365},"/services/","services",{"text":593,"config":594},"Contribute",{"href":595,"dataGaName":596,"dataGaLocation":365},"https://contributors.gitlab.com","contribute",{"text":598,"config":599},"Community",{"href":600,"dataGaName":601,"dataGaLocation":365},"/community/","community",{"text":603,"config":604},"Forum",{"href":605,"dataGaName":606,"dataGaLocation":365},"https://forum.gitlab.com/","forum",{"text":608,"config":609},"Events",{"href":610,"dataGaName":611,"dataGaLocation":365},"/events/","events",{"text":613,"config":614},"Partners",{"href":615,"dataGaName":616,"dataGaLocation":365},"/partners/","partners",{"config":618,"title":621,"text":622,"link":623},{"background":619,"textColor":620},"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":624,"config":625},"Read the latest",{"href":626,"dataGaName":627,"dataGaLocation":365},"/whats-new/","whats new",{"text":629,"config":630,"menu":632},"Company",{"dataNavLevelOne":631},"company",{"type":416,"columns":633},[634],{"items":635},[636,641,647,649,654,659,664,669,674,679],{"text":637,"config":638},"About",{"href":639,"dataGaName":640,"dataGaLocation":365},"/company/","about",{"text":642,"config":643,"footerGa":646},"Jobs",{"href":644,"dataGaName":645,"dataGaLocation":365},"/jobs/","jobs",{"dataGaName":645},{"text":608,"config":648},{"href":610,"dataGaName":611,"dataGaLocation":365},{"text":650,"config":651},"Leadership",{"href":652,"dataGaName":653,"dataGaLocation":365},"/company/team/e-group/","leadership",{"text":655,"config":656},"Handbook",{"href":657,"dataGaName":658,"dataGaLocation":365},"https://handbook.gitlab.com/","handbook",{"text":660,"config":661},"Investor relations",{"href":662,"dataGaName":663,"dataGaLocation":365},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":665,"config":666},"Trust Center",{"href":667,"dataGaName":668,"dataGaLocation":365},"/security/","trust center",{"text":670,"config":671},"AI Transparency Center",{"href":672,"dataGaName":673,"dataGaLocation":365},"/ai-transparency-center/","ai transparency center",{"text":675,"config":676},"Newsletter",{"href":677,"dataGaName":678,"dataGaLocation":365},"/company/contact/#contact-forms","newsletter",{"text":680,"config":681},"Press",{"href":682,"dataGaName":683,"dataGaLocation":365},"/press/","press",{"text":685,"config":686,"menu":687},"Contact us",{"dataNavLevelOne":631},{"type":416,"columns":688},[689],{"items":690},[691,696,701],{"text":692,"config":693},"Talk to sales",{"href":694,"dataGaName":695,"dataGaLocation":365},"/sales/","talk to sales",{"text":697,"config":698},"Support portal",{"href":699,"dataGaName":700,"dataGaLocation":365},"https://support.gitlab.com/hc/en-us","support portal",{"text":702,"config":703},"Customer portal",{"href":704,"dataGaName":705,"dataGaLocation":365},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":707,"login":708,"suggestions":715},"Close",{"text":709,"link":710},"To search repositories and projects, login to",{"text":711,"config":712},"gitlab.com",{"href":379,"dataGaName":713,"dataGaLocation":714},"search login","search",{"text":716,"default":717},"Suggestions",[718,720,724,726,730,733],{"text":396,"config":719},{"href":401,"dataGaName":396,"dataGaLocation":714},{"text":721,"config":722},"Code Suggestions (AI)",{"href":723,"dataGaName":721,"dataGaLocation":714},"/solutions/code-suggestions/",{"text":355,"config":725},{"href":433,"dataGaName":355,"dataGaLocation":714},{"text":727,"config":728},"GitLab on AWS",{"href":729,"dataGaName":727,"dataGaLocation":714},"/partners/technology-partners/aws/",{"text":731,"config":732},"GitLab on Google Cloud",{"href":23,"dataGaName":731,"dataGaLocation":714},{"text":734,"config":735},"Why GitLab?",{"href":409,"dataGaName":734,"dataGaLocation":714},{"freeTrial":737,"mobileIcon":742,"desktopIcon":747,"secondaryButton":750},{"text":738,"config":739},"Start free trial",{"href":740,"dataGaName":370,"dataGaLocation":741},"https://gitlab.com/-/trials/new/","nav",{"altText":743,"config":744},"Gitlab Icon",{"src":745,"dataGaName":746,"dataGaLocation":741},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":743,"config":748},{"src":749,"dataGaName":746,"dataGaLocation":741},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":751,"config":752},"Get Started",{"href":753,"dataGaName":754,"dataGaLocation":741},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":756,"mobileIcon":760,"desktopIcon":762},{"text":757,"config":758},"Learn more about GitLab Duo",{"href":401,"dataGaName":759,"dataGaLocation":741},"gitlab duo",{"altText":743,"config":761},{"src":745,"dataGaName":746,"dataGaLocation":741},{"altText":743,"config":763},{"src":749,"dataGaName":746,"dataGaLocation":741},{"button":765,"mobileIcon":770,"desktopIcon":772},{"text":766,"config":767},"/switch",{"href":768,"dataGaName":769,"dataGaLocation":741},"#contact","switch",{"altText":743,"config":771},{"src":745,"dataGaName":746,"dataGaLocation":741},{"altText":743,"config":773},{"src":774,"dataGaName":746,"dataGaLocation":741},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":776,"mobileIcon":781,"desktopIcon":783},{"text":777,"config":778},"Back to pricing",{"href":513,"dataGaName":779,"dataGaLocation":741,"icon":780},"back to pricing","GoBack",{"altText":743,"config":782},{"src":745,"dataGaName":746,"dataGaLocation":741},{"altText":743,"config":784},{"src":749,"dataGaName":746,"dataGaLocation":741},{"title":786,"titleMobile":787,"button":788,"config":793},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":407,"config":789},{"href":790,"dataGaName":791,"dataGaLocation":792},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":794,"disabled":340},"release",{"data":796},{"text":797,"source":798,"edit":804,"contribute":809,"config":814,"items":819,"minimal":1027},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":799,"config":800},"View page source",{"href":801,"dataGaName":802,"dataGaLocation":803},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":805,"config":806},"Edit this page",{"href":807,"dataGaName":808,"dataGaLocation":803},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":810,"config":811},"Please contribute",{"href":812,"dataGaName":813,"dataGaLocation":803},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":815,"facebook":816,"youtube":817,"linkedin":818},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[820,867,919,963,995],{"title":511,"links":821,"subMenu":836},[822,826,831],{"text":823,"config":824},"View plans",{"href":513,"dataGaName":825,"dataGaLocation":803},"view plans",{"text":827,"config":828},"Why Premium?",{"href":829,"dataGaName":830,"dataGaLocation":803},"/pricing/premium/","why premium",{"text":832,"config":833},"Why Ultimate?",{"href":834,"dataGaName":835,"dataGaLocation":803},"/pricing/ultimate/","why ultimate",[837],{"title":838,"links":839},"Contact Us",[840,843,845,847,852,857,862],{"text":841,"config":842},"Contact sales",{"href":694,"dataGaName":375,"dataGaLocation":803},{"text":697,"config":844},{"href":699,"dataGaName":700,"dataGaLocation":803},{"text":702,"config":846},{"href":704,"dataGaName":705,"dataGaLocation":803},{"text":848,"config":849},"Status",{"href":850,"dataGaName":851,"dataGaLocation":803},"https://status.gitlab.com/","status",{"text":853,"config":854},"Terms of use",{"href":855,"dataGaName":856,"dataGaLocation":803},"/terms/","terms of use",{"text":858,"config":859},"Privacy statement",{"href":860,"dataGaName":861,"dataGaLocation":803},"/privacy/","privacy statement",{"text":863,"config":864},"Cookie preferences",{"dataGaName":865,"dataGaLocation":803,"id":866,"isOneTrustButton":343},"cookie preferences","ot-sdk-btn",{"title":412,"links":868,"subMenu":877},[869,873],{"text":870,"config":871},"DevSecOps platform",{"href":394,"dataGaName":872,"dataGaLocation":803},"devsecops platform",{"text":874,"config":875},"AI-Assisted Development",{"href":401,"dataGaName":876,"dataGaLocation":803},"ai-assisted development",[878],{"title":879,"links":880},"Topics",[881,885,890,895,900,905,909,914],{"text":882,"config":883},"CICD",{"href":36,"dataGaName":884,"dataGaLocation":803},"cicd",{"text":886,"config":887},"GitOps",{"href":888,"dataGaName":889,"dataGaLocation":803},"/topics/gitops/","gitops",{"text":891,"config":892},"DevOps",{"href":893,"dataGaName":894,"dataGaLocation":803},"/topics/devops/","devops",{"text":896,"config":897},"Version Control",{"href":898,"dataGaName":899,"dataGaLocation":803},"/topics/version-control/","version control",{"text":901,"config":902},"DevSecOps",{"href":903,"dataGaName":904,"dataGaLocation":803},"/topics/devsecops/","devsecops",{"text":906,"config":907},"Cloud Native",{"href":908,"dataGaName":354,"dataGaLocation":803},"/topics/cloud-native/",{"text":910,"config":911},"AI for Coding",{"href":912,"dataGaName":913,"dataGaLocation":803},"/topics/devops/ai-for-coding/","ai for coding",{"text":915,"config":916},"Agentic AI",{"href":917,"dataGaName":918,"dataGaLocation":803},"/topics/agentic-ai/","agentic ai",{"title":920,"links":921},"Solutions",[922,924,926,931,935,938,942,945,947,950,953,958],{"text":455,"config":923},{"href":450,"dataGaName":455,"dataGaLocation":803},{"text":444,"config":925},{"href":428,"dataGaName":429,"dataGaLocation":803},{"text":927,"config":928},"Agile development",{"href":929,"dataGaName":930,"dataGaLocation":803},"/solutions/agile-delivery/","agile delivery",{"text":932,"config":933},"SCM",{"href":440,"dataGaName":934,"dataGaLocation":803},"source code management",{"text":882,"config":936},{"href":433,"dataGaName":937,"dataGaLocation":803},"continuous integration & delivery",{"text":939,"config":940},"Value stream management",{"href":483,"dataGaName":941,"dataGaLocation":803},"value stream management",{"text":886,"config":943},{"href":944,"dataGaName":889,"dataGaLocation":803},"/solutions/gitops/",{"text":493,"config":946},{"href":496,"dataGaName":497,"dataGaLocation":803},{"text":948,"config":949},"Small business",{"href":502,"dataGaName":503,"dataGaLocation":803},{"text":951,"config":952},"Public sector",{"href":508,"dataGaName":509,"dataGaLocation":803},{"text":954,"config":955},"Education",{"href":956,"dataGaName":957,"dataGaLocation":803},"/solutions/education/","education",{"text":959,"config":960},"Financial services",{"href":961,"dataGaName":962,"dataGaLocation":803},"/solutions/finance/","financial services",{"title":516,"links":964},[965,967,969,971,974,976,979,981,983,985,987,989,991,993],{"text":529,"config":966},{"href":531,"dataGaName":532,"dataGaLocation":803},{"text":534,"config":968},{"href":536,"dataGaName":537,"dataGaLocation":803},{"text":539,"config":970},{"href":541,"dataGaName":542,"dataGaLocation":803},{"text":544,"config":972},{"href":546,"dataGaName":973,"dataGaLocation":803},"docs",{"text":566,"config":975},{"href":568,"dataGaName":569,"dataGaLocation":803},{"text":977,"config":978},"What's new",{"href":626,"dataGaName":627,"dataGaLocation":803},{"text":561,"config":980},{"href":563,"dataGaName":564,"dataGaLocation":803},{"text":580,"config":982},{"href":582,"dataGaName":583,"dataGaLocation":803},{"text":588,"config":984},{"href":590,"dataGaName":591,"dataGaLocation":803},{"text":593,"config":986},{"href":595,"dataGaName":596,"dataGaLocation":803},{"text":598,"config":988},{"href":600,"dataGaName":601,"dataGaLocation":803},{"text":603,"config":990},{"href":605,"dataGaName":606,"dataGaLocation":803},{"text":608,"config":992},{"href":610,"dataGaName":611,"dataGaLocation":803},{"text":613,"config":994},{"href":615,"dataGaName":616,"dataGaLocation":803},{"title":629,"links":996},[997,999,1001,1003,1005,1007,1011,1016,1018,1020,1022],{"text":637,"config":998},{"href":639,"dataGaName":631,"dataGaLocation":803},{"text":642,"config":1000},{"href":644,"dataGaName":645,"dataGaLocation":803},{"text":650,"config":1002},{"href":652,"dataGaName":653,"dataGaLocation":803},{"text":655,"config":1004},{"href":657,"dataGaName":658,"dataGaLocation":803},{"text":660,"config":1006},{"href":662,"dataGaName":663,"dataGaLocation":803},{"text":1008,"config":1009},"Sustainability",{"href":1010,"dataGaName":1008,"dataGaLocation":803},"/sustainability/",{"text":1012,"config":1013},"Diversity, inclusion and belonging (DIB)",{"href":1014,"dataGaName":1015,"dataGaLocation":803},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":665,"config":1017},{"href":667,"dataGaName":668,"dataGaLocation":803},{"text":675,"config":1019},{"href":677,"dataGaName":678,"dataGaLocation":803},{"text":680,"config":1021},{"href":682,"dataGaName":683,"dataGaLocation":803},{"text":1023,"config":1024},"Modern Slavery Transparency Statement",{"href":1025,"dataGaName":1026,"dataGaLocation":803},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1028},[1029,1032,1035],{"text":1030,"config":1031},"Terms",{"href":855,"dataGaName":856,"dataGaLocation":803},{"text":1033,"config":1034},"Cookies",{"dataGaName":865,"dataGaLocation":803,"id":866,"isOneTrustButton":343},{"text":1036,"config":1037},"Privacy",{"href":860,"dataGaName":861,"dataGaLocation":803},[1039],{"id":1040,"title":7,"body":339,"config":1041,"content":1043,"description":339,"extension":1046,"meta":1047,"navigation":343,"path":1048,"seo":1049,"stem":1050,"__hash__":1051},"blogAuthors/en-us/blog/authors/elliot-rushton.yml",{"template":1042},"BlogAuthor",{"name":7,"config":1044},{"headshot":320,"ctfId":1045},"erushton","yml",{},"/en-us/blog/authors/elliot-rushton",{},"en-us/blog/authors/elliot-rushton","O7-wa1rcYIL9-99-cqwVLGVd36T5uwkYvnesoGNo9fM",[1053,1062,1070],{"title":1054,"description":1055,"heroImage":1056,"category":335,"date":1057,"authors":1058,"slug":1061,"externalUrl":339},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[1059,1060],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1063,"description":1064,"heroImage":1065,"category":335,"date":1066,"authors":1067,"slug":1069,"externalUrl":339},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[1068],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1071,"description":1072,"heroImage":1073,"category":335,"date":1074,"authors":1075,"slug":1077,"externalUrl":339},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[1076],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1079},[1080,1094,1106,1118],{"id":1081,"categories":1082,"header":1084,"text":1085,"button":1086,"image":1091},"ai-modernization",[1083],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1087,"config":1088},"Get your AI maturity score",{"href":1089,"dataGaName":1090,"dataGaLocation":569},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1092},{"src":1093},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1095,"categories":1096,"header":1098,"text":1085,"button":1099,"image":1103},"devops-modernization",[1097,904],"product","Are you just managing tools or shipping innovation?",{"text":1100,"config":1101},"Get your DevOps maturity score",{"href":1102,"dataGaName":1090,"dataGaLocation":569},"/assessments/devops-modernization-assessment/",{"config":1104},{"src":1105},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1107,"categories":1108,"header":1110,"text":1085,"button":1111,"image":1115},"security-modernization",[1109],"security","Are you trading speed for security?",{"text":1112,"config":1113},"Get your security maturity score",{"href":1114,"dataGaName":1090,"dataGaLocation":569},"/assessments/security-modernization-assessment/",{"config":1116},{"src":1117},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1119,"paths":1120,"header":1123,"text":1124,"button":1125,"image":1130},"github-azure-migration",[1121,1122],"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":1126,"config":1127},"See how GitLab compares to GitHub",{"href":1128,"dataGaName":1129,"dataGaLocation":569},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1131},{"src":1105},{"header":1133,"blurb":1134,"button":1135,"secondaryButton":1140},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1136,"config":1137},"Get your free trial",{"href":1138,"dataGaName":370,"dataGaLocation":1139},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":841,"config":1141},{"href":694,"dataGaName":375,"dataGaLocation":1139},1786734902139]