[{"data":1,"prerenderedAt":1038},["ShallowReactive",2],{"/blog/how-we-designed-the-gitlab-reference-architectures":3,"navigation-en-us":251,"banner-en-us":679,"footer-en-us":689,"blog-post-authors-en-us-Grant Young":933,"blog-related-posts-en-us-how-we-designed-the-gitlab-reference-architectures":948,"blog-promotions-en-us":974,"next-steps-en-us":1028},{"id":4,"title":5,"authors":6,"body":8,"category":227,"date":228,"description":229,"extension":230,"externalUrl":231,"faq":231,"featured":232,"heroImage":233,"meta":234,"navigation":232,"path":235,"seo":236,"slug":241,"stem":242,"tags":243,"template":249,"updatedDate":231,"__hash__":250},"blogPosts/en-us/blog/how-we-designed-the-gitlab-reference-architectures.md","How we designed the GitLab Reference Architectures",[7],"Grant Young",{"type":9,"value":10,"toc":219},"minimark",[11,22,25,33,38,41,49,52,55,59,62,81,84,88,91,94,108,111,119,122,137,145,152,156,159,188,201,210],[12,13,14,15,21],"p",{},"We introduced the first ",[16,17,20],"a",{"href":18,"rel":19},"https://docs.gitlab.com/administration/reference_architectures/",[],"GitLab Reference Architectures"," five years ago. Originally developed as a partnership between the GitLab Test Platform (formally Quality Engineering) and Support teams, along with other contributors, these architectures aim to provide scalable and elastic starting points to deploy GitLab at scale, tailored to an organization's target load.",[12,23,24],{},"Since their debut, we've been thrilled to see the impact these architectures have had on our customers as they navigate their DevSecOps journey. We continue to iterate, expand, and refine the architectures, reflecting our commitment to providing you with the latest, best-in-class guidance on deploying, scaling, and maintaining your GitLab environments.",[12,26,27,28,32],{},"In recognition of the five-year milestone, here is a peek behind the curtain on ",[29,30,31],"em",{},"how"," we designed the Reference Architectures and how that design still applies today.",[34,35,37],"h2",{"id":36},"the-problem","The problem",[12,39,40],{},"Before introducing the Reference Architectures, we frequently heard from our customers about the hurdles they faced when deploying GitLab at scale to meet their performance and availability goals.",[12,42,43,44,48],{},"While every GitLab environment can be considered a little unique because of the need to meet a customer's own requirements, we recognized from running GitLab.com, as well as from our larger customers, that there were common fundamentals to deploying GitLab at scale that were worth sharing. Our objective was to address customer needs while promoting deployment ",[16,45,47],{"href":46},"/blog/navigate-application-architecture-drift-and-organizational-alignment/","best practices to reduce drift and increase alignment",".",[12,50,51],{},"Simultaneously, we wanted to significantly expand our performance testing efforts. The goals of this expansion were to provide our engineering teams with a deeper understanding of performance bottlenecks, to drive improvements in GitLab's performance, and to continuously test the application moving forward to ensure it remained performant. However, to conduct meaningful performance tests, we needed a standardized GitLab environment design capable of handling the target loads.",[12,53,54],{},"Enter the Reference Architectures.",[34,56,58],{"id":57},"the-goals","The goals",[12,60,61],{},"With the need for a common architecture clear, we turned next to set the goals of this initiative, which ultimately became the following:",[63,64,65,69,72,75,78],"ul",{},[66,67,68],"li",{},"Performance: Ensure the architecture can handle the target load efficiently.",[66,70,71],{},"Availability: Maximize uptime and reliability wherever possible.",[66,73,74],{},"Scalability and elasticity: Ensure the architecture is scalable and elastic to meet individual customer needs.",[66,76,77],{},"Cost-effectiveness: Optimize resource allocation to avoid unnecessary expenses.",[66,79,80],{},"Maintainability: Make the architecture deployment and management as straightforward as possible with standardized configurations.",[12,82,83],{},"It's crucial to note that these goals were not in order and they are goals we stay true to today.",[34,85,87],{"id":86},"the-process","The process",[12,89,90],{},"Once the goals were set, we faced the challenge of designing an architecture, validating it, and making sure that it was fit for purpose and met those goals.",[12,92,93],{},"The process itself was relatively simple in design:",[63,95,96,99,102,105],{},[66,97,98],{},"Gather metrics on existing environments and the loads they were able to handle.",[66,100,101],{},"Define a prototype architecture based on these metrics.",[66,103,104],{},"Build and test the environment to validate.",[66,106,107],{},"Adjust the environment iteratively based on the test results and metrics until we had a validated architecture that met the goals.",[12,109,110],{},"While simple in design, this, of course, was not the case in practice so we got to work.",[12,112,113,114,118],{},"First, we collected and reviewed the data. To that end, we reviewed metrics and logging data from GitLab.com as well as several participating large customers to correlate the environment sizes deployed to the load they were handling. To achieve this, we needed an objective and quantifiable way to measure that load across any environment, and for that we used ",[115,116,117],"strong",{},"Requests per Seconds (RPS)",". With RPS we could see the concurrent load each environment handled and correlate this to the user count accordingly. Specifically, a user count would correlate to the full manual and automated load (such as continuous integration). From that data, we were able to correlate this across several environment sizes and start to pick out common patterns for the architectures.",[12,120,121],{},"Next, we started with a prototype architecture that aimed to meet the goals while cross-referencing with the data we collected. In fact, we actually started this step in conjunction with the first step initially as we had a good enough idea of where to start: Taking the fundamental GitLab.com design and scaling it down for individual customer loads in cost-effective ways. This allowed us to start performance testing the prototype with the data we were analyzing to corroborate accordingly. After quite a few iterations, we had a starting point for our prototype architecture.",[12,123,124,125,130,131,136],{},"To thoroughly test and validate the architecture we needed to turn to performance testing and define our methodology. The approach was to target our most common endpoints with a representative test data set at RPS loads that were also representative. Then, although we had manually built the prototype architecture, we knew we needed tooling to automatically build environments and handle tasks such as updates. These efforts resulted in the ",[16,126,129],{"href":127,"rel":128},"https://about.gitlab.com/blog/how-were-building-up-performance-testing-of-gitlab/",[],"GitLab Performance Tool"," and ",[16,132,135],{"href":133,"rel":134},"https://about.gitlab.com/blog/why-we-are-building-the-gitlab-environment-toolkit-to-help-deploy-gitlab-at-scale/",[],"GitLab Environment Toolkit",", which I blogged about previously and which we continue to use to this day (and you can use too!).",[12,138,139,140,48],{},"With all the above in place we started the main work of validating the prototype architecture through multiple cycles of testing and iterating. In each cycle, we would performance test the environment, review the results and metrics, and adjust the environment accordingly. Through iteration we were able to identify what failures were real application performance issues and what were environmental, and eventually we had our first architecture. That architecture is now known as the ",[16,141,144],{"href":142,"rel":143},"https://docs.gitlab.com/administration/reference_architectures/10k_users/",[],"200 RPS or 10,000-user Reference Architecture",[12,146,147],{},[148,149],"img",{"alt":150,"src":151},"GitLab Reference Architecture - 200 RPS","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098658/Blog/Content%20Images/Blog/Content%20Images/reference_architecture_aHR0cHM6_1750098658326.png",[34,153,155],{"id":154},"where-reference-architectures-are-today","Where Reference Architectures are today",[12,157,158],{},"Since publishing our first validated Reference Architecture, the work has never stopped! We like to describe the architectures as living documentation, as they're constantly being improved and expanded with additions such as:",[63,160,161,164,167,170,173,176,179],{},[66,162,163],{},"various Reference Architecture sizes based on common deployments",[66,165,166],{},"non-highly available sizes for smaller environments",[66,168,169],{},"full step-by-step documentation in collaboration with our colleagues in Technical Writing and Support",[66,171,172],{},"expanded guidance and new naming scheme to help with right sizing, scaling, and how to deal with outliers such as monorepos",[66,174,175],{},"cloud native hybrid variants where select components are run in Kubernetes",[66,177,178],{},"recommendations and guidance for cloud provider services",[66,180,181,182,187],{},"and more! Check out the ",[16,183,186],{"href":184,"rel":185},"https://docs.gitlab.com/administration/reference_architectures/#update-history",[],"update history"," section in the Reference Architecture documentation!",[12,189,190,191,196,197,200],{},"All this is driven by our ",[16,192,195],{"href":193,"rel":194},"https://docs.gitlab.com/administration/reference_architectures/#validation-and-test-results",[],"comprehensive testing program"," that we built alongside the Reference Architectures to continuously test that they remain fit for purpose against the latest GitLab code ",[29,198,199],{},"every single week"," and to catch any unexpected performance issues early.",[12,202,203,204,209],{},"And we're thrilled to see these efforts have helped numerous customers to date as well as our own engineering teams deliver new, exciting services. In fact, our engineering teams used the Reference Architectures to develop ",[16,205,208],{"href":206,"rel":207},"https://about.gitlab.com/dedicated/",[],"GitLab Dedicated",". Five years on, our commitment is stronger than ever. The work very much continues in the same way it started to ensure you have the best-in-class guidance for your DevSecOps journey.",[211,212,213],"blockquote",{},[12,214,215,216,48],{},"Learn more about ",[16,217,20],{"href":18,"rel":218},[],{"title":220,"searchDepth":221,"depth":221,"links":222},"",2,[223,224,225,226],{"id":36,"depth":221,"text":37},{"id":57,"depth":221,"text":58},{"id":86,"depth":221,"text":87},{"id":154,"depth":221,"text":155},"engineering","2024-10-02","Take a look back with us as we dive into our Reference Architectures design journey to help users easily deploy GitLab at scale. Learn our goals, process, and what's happened in the five years since.","md",null,true,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098651/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%282%29_52vS9ne2Hu3TElOeHep0AF_1750098651525.png",{},"/en-us/blog/how-we-designed-the-gitlab-reference-architectures",{"title":5,"description":229,"ogTitle":5,"ogDescription":229,"noIndex":237,"ogImage":233,"ogUrl":238,"ogSiteName":239,"ogType":240,"canonicalUrls":238},false,"https://about.gitlab.com/blog/how-we-designed-the-gitlab-reference-architectures","https://about.gitlab.com","article","how-we-designed-the-gitlab-reference-architectures","en-us/blog/how-we-designed-the-gitlab-reference-architectures",[244,245,246,247,248],"CI","DevSecOps","performance","inside GitLab","customers","BlogPost","CumQdp0WT1_dEV6c2ULhzNsyxuxHtzTqoQZwVxj7P3o",{"logo":252,"freeTrial":257,"sales":262,"login":267,"items":272,"search":599,"minimal":630,"duo":649,"switchNav":658,"pricingDeployment":669},{"config":253},{"href":254,"dataGaName":255,"dataGaLocation":256},"/","gitlab logo","header",{"text":258,"config":259},"Get free trial",{"href":260,"dataGaName":261,"dataGaLocation":256},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":263,"config":264},"Request a demo",{"href":265,"dataGaName":266,"dataGaLocation":256},"/sales/?contact-topic=request-demo","sales",{"text":268,"config":269},"Sign in",{"href":270,"dataGaName":271,"dataGaLocation":256},"https://gitlab.com/users/sign_in/","sign in",[273,302,402,407,521,577],{"text":274,"config":275,"menu":277},"Platform",{"dataNavLevelOne":276},"platform",{"type":278,"columns":279},"cards",[280,286,294],{"title":274,"description":281,"link":282},"The intelligent orchestration platform for DevSecOps",{"text":283,"config":284},"Explore our Platform",{"href":285,"dataGaName":276,"dataGaLocation":256},"/platform/",{"title":287,"description":288,"link":289},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":290,"config":291},"Meet GitLab Duo",{"href":292,"dataGaName":293,"dataGaLocation":256},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":295,"description":296,"link":297},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":298,"config":299},"Learn more",{"href":300,"dataGaName":301,"dataGaLocation":256},"/why-gitlab/","why gitlab",{"text":303,"left":232,"config":304,"menu":306},"Product",{"dataNavLevelOne":305},"solutions",{"type":307,"link":308,"columns":312,"feature":381},"lists",{"text":309,"config":310},"View all Solutions",{"href":311,"dataGaName":305,"dataGaLocation":256},"/solutions/",[313,337,360],{"title":314,"description":315,"link":316,"items":321},"Automation","CI/CD and automation to accelerate deployment",{"config":317},{"icon":318,"href":319,"dataGaName":320,"dataGaLocation":256},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[322,326,329,333],{"text":323,"config":324},"CI/CD",{"href":325,"dataGaLocation":256,"dataGaName":323},"/solutions/continuous-integration/",{"text":287,"config":327},{"href":292,"dataGaLocation":256,"dataGaName":328},"gitlab duo agent platform - product menu",{"text":330,"config":331},"Source Code Management",{"href":332,"dataGaLocation":256,"dataGaName":330},"/solutions/source-code-management/",{"text":334,"config":335},"Automated Software Delivery",{"href":319,"dataGaLocation":256,"dataGaName":336},"Automated software delivery",{"title":338,"description":339,"link":340,"items":345},"Security","Deliver code faster without compromising security",{"config":341},{"href":342,"dataGaName":343,"dataGaLocation":256,"icon":344},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[346,350,355],{"text":347,"config":348},"Application Security Testing",{"href":342,"dataGaName":349,"dataGaLocation":256},"Application security testing",{"text":351,"config":352},"Software Supply Chain Security",{"href":353,"dataGaLocation":256,"dataGaName":354},"/solutions/supply-chain/","Software supply chain security",{"text":356,"config":357},"Software Compliance",{"href":358,"dataGaName":359,"dataGaLocation":256},"/solutions/software-compliance/","software compliance",{"title":361,"link":362,"items":367},"Measurement",{"config":363},{"icon":364,"href":365,"dataGaName":366,"dataGaLocation":256},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[368,372,376],{"text":369,"config":370},"Visibility & Measurement",{"href":365,"dataGaLocation":256,"dataGaName":371},"Visibility and Measurement",{"text":373,"config":374},"Value Stream Management",{"href":375,"dataGaLocation":256,"dataGaName":373},"/solutions/value-stream-management/",{"text":377,"config":378},"Analytics & Insights",{"href":379,"dataGaLocation":256,"dataGaName":380},"/solutions/analytics-and-insights/","Analytics and insights",{"title":382,"type":307,"items":383},"GitLab for",[384,390,396],{"text":385,"config":386},"Enterprise",{"icon":387,"href":388,"dataGaLocation":256,"dataGaName":389},"Building","/enterprise/","enterprise",{"text":391,"config":392},"Small Business",{"icon":393,"href":394,"dataGaLocation":256,"dataGaName":395},"Work","/small-business/","small business",{"text":397,"config":398},"Public Sector",{"icon":399,"href":400,"dataGaLocation":256,"dataGaName":401},"Organization","/solutions/public-sector/","public sector",{"text":403,"config":404},"Pricing",{"href":405,"dataGaName":406,"dataGaLocation":256,"dataNavLevelOne":406},"/pricing/","pricing",{"text":408,"config":409,"menu":411},"Resources",{"dataNavLevelOne":410},"resources",{"type":307,"link":412,"columns":416,"feature":510},{"text":413,"config":414},"View all resources",{"href":415,"dataGaName":410,"dataGaLocation":256},"/resources/",[417,450,477],{"title":418,"items":419},"Getting started",[420,425,430,435,440,445],{"text":421,"config":422},"Install",{"href":423,"dataGaName":424,"dataGaLocation":256},"/install/","install",{"text":426,"config":427},"Quick start guides",{"href":428,"dataGaName":429,"dataGaLocation":256},"/get-started/","quick setup checklists",{"text":431,"config":432},"Learn",{"href":433,"dataGaLocation":256,"dataGaName":434},"https://university.gitlab.com/","learn",{"text":436,"config":437},"Product documentation",{"href":438,"dataGaName":439,"dataGaLocation":256},"https://docs.gitlab.com/","product documentation",{"text":441,"config":442},"Best practice videos",{"href":443,"dataGaName":444,"dataGaLocation":256},"/getting-started-videos/","best practice videos",{"text":446,"config":447},"Integrations",{"href":448,"dataGaName":449,"dataGaLocation":256},"/integrations/","integrations",{"title":451,"items":452},"Discover",[453,458,463,468,472],{"text":454,"config":455},"Customer success stories",{"href":456,"dataGaName":457,"dataGaLocation":256},"/customers/","customer success stories",{"text":459,"config":460},"Blog",{"href":461,"dataGaName":462,"dataGaLocation":256},"/blog/","blog",{"text":464,"config":465},"Demo Hub",{"href":466,"dataGaName":467,"dataGaLocation":256},"/demo-hub/","demo hub",{"text":469,"config":470},"The Source",{"href":471,"dataGaName":462,"dataGaLocation":256},"/the-source/",{"text":473,"config":474},"Remote",{"href":475,"dataGaName":476,"dataGaLocation":256},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":478,"items":479},"Connect",[480,485,490,495,500,505],{"text":481,"config":482},"GitLab Services",{"href":483,"dataGaName":484,"dataGaLocation":256},"/services/","services",{"text":486,"config":487},"Contribute",{"href":488,"dataGaName":489,"dataGaLocation":256},"https://contributors.gitlab.com","contribute",{"text":491,"config":492},"Community",{"href":493,"dataGaName":494,"dataGaLocation":256},"/community/","community",{"text":496,"config":497},"Forum",{"href":498,"dataGaName":499,"dataGaLocation":256},"https://forum.gitlab.com/","forum",{"text":501,"config":502},"Events",{"href":503,"dataGaName":504,"dataGaLocation":256},"/events/","events",{"text":506,"config":507},"Partners",{"href":508,"dataGaName":509,"dataGaLocation":256},"/partners/","partners",{"config":511,"title":514,"text":515,"link":516},{"background":512,"textColor":513},"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":517,"config":518},"Read the latest",{"href":519,"dataGaName":520,"dataGaLocation":256},"/whats-new/","whats new",{"text":522,"config":523,"menu":525},"Company",{"dataNavLevelOne":524},"company",{"type":307,"columns":526},[527],{"items":528},[529,534,540,542,547,552,557,562,567,572],{"text":530,"config":531},"About",{"href":532,"dataGaName":533,"dataGaLocation":256},"/company/","about",{"text":535,"config":536,"footerGa":539},"Jobs",{"href":537,"dataGaName":538,"dataGaLocation":256},"/jobs/","jobs",{"dataGaName":538},{"text":501,"config":541},{"href":503,"dataGaName":504,"dataGaLocation":256},{"text":543,"config":544},"Leadership",{"href":545,"dataGaName":546,"dataGaLocation":256},"/company/team/e-group/","leadership",{"text":548,"config":549},"Handbook",{"href":550,"dataGaName":551,"dataGaLocation":256},"https://handbook.gitlab.com/","handbook",{"text":553,"config":554},"Investor relations",{"href":555,"dataGaName":556,"dataGaLocation":256},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":558,"config":559},"Trust Center",{"href":560,"dataGaName":561,"dataGaLocation":256},"/security/","trust center",{"text":563,"config":564},"AI Transparency Center",{"href":565,"dataGaName":566,"dataGaLocation":256},"/ai-transparency-center/","ai transparency center",{"text":568,"config":569},"Newsletter",{"href":570,"dataGaName":571,"dataGaLocation":256},"/company/contact/#contact-forms","newsletter",{"text":573,"config":574},"Press",{"href":575,"dataGaName":576,"dataGaLocation":256},"/press/","press",{"text":578,"config":579,"menu":580},"Contact us",{"dataNavLevelOne":524},{"type":307,"columns":581},[582],{"items":583},[584,589,594],{"text":585,"config":586},"Talk to sales",{"href":587,"dataGaName":588,"dataGaLocation":256},"/sales/","talk to sales",{"text":590,"config":591},"Support portal",{"href":592,"dataGaName":593,"dataGaLocation":256},"https://support.gitlab.com/hc/en-us","support portal",{"text":595,"config":596},"Customer portal",{"href":597,"dataGaName":598,"dataGaLocation":256},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":600,"login":601,"suggestions":608},"Close",{"text":602,"link":603},"To search repositories and projects, login to",{"text":604,"config":605},"gitlab.com",{"href":270,"dataGaName":606,"dataGaLocation":607},"search login","search",{"text":609,"default":610},"Suggestions",[611,613,617,619,623,627],{"text":287,"config":612},{"href":292,"dataGaName":287,"dataGaLocation":607},{"text":614,"config":615},"Code Suggestions (AI)",{"href":616,"dataGaName":614,"dataGaLocation":607},"/solutions/code-suggestions/",{"text":323,"config":618},{"href":325,"dataGaName":323,"dataGaLocation":607},{"text":620,"config":621},"GitLab on AWS",{"href":622,"dataGaName":620,"dataGaLocation":607},"/partners/technology-partners/aws/",{"text":624,"config":625},"GitLab on Google Cloud",{"href":626,"dataGaName":624,"dataGaLocation":607},"/partners/technology-partners/google-cloud-platform/",{"text":628,"config":629},"Why GitLab?",{"href":300,"dataGaName":628,"dataGaLocation":607},{"freeTrial":631,"mobileIcon":636,"desktopIcon":641,"secondaryButton":644},{"text":632,"config":633},"Start free trial",{"href":634,"dataGaName":261,"dataGaLocation":635},"https://gitlab.com/-/trials/new/","nav",{"altText":637,"config":638},"Gitlab Icon",{"src":639,"dataGaName":640,"dataGaLocation":635},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":637,"config":642},{"src":643,"dataGaName":640,"dataGaLocation":635},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":645,"config":646},"Get Started",{"href":647,"dataGaName":648,"dataGaLocation":635},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":650,"mobileIcon":654,"desktopIcon":656},{"text":651,"config":652},"Learn more about GitLab Duo",{"href":292,"dataGaName":653,"dataGaLocation":635},"gitlab duo",{"altText":637,"config":655},{"src":639,"dataGaName":640,"dataGaLocation":635},{"altText":637,"config":657},{"src":643,"dataGaName":640,"dataGaLocation":635},{"button":659,"mobileIcon":664,"desktopIcon":666},{"text":660,"config":661},"/switch",{"href":662,"dataGaName":663,"dataGaLocation":635},"#contact","switch",{"altText":637,"config":665},{"src":639,"dataGaName":640,"dataGaLocation":635},{"altText":637,"config":667},{"src":668,"dataGaName":640,"dataGaLocation":635},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":670,"mobileIcon":675,"desktopIcon":677},{"text":671,"config":672},"Back to pricing",{"href":405,"dataGaName":673,"dataGaLocation":635,"icon":674},"back to pricing","GoBack",{"altText":637,"config":676},{"src":639,"dataGaName":640,"dataGaLocation":635},{"altText":637,"config":678},{"src":643,"dataGaName":640,"dataGaLocation":635},{"title":680,"titleMobile":681,"button":682,"config":687},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":298,"config":683},{"href":684,"dataGaName":685,"dataGaLocation":686},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":688,"disabled":237},"release",{"data":690},{"text":691,"source":692,"edit":698,"contribute":703,"config":708,"items":713,"minimal":922},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":693,"config":694},"View page source",{"href":695,"dataGaName":696,"dataGaLocation":697},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":699,"config":700},"Edit this page",{"href":701,"dataGaName":702,"dataGaLocation":697},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":704,"config":705},"Please contribute",{"href":706,"dataGaName":707,"dataGaLocation":697},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":709,"facebook":710,"youtube":711,"linkedin":712},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[714,761,814,858,890],{"title":403,"links":715,"subMenu":730},[716,720,725],{"text":717,"config":718},"View plans",{"href":405,"dataGaName":719,"dataGaLocation":697},"view plans",{"text":721,"config":722},"Why Premium?",{"href":723,"dataGaName":724,"dataGaLocation":697},"/pricing/premium/","why premium",{"text":726,"config":727},"Why Ultimate?",{"href":728,"dataGaName":729,"dataGaLocation":697},"/pricing/ultimate/","why ultimate",[731],{"title":732,"links":733},"Contact Us",[734,737,739,741,746,751,756],{"text":735,"config":736},"Contact sales",{"href":587,"dataGaName":266,"dataGaLocation":697},{"text":590,"config":738},{"href":592,"dataGaName":593,"dataGaLocation":697},{"text":595,"config":740},{"href":597,"dataGaName":598,"dataGaLocation":697},{"text":742,"config":743},"Status",{"href":744,"dataGaName":745,"dataGaLocation":697},"https://status.gitlab.com/","status",{"text":747,"config":748},"Terms of use",{"href":749,"dataGaName":750,"dataGaLocation":697},"/terms/","terms of use",{"text":752,"config":753},"Privacy statement",{"href":754,"dataGaName":755,"dataGaLocation":697},"/privacy/","privacy statement",{"text":757,"config":758},"Cookie preferences",{"dataGaName":759,"dataGaLocation":697,"id":760,"isOneTrustButton":232},"cookie preferences","ot-sdk-btn",{"title":303,"links":762,"subMenu":771},[763,767],{"text":764,"config":765},"DevSecOps platform",{"href":285,"dataGaName":766,"dataGaLocation":697},"devsecops platform",{"text":768,"config":769},"AI-Assisted Development",{"href":292,"dataGaName":770,"dataGaLocation":697},"ai-assisted development",[772],{"title":773,"links":774},"Topics",[775,780,785,790,795,799,804,809],{"text":776,"config":777},"CICD",{"href":778,"dataGaName":779,"dataGaLocation":697},"/topics/ci-cd/","cicd",{"text":781,"config":782},"GitOps",{"href":783,"dataGaName":784,"dataGaLocation":697},"/topics/gitops/","gitops",{"text":786,"config":787},"DevOps",{"href":788,"dataGaName":789,"dataGaLocation":697},"/topics/devops/","devops",{"text":791,"config":792},"Version Control",{"href":793,"dataGaName":794,"dataGaLocation":697},"/topics/version-control/","version control",{"text":245,"config":796},{"href":797,"dataGaName":798,"dataGaLocation":697},"/topics/devsecops/","devsecops",{"text":800,"config":801},"Cloud Native",{"href":802,"dataGaName":803,"dataGaLocation":697},"/topics/cloud-native/","cloud native",{"text":805,"config":806},"AI for Coding",{"href":807,"dataGaName":808,"dataGaLocation":697},"/topics/devops/ai-for-coding/","ai for coding",{"text":810,"config":811},"Agentic AI",{"href":812,"dataGaName":813,"dataGaLocation":697},"/topics/agentic-ai/","agentic ai",{"title":815,"links":816},"Solutions",[817,819,821,826,830,833,837,840,842,845,848,853],{"text":347,"config":818},{"href":342,"dataGaName":347,"dataGaLocation":697},{"text":336,"config":820},{"href":319,"dataGaName":320,"dataGaLocation":697},{"text":822,"config":823},"Agile development",{"href":824,"dataGaName":825,"dataGaLocation":697},"/solutions/agile-delivery/","agile delivery",{"text":827,"config":828},"SCM",{"href":332,"dataGaName":829,"dataGaLocation":697},"source code management",{"text":776,"config":831},{"href":325,"dataGaName":832,"dataGaLocation":697},"continuous integration & delivery",{"text":834,"config":835},"Value stream management",{"href":375,"dataGaName":836,"dataGaLocation":697},"value stream management",{"text":781,"config":838},{"href":839,"dataGaName":784,"dataGaLocation":697},"/solutions/gitops/",{"text":385,"config":841},{"href":388,"dataGaName":389,"dataGaLocation":697},{"text":843,"config":844},"Small business",{"href":394,"dataGaName":395,"dataGaLocation":697},{"text":846,"config":847},"Public sector",{"href":400,"dataGaName":401,"dataGaLocation":697},{"text":849,"config":850},"Education",{"href":851,"dataGaName":852,"dataGaLocation":697},"/solutions/education/","education",{"text":854,"config":855},"Financial services",{"href":856,"dataGaName":857,"dataGaLocation":697},"/solutions/finance/","financial services",{"title":408,"links":859},[860,862,864,866,869,871,874,876,878,880,882,884,886,888],{"text":421,"config":861},{"href":423,"dataGaName":424,"dataGaLocation":697},{"text":426,"config":863},{"href":428,"dataGaName":429,"dataGaLocation":697},{"text":431,"config":865},{"href":433,"dataGaName":434,"dataGaLocation":697},{"text":436,"config":867},{"href":438,"dataGaName":868,"dataGaLocation":697},"docs",{"text":459,"config":870},{"href":461,"dataGaName":462,"dataGaLocation":697},{"text":872,"config":873},"What's new",{"href":519,"dataGaName":520,"dataGaLocation":697},{"text":454,"config":875},{"href":456,"dataGaName":457,"dataGaLocation":697},{"text":473,"config":877},{"href":475,"dataGaName":476,"dataGaLocation":697},{"text":481,"config":879},{"href":483,"dataGaName":484,"dataGaLocation":697},{"text":486,"config":881},{"href":488,"dataGaName":489,"dataGaLocation":697},{"text":491,"config":883},{"href":493,"dataGaName":494,"dataGaLocation":697},{"text":496,"config":885},{"href":498,"dataGaName":499,"dataGaLocation":697},{"text":501,"config":887},{"href":503,"dataGaName":504,"dataGaLocation":697},{"text":506,"config":889},{"href":508,"dataGaName":509,"dataGaLocation":697},{"title":522,"links":891},[892,894,896,898,900,902,906,911,913,915,917],{"text":530,"config":893},{"href":532,"dataGaName":524,"dataGaLocation":697},{"text":535,"config":895},{"href":537,"dataGaName":538,"dataGaLocation":697},{"text":543,"config":897},{"href":545,"dataGaName":546,"dataGaLocation":697},{"text":548,"config":899},{"href":550,"dataGaName":551,"dataGaLocation":697},{"text":553,"config":901},{"href":555,"dataGaName":556,"dataGaLocation":697},{"text":903,"config":904},"Sustainability",{"href":905,"dataGaName":903,"dataGaLocation":697},"/sustainability/",{"text":907,"config":908},"Diversity, inclusion and belonging (DIB)",{"href":909,"dataGaName":910,"dataGaLocation":697},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":558,"config":912},{"href":560,"dataGaName":561,"dataGaLocation":697},{"text":568,"config":914},{"href":570,"dataGaName":571,"dataGaLocation":697},{"text":573,"config":916},{"href":575,"dataGaName":576,"dataGaLocation":697},{"text":918,"config":919},"Modern Slavery Transparency Statement",{"href":920,"dataGaName":921,"dataGaLocation":697},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":923},[924,927,930],{"text":925,"config":926},"Terms",{"href":749,"dataGaName":750,"dataGaLocation":697},{"text":928,"config":929},"Cookies",{"dataGaName":759,"dataGaLocation":697,"id":760,"isOneTrustButton":232},{"text":931,"config":932},"Privacy",{"href":754,"dataGaName":755,"dataGaLocation":697},[934],{"id":935,"title":7,"body":231,"config":936,"content":938,"description":231,"extension":942,"meta":943,"navigation":232,"path":944,"seo":945,"stem":946,"__hash__":947},"blogAuthors/en-us/blog/authors/grant-young.yml",{"template":937},"BlogAuthor",{"name":7,"config":939},{"headshot":940,"ctfId":941},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666346/Blog/Author%20Headshots/grantyoung-headshot.jpg","grantyoung","yml",{},"/en-us/blog/authors/grant-young",{},"en-us/blog/authors/grant-young","hWXvaAM0aM23YUM6t1Syk0u3W8ZS2mMpWnwOm70buAY",[949,958,966],{"title":950,"description":951,"heroImage":952,"category":227,"date":953,"authors":954,"slug":957,"externalUrl":231},"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",[955,956],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":959,"description":960,"heroImage":961,"category":227,"date":962,"authors":963,"slug":965,"externalUrl":231},"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",[964],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":967,"description":968,"heroImage":969,"category":227,"date":970,"authors":971,"slug":973,"externalUrl":231},"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",[972],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":975},[976,990,1002,1014],{"id":977,"categories":978,"header":980,"text":981,"button":982,"image":987},"ai-modernization",[979],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":983,"config":984},"Get your AI maturity score",{"href":985,"dataGaName":986,"dataGaLocation":462},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":988},{"src":989},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":991,"categories":992,"header":994,"text":981,"button":995,"image":999},"devops-modernization",[993,798],"product","Are you just managing tools or shipping innovation?",{"text":996,"config":997},"Get your DevOps maturity score",{"href":998,"dataGaName":986,"dataGaLocation":462},"/assessments/devops-modernization-assessment/",{"config":1000},{"src":1001},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1003,"categories":1004,"header":1006,"text":981,"button":1007,"image":1011},"security-modernization",[1005],"security","Are you trading speed for security?",{"text":1008,"config":1009},"Get your security maturity score",{"href":1010,"dataGaName":986,"dataGaLocation":462},"/assessments/security-modernization-assessment/",{"config":1012},{"src":1013},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1015,"paths":1016,"header":1019,"text":1020,"button":1021,"image":1026},"github-azure-migration",[1017,1018],"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":1022,"config":1023},"See how GitLab compares to GitHub",{"href":1024,"dataGaName":1025,"dataGaLocation":462},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1027},{"src":1001},{"header":1029,"blurb":1030,"button":1031,"secondaryButton":1036},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1032,"config":1033},"Get your free trial",{"href":1034,"dataGaName":261,"dataGaLocation":1035},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":735,"config":1037},{"href":587,"dataGaName":266,"dataGaLocation":1035},1786803752086]