[{"data":1,"prerenderedAt":1115},["ShallowReactive",2],{"/blog/how-were-building-up-performance-testing-of-gitlab":3,"navigation-en-us":327,"banner-en-us":755,"footer-en-us":765,"blog-post-authors-en-us-Grant Young":1010,"blog-related-posts-en-us-how-were-building-up-performance-testing-of-gitlab":1025,"blog-promotions-en-us":1051,"next-steps-en-us":1105},{"id":4,"title":5,"authors":6,"body":8,"category":305,"date":306,"description":307,"extension":308,"externalUrl":309,"faq":309,"featured":310,"heroImage":311,"meta":312,"navigation":313,"path":314,"seo":315,"slug":320,"stem":321,"tags":322,"template":325,"updatedDate":309,"__hash__":326},"blogPosts/en-us/blog/how-were-building-up-performance-testing-of-gitlab.md","How our QA team leverages GitLab’s performance testing tool (and you can too)",[7],"Grant Young",{"type":9,"value":10,"toc":295},"minimark",[11,15,25,34,37,42,45,54,57,60,64,67,76,125,138,142,167,179,193,197,211,220,224,239,250,258,262,265,273,281],[12,13,14],"p",{},"We’ve set up several initiatives aimed at testing and improving the performance of GitLab, which is why the Quality team built a new tool to test GitLab's performance.",[12,16,17,18,24],{},"Performance testing is an involved process and distinct from other testing disciplines. The strategies and tooling in this space are specialized and require dedicated resources to achieve results. When I joined the company and became the first member of this team, the task was to expand our nascent performance efforts to a much larger scale. For this, we needed to build out a new tool that we aptly named the ",[19,20,23],"a",{"href":21,"rel":22},"https://gitlab.com/gitlab-org/quality/performance",[],"GitLab Performance tool"," (GPT).",[12,26,27,28,33],{},"We're happy to announce the general release of ",[19,29,32],{"href":30,"rel":31},"https://gitlab.com/gitlab-org/quality/performance/-/releases",[],"GPT",". In this blog post, we'll share how GPT is used to performance test GitLab, and how you can use it as well to test your own environments.",[12,35,36],{},"However, before we get into what the GPT is, we need to first touch on what we use it with.",[38,39,41],"h2",{"id":40},"reference-architectures-and-test-data","Reference Architectures and test data",[12,43,44],{},"In our experience, the challenging part of performance testing isn’t actually to do with the testing itself, but instead configuring the right environments and data to test against.",[12,46,47,48,53],{},"As such, one of the initiatives we’ve been driving is the design of several ",[19,49,52],{"href":50,"rel":51},"https://docs.gitlab.com/administration/reference_architectures/#available-reference-architectures",[],"GitLab Reference Architectures"," that can handle large numbers of users. We wanted to create these architectures as a way to standardize our recommended configurations to ensure we were presenting customers with options for performant, scalable, and highly available GitLab setups.",[12,55,56],{},"In order to create a tool like this, we needed to add realistic data into these environments to test against, e.g., large projects with commits and merge requests. As a first iteration, we started with our very own GitLab project.",[12,58,59],{},"Once we got our environments running and configured we were ready to test them with the GPT.",[38,61,63],{"id":62},"what-is-the-gitlab-performance-tool-gpt","What is the GitLab Performance tool (GPT)?",[12,65,66],{},"The GPT can be used to run numerous load tests to verify the performance of any GitLab environment. All that’s required is to a knowledge of what throughput the intended environment can handle (as requests per second) and to ensure that the environment has the necessary data prepared.",[12,68,69,70,75],{},"The GPT is built upon one of the leading tools in the industry, ",[19,71,74],{"href":72,"rel":73},"https://k6.io/",[],"k6",". Here are some examples of what the GPT provides:",[77,78,79,89,97,105,111],"ul",{},[80,81,82,83,88],"li",{},"A broad test suite that comes out-of-the-box and covers various endpoints across the GitLab product with added ability to add your own custom tests as desired. ",[19,84,87],{"href":85,"rel":86},"https://gitlab.com/gitlab-org/quality/performance/-/wikis/current-test-details",[],"See the latest out-of-the-box test details"," with more being added frequently.",[80,90,91,96],{},[19,92,95],{"href":93,"rel":94},"https://gitlab.com/gitlab-org/quality/performance/-/blob/master/docs/k6.md#options",[],"Options"," for customizing test runs, such as specifying desired GitLab environment data or defining what throughput to use with default examples given.",[80,98,99,104],{},[19,100,103],{"href":101,"rel":102},"https://gitlab.com/gitlab-org/quality/performance/-/blob/master/docs/k6.md#running-the-tests-with-the-tool",[],"Ability to run multiple tests sequentially as well as be selective about which are chosen",".",[80,106,107,104],{},[19,108,110],{"href":101,"rel":109},[],"Enhanced reporting and logging",[80,112,113,118,119,124],{},[19,114,117],{"href":115,"rel":116},"https://gitlab.com/gitlab-org/quality/performance/-/blob/master/docs/k6.md#test-thresholds",[],"Built-in test success thresholds"," based on ",[19,120,123],{"href":121,"rel":122},"https://en.wikipedia.org/wiki/Time_to_first_byte",[],"time to first byte",", throughput achieved and successful responses.",[12,126,127,128,133,134,137],{},"The talented team at ",[19,129,132],{"href":130,"rel":131},"https://loadimpact.com/",[],"Load Impact"," created ",[19,135,74],{"href":72,"rel":136},[],", which is the core of the GPT. We realized quickly that we didn’t need to reinvent the wheel because k6 met most of our needs: It is written in Go, so is very performant and is an open source solution. Thanks to the team for not only developing k6 but also for reaching out to us soon after we started to collaborate.",[38,139,141],{"id":140},"how-we-use-gpt","How we use GPT",[12,143,144,145,149,150,155,156,161,162,104],{},"We use the GPT in several automated ",[19,146,148],{"href":147},"/blog/guide-to-ci-cd-pipelines/","GitLab CI pipelines"," for quick feedback on how GitLab is performing. The CI pipelines typically run daily or weekly against our reference architecture environments, which themselves are running on the latest pre-release code. We review the test results as they come in and then investigate any failures. In line with our ",[19,151,154],{"href":152,"rel":153},"https://handbook.gitlab.com/handbook/values/#transparency",[],"Transparency value",", we also publish all of the ",[19,157,160],{"href":158,"rel":159},"https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest",[],"latest results"," for anyone to view on the ",[19,163,166],{"href":164,"rel":165},"https://gitlab.com/gitlab-org/quality/performance/-/wikis/home",[],"GPT wiki",[12,168,169,170,175,176,104],{},"The GPT is also used in a comparison test pipeline to see how GitLab’s performance changes in every release cycle. These results are important because they show the whole picture of our performance evolution. The ",[19,171,174],{"href":172,"rel":173},"https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/GitLab-Versions",[],"benchmark comparison results"," are also available on the ",[19,177,166],{"href":164,"rel":178},[],[12,180,181,182,187,188,104],{},"By using the GPT, we’ve been able to identify several performance pain points of GitLab and collaborate with our dev teams to prioritize improvements. The process has been fruitful so far and we’re excited to already see improvements in the performance numbers with each release of GitLab. The 12.6 release for example showed ",[19,183,186],{"href":184,"rel":185},"https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/GitLab-Versions#comparisions",[],"several notable improvements across the board",", one even as high as a 92% reduction! You can see the issues we've raised so far through this work over on our ",[19,189,192],{"href":190,"rel":191},"https://gitlab.com/gitlab-org/gitlab/issues?scope=all&utf8=%E2%9C%93&state=all&label_name%5B%5D=Quality%3Aperformance-issues",[],"issue tracker",[38,194,196],{"id":195},"how-you-can-use-gpt","How you can use GPT",[12,198,199,200,205,206,104],{},"We decided early that we wanted to follow the same open source principles as our main product, so we build the GPT with all users in mind rather than making it a strictly internal tool. So not only do we let others use it, we encourage it! This is beneficial for us and customers, as we receive feedback from diverse viewpoints that we hadn’t considered. Some examples of this are ",[19,201,204],{"href":202,"rel":203},"https://gitlab.com/gitlab-org/quality/performance/issues/172",[],"improving the recommended spec guidelines based on throughput"," or ",[19,207,210],{"href":208,"rel":209},"https://gitlab.com/gitlab-org/quality/performance/issues/106",[],"making it easier for users who have private clouds to use the GPT offline",[12,212,213,214,219],{},"If you want to use the GPT for yourself, the best place to start is with its ",[19,215,218],{"href":216,"rel":217},"https://gitlab.com/gitlab-org/quality/performance#documentation",[],"documentation",". As mentioned earlier, most of the effort to use the GPT is preparing the intended environment. The docs will take you through this along with how to use the tool itself.",[38,221,223],{"id":222},"the-gpt-in-action","The GPT in action",[12,225,226,227,232,233,238],{},"Finally after writing all about the GPT we should actually show it in action. Here's how it looks when running a load test for the ",[19,228,231],{"href":229,"rel":230},"https://docs.gitlab.com/api/groups/#list-a-groups-projects",[],"List Group Projects API"," against our ",[19,234,237],{"href":235,"rel":236},"https://docs.gitlab.com/administration/reference_architectures/10k_users/",[],"10k Reference Architecture",":",[12,240,241],{},[19,242,245],{"href":243,"rel":244},"https://asciinema.org/a/O96Wc5fyxvLb1IDyviTwbujg8?autoplay=1",[],[246,247],"img",{"alt":248,"src":249},"asciicast","https://asciinema.org/a/O96Wc5fyxvLb1IDyviTwbujg8.svg",[12,251,252,253,257],{},"Read the GPT ",[19,254,218],{"href":255,"rel":256},"https://gitlab.com/gitlab-org/quality/performance/blob/master/docs/k6.md#test-output-and-results",[]," for more details on output and results.",[38,259,261],{"id":260},"whats-next","What’s next?",[12,263,264],{},"Our aim is to make GitLab’s performance best in class. This is only the start of our performance testing journey with GPT and we are excited about the additional ways we can continue to help improve the customer experience.",[12,266,267,272],{},[19,268,271],{"href":269,"rel":270},"https://gitlab.com/gitlab-org/quality/performance/issues",[],"Some examples of our plans for the next few releases"," include expanding test coverage to more of GitLab’s features and entry points (API, Web, Git) and expanding our work on the reference architectures, test data, and user behavior patterns to be as representative and realistic as possible.",[12,274,275,276,280],{},"Share your feedback and/or suggestions on GPT here or on our ",[19,277,279],{"href":21,"rel":278},[],"GPT project","! We welcome your ideas or contributions.",[12,282,283,284,289,290,104],{},"Cover image by ",[19,285,288],{"href":286,"rel":287},"https://unsplash.com/@tvick?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Taylor Vick"," on ",[19,291,294],{"href":292,"rel":293},"https://unsplash.com/s/photos/server?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Unsplash",{"title":296,"searchDepth":297,"depth":297,"links":298},"",2,[299,300,301,302,303,304],{"id":40,"depth":297,"text":41},{"id":62,"depth":297,"text":63},{"id":140,"depth":297,"text":141},{"id":195,"depth":297,"text":196},{"id":222,"depth":297,"text":223},{"id":260,"depth":297,"text":261},"engineering","2020-02-18","We built our open source GitLab Performance tool to evaluate pain points and implement solutions on every GitLab environment.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681087/Blog/Hero%20Images/performance-server-front.jpg",{},true,"/en-us/blog/how-were-building-up-performance-testing-of-gitlab",{"title":316,"description":307,"ogTitle":316,"ogDescription":307,"noIndex":310,"ogImage":311,"ogUrl":317,"ogSiteName":318,"ogType":319,"canonicalUrls":317},"How GitLab's QA Team Leverages Performance Testing Tools","https://about.gitlab.com/blog/how-were-building-up-performance-testing-of-gitlab","https://about.gitlab.com","article","how-were-building-up-performance-testing-of-gitlab","en-us/blog/how-were-building-up-performance-testing-of-gitlab",[323,324],"performance","testing","BlogPost","J-BpVFiE0fgklDFMOpzJruG0hABg6KN1YXopfB32TUU",{"logo":328,"freeTrial":333,"sales":338,"login":343,"items":348,"search":675,"minimal":706,"duo":725,"switchNav":734,"pricingDeployment":745},{"config":329},{"href":330,"dataGaName":331,"dataGaLocation":332},"/","gitlab logo","header",{"text":334,"config":335},"Get free trial",{"href":336,"dataGaName":337,"dataGaLocation":332},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":339,"config":340},"Request a demo",{"href":341,"dataGaName":342,"dataGaLocation":332},"/sales/?contact-topic=request-demo","sales",{"text":344,"config":345},"Sign in",{"href":346,"dataGaName":347,"dataGaLocation":332},"https://gitlab.com/users/sign_in/","sign in",[349,378,478,483,597,653],{"text":350,"config":351,"menu":353},"Platform",{"dataNavLevelOne":352},"platform",{"type":354,"columns":355},"cards",[356,362,370],{"title":350,"description":357,"link":358},"The intelligent orchestration platform for DevSecOps",{"text":359,"config":360},"Explore our Platform",{"href":361,"dataGaName":352,"dataGaLocation":332},"/platform/",{"title":363,"description":364,"link":365},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":366,"config":367},"Meet GitLab Duo",{"href":368,"dataGaName":369,"dataGaLocation":332},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":371,"description":372,"link":373},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":374,"config":375},"Learn more",{"href":376,"dataGaName":377,"dataGaLocation":332},"/why-gitlab/","why gitlab",{"text":379,"left":313,"config":380,"menu":382},"Product",{"dataNavLevelOne":381},"solutions",{"type":383,"link":384,"columns":388,"feature":457},"lists",{"text":385,"config":386},"View all Solutions",{"href":387,"dataGaName":381,"dataGaLocation":332},"/solutions/",[389,413,436],{"title":390,"description":391,"link":392,"items":397},"Automation","CI/CD and automation to accelerate deployment",{"config":393},{"icon":394,"href":395,"dataGaName":396,"dataGaLocation":332},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[398,402,405,409],{"text":399,"config":400},"CI/CD",{"href":401,"dataGaLocation":332,"dataGaName":399},"/solutions/continuous-integration/",{"text":363,"config":403},{"href":368,"dataGaLocation":332,"dataGaName":404},"gitlab duo agent platform - product menu",{"text":406,"config":407},"Source Code Management",{"href":408,"dataGaLocation":332,"dataGaName":406},"/solutions/source-code-management/",{"text":410,"config":411},"Automated Software Delivery",{"href":395,"dataGaLocation":332,"dataGaName":412},"Automated software delivery",{"title":414,"description":415,"link":416,"items":421},"Security","Deliver code faster without compromising security",{"config":417},{"href":418,"dataGaName":419,"dataGaLocation":332,"icon":420},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[422,426,431],{"text":423,"config":424},"Application Security Testing",{"href":418,"dataGaName":425,"dataGaLocation":332},"Application security testing",{"text":427,"config":428},"Software Supply Chain Security",{"href":429,"dataGaLocation":332,"dataGaName":430},"/solutions/supply-chain/","Software supply chain security",{"text":432,"config":433},"Software Compliance",{"href":434,"dataGaName":435,"dataGaLocation":332},"/solutions/software-compliance/","software compliance",{"title":437,"link":438,"items":443},"Measurement",{"config":439},{"icon":440,"href":441,"dataGaName":442,"dataGaLocation":332},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[444,448,452],{"text":445,"config":446},"Visibility & Measurement",{"href":441,"dataGaLocation":332,"dataGaName":447},"Visibility and Measurement",{"text":449,"config":450},"Value Stream Management",{"href":451,"dataGaLocation":332,"dataGaName":449},"/solutions/value-stream-management/",{"text":453,"config":454},"Analytics & Insights",{"href":455,"dataGaLocation":332,"dataGaName":456},"/solutions/analytics-and-insights/","Analytics and insights",{"title":458,"type":383,"items":459},"GitLab for",[460,466,472],{"text":461,"config":462},"Enterprise",{"icon":463,"href":464,"dataGaLocation":332,"dataGaName":465},"Building","/enterprise/","enterprise",{"text":467,"config":468},"Small Business",{"icon":469,"href":470,"dataGaLocation":332,"dataGaName":471},"Work","/small-business/","small business",{"text":473,"config":474},"Public Sector",{"icon":475,"href":476,"dataGaLocation":332,"dataGaName":477},"Organization","/solutions/public-sector/","public sector",{"text":479,"config":480},"Pricing",{"href":481,"dataGaName":482,"dataGaLocation":332,"dataNavLevelOne":482},"/pricing/","pricing",{"text":484,"config":485,"menu":487},"Resources",{"dataNavLevelOne":486},"resources",{"type":383,"link":488,"columns":492,"feature":586},{"text":489,"config":490},"View all resources",{"href":491,"dataGaName":486,"dataGaLocation":332},"/resources/",[493,526,553],{"title":494,"items":495},"Getting started",[496,501,506,511,516,521],{"text":497,"config":498},"Install",{"href":499,"dataGaName":500,"dataGaLocation":332},"/install/","install",{"text":502,"config":503},"Quick start guides",{"href":504,"dataGaName":505,"dataGaLocation":332},"/get-started/","quick setup checklists",{"text":507,"config":508},"Learn",{"href":509,"dataGaLocation":332,"dataGaName":510},"https://university.gitlab.com/","learn",{"text":512,"config":513},"Product documentation",{"href":514,"dataGaName":515,"dataGaLocation":332},"https://docs.gitlab.com/","product documentation",{"text":517,"config":518},"Best practice videos",{"href":519,"dataGaName":520,"dataGaLocation":332},"/getting-started-videos/","best practice videos",{"text":522,"config":523},"Integrations",{"href":524,"dataGaName":525,"dataGaLocation":332},"/integrations/","integrations",{"title":527,"items":528},"Discover",[529,534,539,544,548],{"text":530,"config":531},"Customer success stories",{"href":532,"dataGaName":533,"dataGaLocation":332},"/customers/","customer success stories",{"text":535,"config":536},"Blog",{"href":537,"dataGaName":538,"dataGaLocation":332},"/blog/","blog",{"text":540,"config":541},"Demo Hub",{"href":542,"dataGaName":543,"dataGaLocation":332},"/demo-hub/","demo hub",{"text":545,"config":546},"The Source",{"href":547,"dataGaName":538,"dataGaLocation":332},"/the-source/",{"text":549,"config":550},"Remote",{"href":551,"dataGaName":552,"dataGaLocation":332},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":554,"items":555},"Connect",[556,561,566,571,576,581],{"text":557,"config":558},"GitLab Services",{"href":559,"dataGaName":560,"dataGaLocation":332},"/services/","services",{"text":562,"config":563},"Contribute",{"href":564,"dataGaName":565,"dataGaLocation":332},"https://contributors.gitlab.com","contribute",{"text":567,"config":568},"Community",{"href":569,"dataGaName":570,"dataGaLocation":332},"/community/","community",{"text":572,"config":573},"Forum",{"href":574,"dataGaName":575,"dataGaLocation":332},"https://forum.gitlab.com/","forum",{"text":577,"config":578},"Events",{"href":579,"dataGaName":580,"dataGaLocation":332},"/events/","events",{"text":582,"config":583},"Partners",{"href":584,"dataGaName":585,"dataGaLocation":332},"/partners/","partners",{"config":587,"title":590,"text":591,"link":592},{"background":588,"textColor":589},"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":593,"config":594},"Read the latest",{"href":595,"dataGaName":596,"dataGaLocation":332},"/whats-new/","whats new",{"text":598,"config":599,"menu":601},"Company",{"dataNavLevelOne":600},"company",{"type":383,"columns":602},[603],{"items":604},[605,610,616,618,623,628,633,638,643,648],{"text":606,"config":607},"About",{"href":608,"dataGaName":609,"dataGaLocation":332},"/company/","about",{"text":611,"config":612,"footerGa":615},"Jobs",{"href":613,"dataGaName":614,"dataGaLocation":332},"/jobs/","jobs",{"dataGaName":614},{"text":577,"config":617},{"href":579,"dataGaName":580,"dataGaLocation":332},{"text":619,"config":620},"Leadership",{"href":621,"dataGaName":622,"dataGaLocation":332},"/company/team/e-group/","leadership",{"text":624,"config":625},"Handbook",{"href":626,"dataGaName":627,"dataGaLocation":332},"https://handbook.gitlab.com/","handbook",{"text":629,"config":630},"Investor relations",{"href":631,"dataGaName":632,"dataGaLocation":332},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":634,"config":635},"Trust Center",{"href":636,"dataGaName":637,"dataGaLocation":332},"/security/","trust center",{"text":639,"config":640},"AI Transparency Center",{"href":641,"dataGaName":642,"dataGaLocation":332},"/ai-transparency-center/","ai transparency center",{"text":644,"config":645},"Newsletter",{"href":646,"dataGaName":647,"dataGaLocation":332},"/company/contact/#contact-forms","newsletter",{"text":649,"config":650},"Press",{"href":651,"dataGaName":652,"dataGaLocation":332},"/press/","press",{"text":654,"config":655,"menu":656},"Contact us",{"dataNavLevelOne":600},{"type":383,"columns":657},[658],{"items":659},[660,665,670],{"text":661,"config":662},"Talk to sales",{"href":663,"dataGaName":664,"dataGaLocation":332},"/sales/","talk to sales",{"text":666,"config":667},"Support portal",{"href":668,"dataGaName":669,"dataGaLocation":332},"https://support.gitlab.com/hc/en-us","support portal",{"text":671,"config":672},"Customer portal",{"href":673,"dataGaName":674,"dataGaLocation":332},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":676,"login":677,"suggestions":684},"Close",{"text":678,"link":679},"To search repositories and projects, login to",{"text":680,"config":681},"gitlab.com",{"href":346,"dataGaName":682,"dataGaLocation":683},"search login","search",{"text":685,"default":686},"Suggestions",[687,689,693,695,699,703],{"text":363,"config":688},{"href":368,"dataGaName":363,"dataGaLocation":683},{"text":690,"config":691},"Code Suggestions (AI)",{"href":692,"dataGaName":690,"dataGaLocation":683},"/solutions/code-suggestions/",{"text":399,"config":694},{"href":401,"dataGaName":399,"dataGaLocation":683},{"text":696,"config":697},"GitLab on AWS",{"href":698,"dataGaName":696,"dataGaLocation":683},"/partners/technology-partners/aws/",{"text":700,"config":701},"GitLab on Google Cloud",{"href":702,"dataGaName":700,"dataGaLocation":683},"/partners/technology-partners/google-cloud-platform/",{"text":704,"config":705},"Why GitLab?",{"href":376,"dataGaName":704,"dataGaLocation":683},{"freeTrial":707,"mobileIcon":712,"desktopIcon":717,"secondaryButton":720},{"text":708,"config":709},"Start free trial",{"href":710,"dataGaName":337,"dataGaLocation":711},"https://gitlab.com/-/trials/new/","nav",{"altText":713,"config":714},"Gitlab Icon",{"src":715,"dataGaName":716,"dataGaLocation":711},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":713,"config":718},{"src":719,"dataGaName":716,"dataGaLocation":711},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":721,"config":722},"Get Started",{"href":723,"dataGaName":724,"dataGaLocation":711},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":726,"mobileIcon":730,"desktopIcon":732},{"text":727,"config":728},"Learn more about GitLab Duo",{"href":368,"dataGaName":729,"dataGaLocation":711},"gitlab duo",{"altText":713,"config":731},{"src":715,"dataGaName":716,"dataGaLocation":711},{"altText":713,"config":733},{"src":719,"dataGaName":716,"dataGaLocation":711},{"button":735,"mobileIcon":740,"desktopIcon":742},{"text":736,"config":737},"/switch",{"href":738,"dataGaName":739,"dataGaLocation":711},"#contact","switch",{"altText":713,"config":741},{"src":715,"dataGaName":716,"dataGaLocation":711},{"altText":713,"config":743},{"src":744,"dataGaName":716,"dataGaLocation":711},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":746,"mobileIcon":751,"desktopIcon":753},{"text":747,"config":748},"Back to pricing",{"href":481,"dataGaName":749,"dataGaLocation":711,"icon":750},"back to pricing","GoBack",{"altText":713,"config":752},{"src":715,"dataGaName":716,"dataGaLocation":711},{"altText":713,"config":754},{"src":719,"dataGaName":716,"dataGaLocation":711},{"title":756,"titleMobile":757,"button":758,"config":763},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":374,"config":759},{"href":760,"dataGaName":761,"dataGaLocation":762},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":764,"disabled":310},"release",{"data":766},{"text":767,"source":768,"edit":774,"contribute":779,"config":784,"items":789,"minimal":999},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":769,"config":770},"View page source",{"href":771,"dataGaName":772,"dataGaLocation":773},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":775,"config":776},"Edit this page",{"href":777,"dataGaName":778,"dataGaLocation":773},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":780,"config":781},"Please contribute",{"href":782,"dataGaName":783,"dataGaLocation":773},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":785,"facebook":786,"youtube":787,"linkedin":788},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[790,837,891,935,967],{"title":479,"links":791,"subMenu":806},[792,796,801],{"text":793,"config":794},"View plans",{"href":481,"dataGaName":795,"dataGaLocation":773},"view plans",{"text":797,"config":798},"Why Premium?",{"href":799,"dataGaName":800,"dataGaLocation":773},"/pricing/premium/","why premium",{"text":802,"config":803},"Why Ultimate?",{"href":804,"dataGaName":805,"dataGaLocation":773},"/pricing/ultimate/","why ultimate",[807],{"title":808,"links":809},"Contact Us",[810,813,815,817,822,827,832],{"text":811,"config":812},"Contact sales",{"href":663,"dataGaName":342,"dataGaLocation":773},{"text":666,"config":814},{"href":668,"dataGaName":669,"dataGaLocation":773},{"text":671,"config":816},{"href":673,"dataGaName":674,"dataGaLocation":773},{"text":818,"config":819},"Status",{"href":820,"dataGaName":821,"dataGaLocation":773},"https://status.gitlab.com/","status",{"text":823,"config":824},"Terms of use",{"href":825,"dataGaName":826,"dataGaLocation":773},"/terms/","terms of use",{"text":828,"config":829},"Privacy statement",{"href":830,"dataGaName":831,"dataGaLocation":773},"/privacy/","privacy statement",{"text":833,"config":834},"Cookie preferences",{"dataGaName":835,"dataGaLocation":773,"id":836,"isOneTrustButton":313},"cookie preferences","ot-sdk-btn",{"title":379,"links":838,"subMenu":847},[839,843],{"text":840,"config":841},"DevSecOps platform",{"href":361,"dataGaName":842,"dataGaLocation":773},"devsecops platform",{"text":844,"config":845},"AI-Assisted Development",{"href":368,"dataGaName":846,"dataGaLocation":773},"ai-assisted development",[848],{"title":849,"links":850},"Topics",[851,856,861,866,871,876,881,886],{"text":852,"config":853},"CICD",{"href":854,"dataGaName":855,"dataGaLocation":773},"/topics/ci-cd/","cicd",{"text":857,"config":858},"GitOps",{"href":859,"dataGaName":860,"dataGaLocation":773},"/topics/gitops/","gitops",{"text":862,"config":863},"DevOps",{"href":864,"dataGaName":865,"dataGaLocation":773},"/topics/devops/","devops",{"text":867,"config":868},"Version Control",{"href":869,"dataGaName":870,"dataGaLocation":773},"/topics/version-control/","version control",{"text":872,"config":873},"DevSecOps",{"href":874,"dataGaName":875,"dataGaLocation":773},"/topics/devsecops/","devsecops",{"text":877,"config":878},"Cloud Native",{"href":879,"dataGaName":880,"dataGaLocation":773},"/topics/cloud-native/","cloud native",{"text":882,"config":883},"AI for Coding",{"href":884,"dataGaName":885,"dataGaLocation":773},"/topics/devops/ai-for-coding/","ai for coding",{"text":887,"config":888},"Agentic AI",{"href":889,"dataGaName":890,"dataGaLocation":773},"/topics/agentic-ai/","agentic ai",{"title":892,"links":893},"Solutions",[894,896,898,903,907,910,914,917,919,922,925,930],{"text":423,"config":895},{"href":418,"dataGaName":423,"dataGaLocation":773},{"text":412,"config":897},{"href":395,"dataGaName":396,"dataGaLocation":773},{"text":899,"config":900},"Agile development",{"href":901,"dataGaName":902,"dataGaLocation":773},"/solutions/agile-delivery/","agile delivery",{"text":904,"config":905},"SCM",{"href":408,"dataGaName":906,"dataGaLocation":773},"source code management",{"text":852,"config":908},{"href":401,"dataGaName":909,"dataGaLocation":773},"continuous integration & delivery",{"text":911,"config":912},"Value stream management",{"href":451,"dataGaName":913,"dataGaLocation":773},"value stream management",{"text":857,"config":915},{"href":916,"dataGaName":860,"dataGaLocation":773},"/solutions/gitops/",{"text":461,"config":918},{"href":464,"dataGaName":465,"dataGaLocation":773},{"text":920,"config":921},"Small business",{"href":470,"dataGaName":471,"dataGaLocation":773},{"text":923,"config":924},"Public sector",{"href":476,"dataGaName":477,"dataGaLocation":773},{"text":926,"config":927},"Education",{"href":928,"dataGaName":929,"dataGaLocation":773},"/solutions/education/","education",{"text":931,"config":932},"Financial services",{"href":933,"dataGaName":934,"dataGaLocation":773},"/solutions/finance/","financial services",{"title":484,"links":936},[937,939,941,943,946,948,951,953,955,957,959,961,963,965],{"text":497,"config":938},{"href":499,"dataGaName":500,"dataGaLocation":773},{"text":502,"config":940},{"href":504,"dataGaName":505,"dataGaLocation":773},{"text":507,"config":942},{"href":509,"dataGaName":510,"dataGaLocation":773},{"text":512,"config":944},{"href":514,"dataGaName":945,"dataGaLocation":773},"docs",{"text":535,"config":947},{"href":537,"dataGaName":538,"dataGaLocation":773},{"text":949,"config":950},"What's new",{"href":595,"dataGaName":596,"dataGaLocation":773},{"text":530,"config":952},{"href":532,"dataGaName":533,"dataGaLocation":773},{"text":549,"config":954},{"href":551,"dataGaName":552,"dataGaLocation":773},{"text":557,"config":956},{"href":559,"dataGaName":560,"dataGaLocation":773},{"text":562,"config":958},{"href":564,"dataGaName":565,"dataGaLocation":773},{"text":567,"config":960},{"href":569,"dataGaName":570,"dataGaLocation":773},{"text":572,"config":962},{"href":574,"dataGaName":575,"dataGaLocation":773},{"text":577,"config":964},{"href":579,"dataGaName":580,"dataGaLocation":773},{"text":582,"config":966},{"href":584,"dataGaName":585,"dataGaLocation":773},{"title":598,"links":968},[969,971,973,975,977,979,983,988,990,992,994],{"text":606,"config":970},{"href":608,"dataGaName":600,"dataGaLocation":773},{"text":611,"config":972},{"href":613,"dataGaName":614,"dataGaLocation":773},{"text":619,"config":974},{"href":621,"dataGaName":622,"dataGaLocation":773},{"text":624,"config":976},{"href":626,"dataGaName":627,"dataGaLocation":773},{"text":629,"config":978},{"href":631,"dataGaName":632,"dataGaLocation":773},{"text":980,"config":981},"Sustainability",{"href":982,"dataGaName":980,"dataGaLocation":773},"/sustainability/",{"text":984,"config":985},"Diversity, inclusion and belonging (DIB)",{"href":986,"dataGaName":987,"dataGaLocation":773},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":634,"config":989},{"href":636,"dataGaName":637,"dataGaLocation":773},{"text":644,"config":991},{"href":646,"dataGaName":647,"dataGaLocation":773},{"text":649,"config":993},{"href":651,"dataGaName":652,"dataGaLocation":773},{"text":995,"config":996},"Modern Slavery Transparency Statement",{"href":997,"dataGaName":998,"dataGaLocation":773},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1000},[1001,1004,1007],{"text":1002,"config":1003},"Terms",{"href":825,"dataGaName":826,"dataGaLocation":773},{"text":1005,"config":1006},"Cookies",{"dataGaName":835,"dataGaLocation":773,"id":836,"isOneTrustButton":313},{"text":1008,"config":1009},"Privacy",{"href":830,"dataGaName":831,"dataGaLocation":773},[1011],{"id":1012,"title":7,"body":309,"config":1013,"content":1015,"description":309,"extension":1019,"meta":1020,"navigation":313,"path":1021,"seo":1022,"stem":1023,"__hash__":1024},"blogAuthors/en-us/blog/authors/grant-young.yml",{"template":1014},"BlogAuthor",{"name":7,"config":1016},{"headshot":1017,"ctfId":1018},"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",[1026,1035,1043],{"title":1027,"description":1028,"heroImage":1029,"category":305,"date":1030,"authors":1031,"slug":1034,"externalUrl":309},"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",[1032,1033],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1036,"description":1037,"heroImage":1038,"category":305,"date":1039,"authors":1040,"slug":1042,"externalUrl":309},"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",[1041],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1044,"description":1045,"heroImage":1046,"category":305,"date":1047,"authors":1048,"slug":1050,"externalUrl":309},"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",[1049],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1052},[1053,1067,1079,1091],{"id":1054,"categories":1055,"header":1057,"text":1058,"button":1059,"image":1064},"ai-modernization",[1056],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1060,"config":1061},"Get your AI maturity score",{"href":1062,"dataGaName":1063,"dataGaLocation":538},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1065},{"src":1066},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1068,"categories":1069,"header":1071,"text":1058,"button":1072,"image":1076},"devops-modernization",[1070,875],"product","Are you just managing tools or shipping innovation?",{"text":1073,"config":1074},"Get your DevOps maturity score",{"href":1075,"dataGaName":1063,"dataGaLocation":538},"/assessments/devops-modernization-assessment/",{"config":1077},{"src":1078},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1080,"categories":1081,"header":1083,"text":1058,"button":1084,"image":1088},"security-modernization",[1082],"security","Are you trading speed for security?",{"text":1085,"config":1086},"Get your security maturity score",{"href":1087,"dataGaName":1063,"dataGaLocation":538},"/assessments/security-modernization-assessment/",{"config":1089},{"src":1090},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1092,"paths":1093,"header":1096,"text":1097,"button":1098,"image":1103},"github-azure-migration",[1094,1095],"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":1099,"config":1100},"See how GitLab compares to GitHub",{"href":1101,"dataGaName":1102,"dataGaLocation":538},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1104},{"src":1078},{"header":1106,"blurb":1107,"button":1108,"secondaryButton":1113},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1109,"config":1110},"Get your free trial",{"href":1111,"dataGaName":337,"dataGaLocation":1112},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":811,"config":1114},{"href":663,"dataGaName":342,"dataGaLocation":1112},1786803752208]