[{"data":1,"prerenderedAt":1190},["ShallowReactive",2],{"/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci":3,"navigation-en-us":393,"banner-en-us":819,"footer-en-us":829,"blog-post-authors-en-us-Sarah Matthies|Noah Ing":1073,"blog-related-posts-en-us-provision-group-runners-with-google-cloud-platform-and-gitlab-ci":1100,"blog-promotions-en-us":1126,"next-steps-en-us":1180},{"id":4,"title":5,"authors":6,"body":9,"category":369,"date":370,"description":371,"extension":372,"externalUrl":373,"faq":373,"featured":374,"heroImage":375,"meta":376,"navigation":269,"path":377,"seo":378,"slug":382,"stem":383,"tags":384,"template":391,"updatedDate":373,"__hash__":392},"blogPosts/en-us/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci.md","Provision group runners with Google Cloud Platform and GitLab CI",[7,8],"Sarah Matthies","Noah Ing",{"type":10,"value":11,"toc":365},"minimark",[12,16,19,22,46,51,79,83,94,100,107,113,119,128,134,140,146,152,158,164,167,176,182,188,195,200,206,209,215,222,228,234,327,330,335,338,349,361],[13,14,15],"p",{},"Are you interested in hosting your own servers to run your GitLab CI/CD pipelines but don’t know where to begin? Setting up a GitLab Runner to run your pipelines on your own infrastructure can seem like a daunting task as it requires infrastructure knowledge and the know-how to maintain that infrastructure. Typically this process requires the provision of infrastructure, the installing of dependency, and testing that it works with your GitLab instance.",[13,17,18],{},"This article highlights how easy it is to easily spin up a GitLab Runner of your own utilizing GitLab’s Google Cloud Integration. Follow this tutorial and it will teach you how to set up a new group runner on GitLab.com using Google Cloud Platform in less than 10 minutes!",[13,20,21],{},"You will learn how to:",[23,24,25,29,32,35,43],"ul",{},[26,27,28],"li",{},"Create a new group runner.",[26,30,31],{},"Configure the new group runner’s tags and description.",[26,33,34],{},"Register the new group runner by adding in configurations.",[26,36,37,38,42],{},"Provision the GitLab Runner utilizing ",[39,40,41],"code",{},"gcloud cli"," and Terraform.",[26,44,45],{},"Have your GitLab Runner pick up its first GitLab CI job.",[47,48,50],"h2",{"id":49},"prerequisites","Prerequisites",[23,52,53,56,59,69,76],{},[26,54,55],{},"A terminal with Bash installed",[26,57,58],{},"Owner access on a Google Cloud Platform project",[26,60,61,62,68],{},"Terraform (or OpenTofu) ",[63,64,67],"a",{"href":65,"rel":66},"https://releases.hashicorp.com/terraform/1.5.7/",[],"Version 1.5"," or greater",[26,70,71],{},[63,72,75],{"href":73,"rel":74},"https://cloud.google.com/sdk/docs/install",[],"gcloud CLI",[26,77,78],{},"10 minutes",[47,80,82],{"id":81},"tutorial","Tutorial",[84,85,86],"ol",{},[26,87,88,89,93],{},"Create a new group runner under ",[90,91,92],"strong",{},"Build > Runners > New Group Runner",".",[13,95,96,99],{},[90,97,98],{},"Note:"," Navigate to the group level.",[13,101,102],{},[103,104],"img",{"alt":105,"src":106},"GitLab Runner setup screen","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image7_aHR0cHM6_1750098317126.png",[84,108,110],{"start":109},2,[26,111,112],{},"Configure the new group runner's tags, description, and any additional configurations.",[13,114,115],{},[103,116],{"alt":117,"src":118},"New Group Runner setup","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750098317127.png",[84,120,122],{"start":121},3,[26,123,124,125,93],{},"Select ",[90,126,127],{},"Google Cloud",[13,129,130],{},[103,131],{"alt":132,"src":133},"Select Google Cloud screen","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750098317129.png",[84,135,137],{"start":136},4,[26,138,139],{},"Copy your project ID from Google Cloud Platform.",[13,141,142],{},[103,143],{"alt":144,"src":145},"Copy project ID from GCP screen","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750098317131.png",[84,147,149],{"start":148},5,[26,150,151],{},"Fill out your Google Cloud project ID and choose a region, zone, and type of machine you want to use.",[13,153,154],{},[103,155],{"alt":156,"src":157},"Screen to fill out Google Cloud information","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image8_aHR0cHM6_1750098317132.png",[13,159,160,161,93],{},"6. Once this information is filled out, click ",[90,162,163],{},"Setup instructions",[13,165,166],{},"Run the bash script provided in Step 1 above.",[13,168,169,171,172,175],{},[90,170,98],{}," This script was saved to a file called ",[39,173,174],{},"setup.sh"," for ease of use. You may copy this right into your terminal if you are confident in debugging.",[13,177,178],{},[103,179],{"alt":180,"src":181},"Setup instructions screen","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image6_aHR0cHM6_1750098317134.png",[13,183,184],{},[103,185],{"alt":186,"src":187},"Script for GitLab Runner","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image10_aHR0cHM6_1750098317135.png",[13,189,190,191,194],{},"7. Create a ",[39,192,193],{},"main.tf"," file and follow the instructions in GitLab.",[13,196,197,199],{},[90,198,98],{}," If you want to use OpenTofu instead of Terraform, you can still copy the code and only have to adjust the Terraform commands for applying the configuration.",[13,201,202],{},[103,203],{"alt":204,"src":205},"Install and register GitLab Runner screen","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image9_aHR0cHM6_1750098317136.png",[13,207,208],{},"Once successfully provisioned, you should be see the following:",[13,210,211],{},[103,212],{"alt":213,"src":214},"GitLab Runner code","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image5_aHR0cHM6_1750098317137.png",[13,216,217,218,221],{},"8. If you close the instructions and click the ",[90,219,220],{},"View runners"," button, you will now have a newly provisioned runner present with \"Never contacted\" as its status.",[13,223,224],{},[103,225],{"alt":226,"src":227},"Newly provisioned runner on screen","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098317/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750098317139.png",[13,229,230,231,93],{},"9. In any project, add the following ",[39,232,233],{},".gitlab-ci.yml",[235,236,241],"pre",{"className":237,"code":238,"language":239,"meta":240,"style":240},"language-yaml shiki shiki-themes github-light","stages:  \n  - greet\n\nhello_job:  \n  stage: greet  \n  tags:  \n    - gcp-runner  \n  script:  \n    - echo \"hello\"  \n\n","yaml","",[39,242,243,256,265,271,278,292,300,311,319],{"__ignoreMap":240},[244,245,248,252],"span",{"class":246,"line":247},"line",1,[244,249,251],{"class":250},"shJU0","stages",[244,253,255],{"class":254},"sgsFI",":  \n",[244,257,258,261],{"class":246,"line":109},[244,259,260],{"class":254},"  - ",[244,262,264],{"class":263},"sYBdl","greet\n",[244,266,267],{"class":246,"line":121},[244,268,270],{"emptyLinePlaceholder":269},true,"\n",[244,272,273,276],{"class":246,"line":136},[244,274,275],{"class":250},"hello_job",[244,277,255],{"class":254},[244,279,280,283,286,289],{"class":246,"line":148},[244,281,282],{"class":250},"  stage",[244,284,285],{"class":254},": ",[244,287,288],{"class":263},"greet",[244,290,291],{"class":254},"  \n",[244,293,295,298],{"class":246,"line":294},6,[244,296,297],{"class":250},"  tags",[244,299,255],{"class":254},[244,301,303,306,309],{"class":246,"line":302},7,[244,304,305],{"class":254},"    - ",[244,307,308],{"class":263},"gcp-runner",[244,310,291],{"class":254},[244,312,314,317],{"class":246,"line":313},8,[244,315,316],{"class":250},"  script",[244,318,255],{"class":254},[244,320,322,324],{"class":246,"line":321},9,[244,323,305],{"class":254},[244,325,326],{"class":263},"echo \"hello\"\n",[13,328,329],{},"Volia! You have set up your first GitLab Runner utilizing Google Cloud Platform.",[331,332,334],"h1",{"id":333},"next-steps","Next steps",[13,336,337],{},"Now that you have provisioned your very own GitLab Runner, consider optimizing it for your specific use case. Some things to consider with your runner moving forward:",[23,339,340,343,346],{},[26,341,342],{},"Is the runner I provisioned the right size? Does it need additional resources for my use case?",[26,344,345],{},"Does the GitLab Runner contain all the dependency my builds need?",[26,347,348],{},"How can I store the GitLab Runner as infrastructure as code?",[350,351,352],"blockquote",{},[13,353,354,355,360],{},"Make sure to bookmark the ",[63,356,359],{"href":357,"rel":358},"https://docs.gitlab.com/ci/runners/provision_runners_google_cloud/",[],"Provisioning runners in Google Cloud documentation"," for easy reference.",[362,363,364],"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 .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);}",{"title":240,"searchDepth":109,"depth":109,"links":366},[367,368],{"id":49,"depth":109,"text":50},{"id":81,"depth":109,"text":82},"engineering","2024-11-19","This tutorial will teach you how to set up a new group runner on GitLab.com using Google Cloud Platform in less than 10 minutes.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098300/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_623844718_4E5Fx1Q0DHikigzCsQWhOG_1750098300048.jpg",{},"/en-us/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci",{"title":5,"description":371,"ogTitle":5,"ogDescription":371,"noIndex":374,"ogImage":375,"ogUrl":379,"ogSiteName":380,"ogType":381,"canonicalUrls":379},"https://about.gitlab.com/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci","https://about.gitlab.com","article","provision-group-runners-with-google-cloud-platform-and-gitlab-ci","en-us/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci",[81,385,386,387,388,389,390],"DevSecOps platform","CI","CI/CD","solutions architecture","google","integrations","BlogPost","FTHTEyyX2ystsHNpE2pwEMBsZyHjbVQSbE-TPNoSn7g",{"logo":394,"freeTrial":399,"sales":404,"login":409,"items":414,"search":739,"minimal":770,"duo":789,"switchNav":798,"pricingDeployment":809},{"config":395},{"href":396,"dataGaName":397,"dataGaLocation":398},"/","gitlab logo","header",{"text":400,"config":401},"Get free trial",{"href":402,"dataGaName":403,"dataGaLocation":398},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":405,"config":406},"Request a demo",{"href":407,"dataGaName":408,"dataGaLocation":398},"/sales/?contact-topic=request-demo","sales",{"text":410,"config":411},"Sign in",{"href":412,"dataGaName":413,"dataGaLocation":398},"https://gitlab.com/users/sign_in/","sign in",[415,444,543,548,661,717],{"text":416,"config":417,"menu":419},"Platform",{"dataNavLevelOne":418},"platform",{"type":420,"columns":421},"cards",[422,428,436],{"title":416,"description":423,"link":424},"The intelligent orchestration platform for DevSecOps",{"text":425,"config":426},"Explore our Platform",{"href":427,"dataGaName":418,"dataGaLocation":398},"/platform/",{"title":429,"description":430,"link":431},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":432,"config":433},"Meet GitLab Duo",{"href":434,"dataGaName":435,"dataGaLocation":398},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":437,"description":438,"link":439},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":440,"config":441},"Learn more",{"href":442,"dataGaName":443,"dataGaLocation":398},"/why-gitlab/","why gitlab",{"text":445,"left":269,"config":446,"menu":448},"Product",{"dataNavLevelOne":447},"solutions",{"type":449,"link":450,"columns":454,"feature":522},"lists",{"text":451,"config":452},"View all Solutions",{"href":453,"dataGaName":447,"dataGaLocation":398},"/solutions/",[455,478,501],{"title":456,"description":457,"link":458,"items":463},"Automation","CI/CD and automation to accelerate deployment",{"config":459},{"icon":460,"href":461,"dataGaName":462,"dataGaLocation":398},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[464,467,470,474],{"text":387,"config":465},{"href":466,"dataGaLocation":398,"dataGaName":387},"/solutions/continuous-integration/",{"text":429,"config":468},{"href":434,"dataGaLocation":398,"dataGaName":469},"gitlab duo agent platform - product menu",{"text":471,"config":472},"Source Code Management",{"href":473,"dataGaLocation":398,"dataGaName":471},"/solutions/source-code-management/",{"text":475,"config":476},"Automated Software Delivery",{"href":461,"dataGaLocation":398,"dataGaName":477},"Automated software delivery",{"title":479,"description":480,"link":481,"items":486},"Security","Deliver code faster without compromising security",{"config":482},{"href":483,"dataGaName":484,"dataGaLocation":398,"icon":485},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[487,491,496],{"text":488,"config":489},"Application Security Testing",{"href":483,"dataGaName":490,"dataGaLocation":398},"Application security testing",{"text":492,"config":493},"Software Supply Chain Security",{"href":494,"dataGaLocation":398,"dataGaName":495},"/solutions/supply-chain/","Software supply chain security",{"text":497,"config":498},"Software Compliance",{"href":499,"dataGaName":500,"dataGaLocation":398},"/solutions/software-compliance/","software compliance",{"title":502,"link":503,"items":508},"Measurement",{"config":504},{"icon":505,"href":506,"dataGaName":507,"dataGaLocation":398},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[509,513,517],{"text":510,"config":511},"Visibility & Measurement",{"href":506,"dataGaLocation":398,"dataGaName":512},"Visibility and Measurement",{"text":514,"config":515},"Value Stream Management",{"href":516,"dataGaLocation":398,"dataGaName":514},"/solutions/value-stream-management/",{"text":518,"config":519},"Analytics & Insights",{"href":520,"dataGaLocation":398,"dataGaName":521},"/solutions/analytics-and-insights/","Analytics and insights",{"title":523,"type":449,"items":524},"GitLab for",[525,531,537],{"text":526,"config":527},"Enterprise",{"icon":528,"href":529,"dataGaLocation":398,"dataGaName":530},"Building","/enterprise/","enterprise",{"text":532,"config":533},"Small Business",{"icon":534,"href":535,"dataGaLocation":398,"dataGaName":536},"Work","/small-business/","small business",{"text":538,"config":539},"Public Sector",{"icon":540,"href":541,"dataGaLocation":398,"dataGaName":542},"Organization","/solutions/public-sector/","public sector",{"text":544,"config":545},"Pricing",{"href":546,"dataGaName":547,"dataGaLocation":398,"dataNavLevelOne":547},"/pricing/","pricing",{"text":549,"config":550,"menu":552},"Resources",{"dataNavLevelOne":551},"resources",{"type":449,"link":553,"columns":557,"feature":650},{"text":554,"config":555},"View all resources",{"href":556,"dataGaName":551,"dataGaLocation":398},"/resources/",[558,590,617],{"title":559,"items":560},"Getting started",[561,566,571,576,581,586],{"text":562,"config":563},"Install",{"href":564,"dataGaName":565,"dataGaLocation":398},"/install/","install",{"text":567,"config":568},"Quick start guides",{"href":569,"dataGaName":570,"dataGaLocation":398},"/get-started/","quick setup checklists",{"text":572,"config":573},"Learn",{"href":574,"dataGaLocation":398,"dataGaName":575},"https://university.gitlab.com/","learn",{"text":577,"config":578},"Product documentation",{"href":579,"dataGaName":580,"dataGaLocation":398},"https://docs.gitlab.com/","product documentation",{"text":582,"config":583},"Best practice videos",{"href":584,"dataGaName":585,"dataGaLocation":398},"/getting-started-videos/","best practice videos",{"text":587,"config":588},"Integrations",{"href":589,"dataGaName":390,"dataGaLocation":398},"/integrations/",{"title":591,"items":592},"Discover",[593,598,603,608,612],{"text":594,"config":595},"Customer success stories",{"href":596,"dataGaName":597,"dataGaLocation":398},"/customers/","customer success stories",{"text":599,"config":600},"Blog",{"href":601,"dataGaName":602,"dataGaLocation":398},"/blog/","blog",{"text":604,"config":605},"Demo Hub",{"href":606,"dataGaName":607,"dataGaLocation":398},"/demo-hub/","demo hub",{"text":609,"config":610},"The Source",{"href":611,"dataGaName":602,"dataGaLocation":398},"/the-source/",{"text":613,"config":614},"Remote",{"href":615,"dataGaName":616,"dataGaLocation":398},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":618,"items":619},"Connect",[620,625,630,635,640,645],{"text":621,"config":622},"GitLab Services",{"href":623,"dataGaName":624,"dataGaLocation":398},"/services/","services",{"text":626,"config":627},"Contribute",{"href":628,"dataGaName":629,"dataGaLocation":398},"https://contributors.gitlab.com","contribute",{"text":631,"config":632},"Community",{"href":633,"dataGaName":634,"dataGaLocation":398},"/community/","community",{"text":636,"config":637},"Forum",{"href":638,"dataGaName":639,"dataGaLocation":398},"https://forum.gitlab.com/","forum",{"text":641,"config":642},"Events",{"href":643,"dataGaName":644,"dataGaLocation":398},"/events/","events",{"text":646,"config":647},"Partners",{"href":648,"dataGaName":649,"dataGaLocation":398},"/partners/","partners",{"config":651,"title":654,"text":655,"link":656},{"background":652,"textColor":653},"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":657,"config":658},"Read the latest",{"href":659,"dataGaName":660,"dataGaLocation":398},"/whats-new/","whats new",{"text":662,"config":663,"menu":665},"Company",{"dataNavLevelOne":664},"company",{"type":449,"columns":666},[667],{"items":668},[669,674,680,682,687,692,697,702,707,712],{"text":670,"config":671},"About",{"href":672,"dataGaName":673,"dataGaLocation":398},"/company/","about",{"text":675,"config":676,"footerGa":679},"Jobs",{"href":677,"dataGaName":678,"dataGaLocation":398},"/jobs/","jobs",{"dataGaName":678},{"text":641,"config":681},{"href":643,"dataGaName":644,"dataGaLocation":398},{"text":683,"config":684},"Leadership",{"href":685,"dataGaName":686,"dataGaLocation":398},"/company/team/e-group/","leadership",{"text":688,"config":689},"Handbook",{"href":690,"dataGaName":691,"dataGaLocation":398},"https://handbook.gitlab.com/","handbook",{"text":693,"config":694},"Investor relations",{"href":695,"dataGaName":696,"dataGaLocation":398},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":698,"config":699},"Trust Center",{"href":700,"dataGaName":701,"dataGaLocation":398},"/security/","trust center",{"text":703,"config":704},"AI Transparency Center",{"href":705,"dataGaName":706,"dataGaLocation":398},"/ai-transparency-center/","ai transparency center",{"text":708,"config":709},"Newsletter",{"href":710,"dataGaName":711,"dataGaLocation":398},"/company/contact/#contact-forms","newsletter",{"text":713,"config":714},"Press",{"href":715,"dataGaName":716,"dataGaLocation":398},"/press/","press",{"text":718,"config":719,"menu":720},"Contact us",{"dataNavLevelOne":664},{"type":449,"columns":721},[722],{"items":723},[724,729,734],{"text":725,"config":726},"Talk to sales",{"href":727,"dataGaName":728,"dataGaLocation":398},"/sales/","talk to sales",{"text":730,"config":731},"Support portal",{"href":732,"dataGaName":733,"dataGaLocation":398},"https://support.gitlab.com/hc/en-us","support portal",{"text":735,"config":736},"Customer portal",{"href":737,"dataGaName":738,"dataGaLocation":398},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":740,"login":741,"suggestions":748},"Close",{"text":742,"link":743},"To search repositories and projects, login to",{"text":744,"config":745},"gitlab.com",{"href":412,"dataGaName":746,"dataGaLocation":747},"search login","search",{"text":749,"default":750},"Suggestions",[751,753,757,759,763,767],{"text":429,"config":752},{"href":434,"dataGaName":429,"dataGaLocation":747},{"text":754,"config":755},"Code Suggestions (AI)",{"href":756,"dataGaName":754,"dataGaLocation":747},"/solutions/code-suggestions/",{"text":387,"config":758},{"href":466,"dataGaName":387,"dataGaLocation":747},{"text":760,"config":761},"GitLab on AWS",{"href":762,"dataGaName":760,"dataGaLocation":747},"/partners/technology-partners/aws/",{"text":764,"config":765},"GitLab on Google Cloud",{"href":766,"dataGaName":764,"dataGaLocation":747},"/partners/technology-partners/google-cloud-platform/",{"text":768,"config":769},"Why GitLab?",{"href":442,"dataGaName":768,"dataGaLocation":747},{"freeTrial":771,"mobileIcon":776,"desktopIcon":781,"secondaryButton":784},{"text":772,"config":773},"Start free trial",{"href":774,"dataGaName":403,"dataGaLocation":775},"https://gitlab.com/-/trials/new/","nav",{"altText":777,"config":778},"Gitlab Icon",{"src":779,"dataGaName":780,"dataGaLocation":775},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":777,"config":782},{"src":783,"dataGaName":780,"dataGaLocation":775},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":785,"config":786},"Get Started",{"href":787,"dataGaName":788,"dataGaLocation":775},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":790,"mobileIcon":794,"desktopIcon":796},{"text":791,"config":792},"Learn more about GitLab Duo",{"href":434,"dataGaName":793,"dataGaLocation":775},"gitlab duo",{"altText":777,"config":795},{"src":779,"dataGaName":780,"dataGaLocation":775},{"altText":777,"config":797},{"src":783,"dataGaName":780,"dataGaLocation":775},{"button":799,"mobileIcon":804,"desktopIcon":806},{"text":800,"config":801},"/switch",{"href":802,"dataGaName":803,"dataGaLocation":775},"#contact","switch",{"altText":777,"config":805},{"src":779,"dataGaName":780,"dataGaLocation":775},{"altText":777,"config":807},{"src":808,"dataGaName":780,"dataGaLocation":775},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":810,"mobileIcon":815,"desktopIcon":817},{"text":811,"config":812},"Back to pricing",{"href":546,"dataGaName":813,"dataGaLocation":775,"icon":814},"back to pricing","GoBack",{"altText":777,"config":816},{"src":779,"dataGaName":780,"dataGaLocation":775},{"altText":777,"config":818},{"src":783,"dataGaName":780,"dataGaLocation":775},{"title":820,"titleMobile":821,"button":822,"config":827},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":440,"config":823},{"href":824,"dataGaName":825,"dataGaLocation":826},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":828,"disabled":374},"release",{"data":830},{"text":831,"source":832,"edit":838,"contribute":843,"config":848,"items":853,"minimal":1062},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":833,"config":834},"View page source",{"href":835,"dataGaName":836,"dataGaLocation":837},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":839,"config":840},"Edit this page",{"href":841,"dataGaName":842,"dataGaLocation":837},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":844,"config":845},"Please contribute",{"href":846,"dataGaName":847,"dataGaLocation":837},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":849,"facebook":850,"youtube":851,"linkedin":852},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[854,901,954,998,1030],{"title":544,"links":855,"subMenu":870},[856,860,865],{"text":857,"config":858},"View plans",{"href":546,"dataGaName":859,"dataGaLocation":837},"view plans",{"text":861,"config":862},"Why Premium?",{"href":863,"dataGaName":864,"dataGaLocation":837},"/pricing/premium/","why premium",{"text":866,"config":867},"Why Ultimate?",{"href":868,"dataGaName":869,"dataGaLocation":837},"/pricing/ultimate/","why ultimate",[871],{"title":872,"links":873},"Contact Us",[874,877,879,881,886,891,896],{"text":875,"config":876},"Contact sales",{"href":727,"dataGaName":408,"dataGaLocation":837},{"text":730,"config":878},{"href":732,"dataGaName":733,"dataGaLocation":837},{"text":735,"config":880},{"href":737,"dataGaName":738,"dataGaLocation":837},{"text":882,"config":883},"Status",{"href":884,"dataGaName":885,"dataGaLocation":837},"https://status.gitlab.com/","status",{"text":887,"config":888},"Terms of use",{"href":889,"dataGaName":890,"dataGaLocation":837},"/terms/","terms of use",{"text":892,"config":893},"Privacy statement",{"href":894,"dataGaName":895,"dataGaLocation":837},"/privacy/","privacy statement",{"text":897,"config":898},"Cookie preferences",{"dataGaName":899,"dataGaLocation":837,"id":900,"isOneTrustButton":269},"cookie preferences","ot-sdk-btn",{"title":445,"links":902,"subMenu":910},[903,906],{"text":385,"config":904},{"href":427,"dataGaName":905,"dataGaLocation":837},"devsecops platform",{"text":907,"config":908},"AI-Assisted Development",{"href":434,"dataGaName":909,"dataGaLocation":837},"ai-assisted development",[911],{"title":912,"links":913},"Topics",[914,919,924,929,934,939,944,949],{"text":915,"config":916},"CICD",{"href":917,"dataGaName":918,"dataGaLocation":837},"/topics/ci-cd/","cicd",{"text":920,"config":921},"GitOps",{"href":922,"dataGaName":923,"dataGaLocation":837},"/topics/gitops/","gitops",{"text":925,"config":926},"DevOps",{"href":927,"dataGaName":928,"dataGaLocation":837},"/topics/devops/","devops",{"text":930,"config":931},"Version Control",{"href":932,"dataGaName":933,"dataGaLocation":837},"/topics/version-control/","version control",{"text":935,"config":936},"DevSecOps",{"href":937,"dataGaName":938,"dataGaLocation":837},"/topics/devsecops/","devsecops",{"text":940,"config":941},"Cloud Native",{"href":942,"dataGaName":943,"dataGaLocation":837},"/topics/cloud-native/","cloud native",{"text":945,"config":946},"AI for Coding",{"href":947,"dataGaName":948,"dataGaLocation":837},"/topics/devops/ai-for-coding/","ai for coding",{"text":950,"config":951},"Agentic AI",{"href":952,"dataGaName":953,"dataGaLocation":837},"/topics/agentic-ai/","agentic ai",{"title":955,"links":956},"Solutions",[957,959,961,966,970,973,977,980,982,985,988,993],{"text":488,"config":958},{"href":483,"dataGaName":488,"dataGaLocation":837},{"text":477,"config":960},{"href":461,"dataGaName":462,"dataGaLocation":837},{"text":962,"config":963},"Agile development",{"href":964,"dataGaName":965,"dataGaLocation":837},"/solutions/agile-delivery/","agile delivery",{"text":967,"config":968},"SCM",{"href":473,"dataGaName":969,"dataGaLocation":837},"source code management",{"text":915,"config":971},{"href":466,"dataGaName":972,"dataGaLocation":837},"continuous integration & delivery",{"text":974,"config":975},"Value stream management",{"href":516,"dataGaName":976,"dataGaLocation":837},"value stream management",{"text":920,"config":978},{"href":979,"dataGaName":923,"dataGaLocation":837},"/solutions/gitops/",{"text":526,"config":981},{"href":529,"dataGaName":530,"dataGaLocation":837},{"text":983,"config":984},"Small business",{"href":535,"dataGaName":536,"dataGaLocation":837},{"text":986,"config":987},"Public sector",{"href":541,"dataGaName":542,"dataGaLocation":837},{"text":989,"config":990},"Education",{"href":991,"dataGaName":992,"dataGaLocation":837},"/solutions/education/","education",{"text":994,"config":995},"Financial services",{"href":996,"dataGaName":997,"dataGaLocation":837},"/solutions/finance/","financial services",{"title":549,"links":999},[1000,1002,1004,1006,1009,1011,1014,1016,1018,1020,1022,1024,1026,1028],{"text":562,"config":1001},{"href":564,"dataGaName":565,"dataGaLocation":837},{"text":567,"config":1003},{"href":569,"dataGaName":570,"dataGaLocation":837},{"text":572,"config":1005},{"href":574,"dataGaName":575,"dataGaLocation":837},{"text":577,"config":1007},{"href":579,"dataGaName":1008,"dataGaLocation":837},"docs",{"text":599,"config":1010},{"href":601,"dataGaName":602,"dataGaLocation":837},{"text":1012,"config":1013},"What's new",{"href":659,"dataGaName":660,"dataGaLocation":837},{"text":594,"config":1015},{"href":596,"dataGaName":597,"dataGaLocation":837},{"text":613,"config":1017},{"href":615,"dataGaName":616,"dataGaLocation":837},{"text":621,"config":1019},{"href":623,"dataGaName":624,"dataGaLocation":837},{"text":626,"config":1021},{"href":628,"dataGaName":629,"dataGaLocation":837},{"text":631,"config":1023},{"href":633,"dataGaName":634,"dataGaLocation":837},{"text":636,"config":1025},{"href":638,"dataGaName":639,"dataGaLocation":837},{"text":641,"config":1027},{"href":643,"dataGaName":644,"dataGaLocation":837},{"text":646,"config":1029},{"href":648,"dataGaName":649,"dataGaLocation":837},{"title":662,"links":1031},[1032,1034,1036,1038,1040,1042,1046,1051,1053,1055,1057],{"text":670,"config":1033},{"href":672,"dataGaName":664,"dataGaLocation":837},{"text":675,"config":1035},{"href":677,"dataGaName":678,"dataGaLocation":837},{"text":683,"config":1037},{"href":685,"dataGaName":686,"dataGaLocation":837},{"text":688,"config":1039},{"href":690,"dataGaName":691,"dataGaLocation":837},{"text":693,"config":1041},{"href":695,"dataGaName":696,"dataGaLocation":837},{"text":1043,"config":1044},"Sustainability",{"href":1045,"dataGaName":1043,"dataGaLocation":837},"/sustainability/",{"text":1047,"config":1048},"Diversity, inclusion and belonging (DIB)",{"href":1049,"dataGaName":1050,"dataGaLocation":837},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":698,"config":1052},{"href":700,"dataGaName":701,"dataGaLocation":837},{"text":708,"config":1054},{"href":710,"dataGaName":711,"dataGaLocation":837},{"text":713,"config":1056},{"href":715,"dataGaName":716,"dataGaLocation":837},{"text":1058,"config":1059},"Modern Slavery Transparency Statement",{"href":1060,"dataGaName":1061,"dataGaLocation":837},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1063},[1064,1067,1070],{"text":1065,"config":1066},"Terms",{"href":889,"dataGaName":890,"dataGaLocation":837},{"text":1068,"config":1069},"Cookies",{"dataGaName":899,"dataGaLocation":837,"id":900,"isOneTrustButton":269},{"text":1071,"config":1072},"Privacy",{"href":894,"dataGaName":895,"dataGaLocation":837},[1074,1088],{"id":1075,"title":7,"body":373,"config":1076,"content":1078,"description":373,"extension":1082,"meta":1083,"navigation":269,"path":1084,"seo":1085,"stem":1086,"__hash__":1087},"blogAuthors/en-us/blog/authors/sarah-matthies.yml",{"template":1077},"BlogAuthor",{"name":7,"config":1079},{"headshot":1080,"ctfId":1081},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664405/Blog/Author%20Headshots/Screenshot_2024-11-19_at_9.50.14_AM.png","2Giv8NnS4VVAq9RsHYqHkg","yml",{},"/en-us/blog/authors/sarah-matthies",{},"en-us/blog/authors/sarah-matthies","MH8dE3jD9qd4xrtKZZ4mSGVNleDUs7qSZ-zPFenkyh8",{"id":1089,"title":8,"body":373,"config":1090,"content":1091,"description":373,"extension":1082,"meta":1095,"navigation":269,"path":1096,"seo":1097,"stem":1098,"__hash__":1099},"blogAuthors/en-us/blog/authors/noah-ing.yml",{"template":1077},{"name":8,"config":1092},{"headshot":1093,"ctfId":1094},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664410/Blog/Author%20Headshots/noahing.png","noahing",{},"/en-us/blog/authors/noah-ing",{},"en-us/blog/authors/noah-ing","NHgV_yTX8kHX01mE2SSxC6hcOMw3BCWiblr8m6csLkw",[1101,1110,1118],{"title":1102,"description":1103,"heroImage":1104,"category":369,"date":1105,"authors":1106,"slug":1109,"externalUrl":373},"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",[1107,1108],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1111,"description":1112,"heroImage":1113,"category":369,"date":1114,"authors":1115,"slug":1117,"externalUrl":373},"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",[1116],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1119,"description":1120,"heroImage":1121,"category":369,"date":1122,"authors":1123,"slug":1125,"externalUrl":373},"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",[1124],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1127},[1128,1142,1154,1166],{"id":1129,"categories":1130,"header":1132,"text":1133,"button":1134,"image":1139},"ai-modernization",[1131],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1135,"config":1136},"Get your AI maturity score",{"href":1137,"dataGaName":1138,"dataGaLocation":602},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1140},{"src":1141},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1143,"categories":1144,"header":1146,"text":1133,"button":1147,"image":1151},"devops-modernization",[1145,938],"product","Are you just managing tools or shipping innovation?",{"text":1148,"config":1149},"Get your DevOps maturity score",{"href":1150,"dataGaName":1138,"dataGaLocation":602},"/assessments/devops-modernization-assessment/",{"config":1152},{"src":1153},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1155,"categories":1156,"header":1158,"text":1133,"button":1159,"image":1163},"security-modernization",[1157],"security","Are you trading speed for security?",{"text":1160,"config":1161},"Get your security maturity score",{"href":1162,"dataGaName":1138,"dataGaLocation":602},"/assessments/security-modernization-assessment/",{"config":1164},{"src":1165},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1167,"paths":1168,"header":1171,"text":1172,"button":1173,"image":1178},"github-azure-migration",[1169,1170],"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":1174,"config":1175},"See how GitLab compares to GitHub",{"href":1176,"dataGaName":1177,"dataGaLocation":602},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1179},{"src":1153},{"header":1181,"blurb":1182,"button":1183,"secondaryButton":1188},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1184,"config":1185},"Get your free trial",{"href":1186,"dataGaName":403,"dataGaLocation":1187},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":875,"config":1189},{"href":727,"dataGaName":408,"dataGaLocation":1187},1786803753988]