[{"data":1,"prerenderedAt":881},["ShallowReactive",2],{"/topics/ci-cd/continuous-integration-best-practices":3,"navigation-en-us":193,"banner-en-us":618,"footer-en-us":628,"next-steps-en-us":871},{"id":4,"title":5,"body":6,"category":6,"config":6,"content":7,"description":6,"extension":185,"meta":186,"navigation":187,"path":188,"seo":189,"slug":6,"stem":191,"testContent":6,"type":6,"__hash__":192},"pages/en-us/topics/ci-cd/continuous-integration-best-practices/index.yml","",null,[8,22,29,109,131,183],{"type":9,"componentName":9,"componentContent":10},"CommonBreadcrumbs",{"crumbs":11},[12,16,20],{"title":13,"config":14},"Topics",{"href":15},"/topics/",{"title":17,"config":18},"CI/CD",{"href":19},"/topics/ci-cd/",{"title":21},"Continuous integration best practices",{"type":23,"componentName":23,"componentContent":24},"CommonArticleHero",{"title":21,"text":25,"config":26},"Continuous Integration (CI) is a software development practice where developers frequently integrate code into a shared repository, triggering automated builds and tests to detect issues early.\n",{"id":27,"twoColumns":28},"continuous-integration-best-practices",false,{"type":30,"componentName":30,"componentContent":31},"CommonSideNavigationWithTree",{"anchors":32,"components":67},{"text":33,"data":34},"On this page",[35,39,43,47,51,55,59,63],{"text":36,"config":37},"CI best practice: Commit early, commit often",{"href":38},"#ci-best-practice-commit-early-commit-often",{"text":40,"config":41},"CI best practice: Read the documentation (and then read it again)",{"href":42},"#ci-best-practice-read-the-documentation-and-then-read-it-again",{"text":44,"config":45},"CI best practice: Optimize pipeline stages",{"href":46},"#ci-best-practice-optimize-pipeline-stages",{"text":48,"config":49},"CI best practice: Make builds fast and simple",{"href":50},"#ci-best-practice-make-builds-fast-and-simple",{"text":52,"config":53},"CI best practice: Use failures to improve processes",{"href":54},"#ci-best-practice-use-failures-to-improve-processes",{"text":56,"config":57},"CI best practice: Test environment should mirror production",{"href":58},"#ci-best-practice-test-environment-should-mirror-production",{"text":60,"config":61},"Learn about best practices with GitLab CI",{"href":62},"#learn-about-best-practices-with-git-lab-ci",{"text":64,"config":65},"Conclusion",{"href":66},"#conclusion",[68,74,79,84,89,94,99,104],{"type":69,"componentName":69,"componentContent":70},"TopicsCopy",{"header":36,"text":71,"config":72},"It’s much easier to fix small problems than big problems, as a general rule. One of the biggest advantages of continuous integration is that code is integrated into a shared repository against other changes happening at the same time. If a development team commits code changes early and often, bugs are easier to identify because there is less code to sort through.\n\nBy testing in small batches, code quality is improved and teams can iterate more effectively.\n",{"id":73},"ci-best-practice-commit-early-commit-often",{"type":69,"componentName":69,"componentContent":75},{"header":40,"text":76,"config":77},"Continuous integration systems make documentation widely available, and this documentation can be very helpful long after you’ve implemented CI into your workflow. At GitLab, we have thorough [CI/CD documentation](https://docs.gitlab.com/ci/) that is updated frequently to reflect the latest processes.\n\nIn can be helpful to reference the documentation in READMEs or in other accessible formats. Encourage team members to read the documentation first, bookmark links, create FAQs, and incorporate these resources into onboarding for new team members.\n",{"id":78},"ci-best-practice-read-the-documentation-and-then-read-it-again",{"type":69,"componentName":69,"componentContent":80},{"header":44,"text":81,"config":82},"[CI pipelines](https://about.gitlab.com/topics/ci-cd/cicd-pipeline/) contain jobs and stages: Jobs are the activities that happen within a particular stage, and once all jobs pass, code moves to the next stage. To get the most out of your CI pipelines, optimize stages so that failures are easy to identify and fix.\n\nStages are an easy way to organize similar jobs, but there may be a few jobs in your pipeline that could safely run in an earlier stage without negatively impacting your project if they fail. Consider running these jobs in an earlier stage to [speed up CI pipelines](https://about.gitlab.com/blog/guide-to-ci-cd-pipelines/).\n",{"id":83},"ci-best-practice-optimize-pipeline-stages",{"type":69,"componentName":69,"componentContent":85},{"header":48,"text":86,"config":87},"Nothing slows down a pipeline like complexity. Focus on keeping builds fast, and the best way to do that is by keeping things as simple as possible.\n\nEvery minute taken off build times is a minute saved for each developer every time they commit. Since CI demands frequent commits, this time can add up. Martin Fowler discusses a guideline of the [ten-minute build](https://martinfowler.com/articles/continuousIntegration.html) that most modern projects can achieve. Since continuous integration demands frequent commits, saving time on commit builds can give developers a lot of time back.\n",{"id":88},"ci-best-practice-make-builds-fast-and-simple",{"type":69,"componentName":69,"componentContent":90},{"header":52,"text":91,"config":92},"Improvement is a process. When teams change their [response to failures](https://opensource.com/article/20/5/cicd-best-practices), it creates a cultural shift for continuous improvement. Instead of asking ***who*** caused the failure, ask ***what*** caused the failure. This means shifting from a blaming culture to a learning culture.\n\nIf teams are doing frequent commits, it becomes much easier to identify problems and solve them. If there are patterns in failed builds, look at the underlying causes. Are there non-code errors that are causing builds unnecessarily? Maybe incorporate an `allow_failure` [parameter](https://docs.gitlab.com/ci/yaml/#keywords). Look for ways to continually improve, make failures blameless, and look for causes (not culprits).\n",{"id":93},"ci-best-practice-use-failures-to-improve-processes",{"type":69,"componentName":69,"componentContent":95},{"header":56,"text":96,"config":97},"In continuous integration, every commit triggers a build. These builds then run tests to identify if something will be broken by the code changes you introduce. The [test pyramid](https://martinfowler.com/bliki/TestPyramid.html) is a way for developers to think of how to balance testing. End-to end testing is mostly used as a safeguard, with unit testing being used most often to identify errors. One important thing to keep in mind with testing is the environment. When the testing and production environments match, it means that developers can rely on the results and deploy with confidence.\n\nIn GitLab, [Review Apps](https://docs.gitlab.com/ci/review_apps/) put the new code into a production-like live environment to visualize code changes. This feature helps developers assess the impact of changes.\n\nContinuous integration helps developers deploy faster and get feedback sooner. Ultimately, the best continuous integration system is the one you actually use. Find [the right CI](https://about.gitlab.com/topics/ci-cd/choose-continuous-integration-tool/) for your needs and then incorporate these best practices to make the most of your new CI workflow.\n",{"id":98},"ci-best-practice-test-environment-should-mirror-production",{"type":69,"componentName":69,"componentContent":100},{"header":60,"text":101,"config":102},"\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/jeCF-dUFaZY\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\u003C/iframe>\n",{"id":103},"learn-about-best-practices-with-git-lab-ci",{"type":69,"componentName":69,"componentContent":105},{"header":64,"text":106,"config":107},"By embracing the outlined best practices, software development teams, including platform engineering teams and DevOps teams, can enhance their continuous integration efforts, ultimately streamlining their development and deployment process. As these practices become more embedded in your development environment, the alignment between engineering team goals and operational execution sharpens.\n\nRemember, the strongest continuous integration system is not just about the tools, but about how effectively your team utilizes them to foster improvements and achieve rapid, reliable results.\n",{"id":108},"conclusion",{"type":110,"componentName":110,"componentContent":111},"CommonFaq",{"header":112,"groups":113},"Frequently Asked Questions",[114],{"questions":115},[116,119,122,125,128],{"question":117,"answer":118},"What is the most important continuous integration best practice for development teams?","The most important CI best practice is to commit early and commit often. Small problems are easier to fix than big problems, and frequent commits make bugs easier to identify because there's less code to sort through. Testing in small batches improves code quality and helps teams iterate more effectively.",{"question":120,"answer":121},"How can teams optimize CI pipeline stages for better performance?","Teams should organize similar jobs into stages and consider moving jobs that can safely run earlier without negatively impacting projects. Once all jobs in a stage pass, code moves to the next stage. Optimizing stages makes failures easier to identify and fix while speeding up overall pipeline performance.",{"question":123,"answer":124},"What is the ten-minute build guideline and why does it matter?","The ten-minute build guideline, discussed by Martin Fowler, suggests most modern projects can achieve builds within ten minutes. This matters because every minute saved on build times multiplies across all developers and commits. Since CI demands frequent commits, reducing build time gives developers significant time back.",{"question":126,"answer":127},"How should teams respond to CI failures to improve processes?","Teams should shift from asking \"who caused the failure\" to \"what caused the failure,\" moving from a blaming culture to a learning culture. Look for patterns in failed builds and examine underlying causes. Consider incorporating allow_failure parameters for non-critical errors and make failures blameless learning opportunities.",{"question":129,"answer":130},"Why should test environments mirror production in continuous integration?","When testing and production environments match, developers can rely on test results and deploy with confidence. Every commit triggers builds that run tests to identify potential breaks from code changes. GitLab's Review Apps demonstrate this by putting new code into production-like live environments to visualize changes.",{"type":132,"componentName":132,"componentContent":133},"CommonResourcesContainer",{"header":134,"tabs":135},"Suggested Content",[136],{"name":137,"items":138,"config":182},"resources",[139,149,157,166,174],{"header":140,"type":141,"image":142,"link":145},"Burndown and burnup charts","Article",{"altText":140,"config":143},{"src":144},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749158619/Website/Topics/resources_18.jpg",{"text":146,"config":147},"Learn more",{"href":148,"icon":141,"modal":28},"https://docs.gitlab.com/user/project/milestones/burndown_and_burnup_charts/",{"header":150,"type":141,"image":151,"link":154},"Milestones as Agile sprints",{"altText":150,"config":152},{"src":153},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749158268/Website/Topics/resources_5.jpg",{"text":146,"config":155},{"href":156,"icon":141,"modal":28},"https://docs.gitlab.com/user/project/milestones/#milestones-as-agile-sprints",{"header":158,"type":159,"image":160,"link":163},"How to use GitLab for Agile software development","Web",{"altText":158,"config":161},{"src":162},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749158430/Website/Topics/alteryx_case_study.jpg",{"text":146,"config":164},{"href":165,"icon":159,"modal":28},"/blog/gitlab-for-agile-software-development/",{"header":167,"type":159,"image":168,"link":171},"How to use GitLab for Agile, CI/CD, GitOps, and more",{"altText":167,"config":169},{"src":170},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749159329/Website/Topics/conversicaimage.jpg",{"text":146,"config":172},{"href":173,"icon":159,"modal":28},"/blog/gitlab-for-cicd-agile-gitops-cloudnative/",{"header":175,"type":159,"image":176,"link":179},"How to use GitLab for Agile portfolio planning and project management",{"altText":175,"config":177},{"src":178},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749158681/Website/Topics/agilemultipleteams.jpg",{"text":146,"config":180},{"href":181,"icon":159,"modal":28},"/blog/gitlab-for-agile-portfolio-planning-project-management/",{"key":137},{"type":184,"componentName":184},"CommonNextSteps","yml",{},true,"/en-us/topics/ci-cd/continuous-integration-best-practices",{"title":21,"ogTitle":21,"description":190,"ogDescription":190},"Learn how to optimize your workflow with these continuous integration best practices.","en-us/topics/ci-cd/continuous-integration-best-practices/index","Gco2nOv5DcjOauXTv_1Dzps3EyEAfB4UvBfDYgwAwFA",{"logo":194,"freeTrial":199,"sales":204,"login":209,"items":214,"search":538,"minimal":569,"duo":588,"switchNav":597,"pricingDeployment":608},{"config":195},{"href":196,"dataGaName":197,"dataGaLocation":198},"/","gitlab logo","header",{"text":200,"config":201},"Get free trial",{"href":202,"dataGaName":203,"dataGaLocation":198},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":205,"config":206},"Request a demo",{"href":207,"dataGaName":208,"dataGaLocation":198},"/sales/?contact-topic=request-demo","sales",{"text":210,"config":211},"Sign in",{"href":212,"dataGaName":213,"dataGaLocation":198},"https://gitlab.com/users/sign_in/","sign in",[215,243,342,347,460,516],{"text":216,"config":217,"menu":219},"Platform",{"dataNavLevelOne":218},"platform",{"type":220,"columns":221},"cards",[222,228,236],{"title":216,"description":223,"link":224},"The intelligent orchestration platform for DevSecOps",{"text":225,"config":226},"Explore our Platform",{"href":227,"dataGaName":218,"dataGaLocation":198},"/platform/",{"title":229,"description":230,"link":231},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":232,"config":233},"Meet GitLab Duo",{"href":234,"dataGaName":235,"dataGaLocation":198},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":237,"description":238,"link":239},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":146,"config":240},{"href":241,"dataGaName":242,"dataGaLocation":198},"/why-gitlab/","why gitlab",{"text":244,"left":187,"config":245,"menu":247},"Product",{"dataNavLevelOne":246},"solutions",{"type":248,"link":249,"columns":253,"feature":321},"lists",{"text":250,"config":251},"View all Solutions",{"href":252,"dataGaName":246,"dataGaLocation":198},"/solutions/",[254,277,300],{"title":255,"description":256,"link":257,"items":262},"Automation","CI/CD and automation to accelerate deployment",{"config":258},{"icon":259,"href":260,"dataGaName":261,"dataGaLocation":198},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[263,266,269,273],{"text":17,"config":264},{"href":265,"dataGaLocation":198,"dataGaName":17},"/solutions/continuous-integration/",{"text":229,"config":267},{"href":234,"dataGaLocation":198,"dataGaName":268},"gitlab duo agent platform - product menu",{"text":270,"config":271},"Source Code Management",{"href":272,"dataGaLocation":198,"dataGaName":270},"/solutions/source-code-management/",{"text":274,"config":275},"Automated Software Delivery",{"href":260,"dataGaLocation":198,"dataGaName":276},"Automated software delivery",{"title":278,"description":279,"link":280,"items":285},"Security","Deliver code faster without compromising security",{"config":281},{"href":282,"dataGaName":283,"dataGaLocation":198,"icon":284},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[286,290,295],{"text":287,"config":288},"Application Security Testing",{"href":282,"dataGaName":289,"dataGaLocation":198},"Application security testing",{"text":291,"config":292},"Software Supply Chain Security",{"href":293,"dataGaLocation":198,"dataGaName":294},"/solutions/supply-chain/","Software supply chain security",{"text":296,"config":297},"Software Compliance",{"href":298,"dataGaName":299,"dataGaLocation":198},"/solutions/software-compliance/","software compliance",{"title":301,"link":302,"items":307},"Measurement",{"config":303},{"icon":304,"href":305,"dataGaName":306,"dataGaLocation":198},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[308,312,316],{"text":309,"config":310},"Visibility & Measurement",{"href":305,"dataGaLocation":198,"dataGaName":311},"Visibility and Measurement",{"text":313,"config":314},"Value Stream Management",{"href":315,"dataGaLocation":198,"dataGaName":313},"/solutions/value-stream-management/",{"text":317,"config":318},"Analytics & Insights",{"href":319,"dataGaLocation":198,"dataGaName":320},"/solutions/analytics-and-insights/","Analytics and insights",{"title":322,"type":248,"items":323},"GitLab for",[324,330,336],{"text":325,"config":326},"Enterprise",{"icon":327,"href":328,"dataGaLocation":198,"dataGaName":329},"Building","/enterprise/","enterprise",{"text":331,"config":332},"Small Business",{"icon":333,"href":334,"dataGaLocation":198,"dataGaName":335},"Work","/small-business/","small business",{"text":337,"config":338},"Public Sector",{"icon":339,"href":340,"dataGaLocation":198,"dataGaName":341},"Organization","/solutions/public-sector/","public sector",{"text":343,"config":344},"Pricing",{"href":345,"dataGaName":346,"dataGaLocation":198,"dataNavLevelOne":346},"/pricing/","pricing",{"text":348,"config":349,"menu":350},"Resources",{"dataNavLevelOne":137},{"type":248,"link":351,"columns":355,"feature":449},{"text":352,"config":353},"View all resources",{"href":354,"dataGaName":137,"dataGaLocation":198},"/resources/",[356,389,416],{"title":357,"items":358},"Getting started",[359,364,369,374,379,384],{"text":360,"config":361},"Install",{"href":362,"dataGaName":363,"dataGaLocation":198},"/install/","install",{"text":365,"config":366},"Quick start guides",{"href":367,"dataGaName":368,"dataGaLocation":198},"/get-started/","quick setup checklists",{"text":370,"config":371},"Learn",{"href":372,"dataGaLocation":198,"dataGaName":373},"https://university.gitlab.com/","learn",{"text":375,"config":376},"Product documentation",{"href":377,"dataGaName":378,"dataGaLocation":198},"https://docs.gitlab.com/","product documentation",{"text":380,"config":381},"Best practice videos",{"href":382,"dataGaName":383,"dataGaLocation":198},"/getting-started-videos/","best practice videos",{"text":385,"config":386},"Integrations",{"href":387,"dataGaName":388,"dataGaLocation":198},"/integrations/","integrations",{"title":390,"items":391},"Discover",[392,397,402,407,411],{"text":393,"config":394},"Customer success stories",{"href":395,"dataGaName":396,"dataGaLocation":198},"/customers/","customer success stories",{"text":398,"config":399},"Blog",{"href":400,"dataGaName":401,"dataGaLocation":198},"/blog/","blog",{"text":403,"config":404},"Demo Hub",{"href":405,"dataGaName":406,"dataGaLocation":198},"/demo-hub/","demo hub",{"text":408,"config":409},"The Source",{"href":410,"dataGaName":401,"dataGaLocation":198},"/the-source/",{"text":412,"config":413},"Remote",{"href":414,"dataGaName":415,"dataGaLocation":198},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":417,"items":418},"Connect",[419,424,429,434,439,444],{"text":420,"config":421},"GitLab Services",{"href":422,"dataGaName":423,"dataGaLocation":198},"/services/","services",{"text":425,"config":426},"Contribute",{"href":427,"dataGaName":428,"dataGaLocation":198},"https://contributors.gitlab.com","contribute",{"text":430,"config":431},"Community",{"href":432,"dataGaName":433,"dataGaLocation":198},"/community/","community",{"text":435,"config":436},"Forum",{"href":437,"dataGaName":438,"dataGaLocation":198},"https://forum.gitlab.com/","forum",{"text":440,"config":441},"Events",{"href":442,"dataGaName":443,"dataGaLocation":198},"/events/","events",{"text":445,"config":446},"Partners",{"href":447,"dataGaName":448,"dataGaLocation":198},"/partners/","partners",{"config":450,"title":453,"text":454,"link":455},{"background":451,"textColor":452},"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":456,"config":457},"Read the latest",{"href":458,"dataGaName":459,"dataGaLocation":198},"/whats-new/","whats new",{"text":461,"config":462,"menu":464},"Company",{"dataNavLevelOne":463},"company",{"type":248,"columns":465},[466],{"items":467},[468,473,479,481,486,491,496,501,506,511],{"text":469,"config":470},"About",{"href":471,"dataGaName":472,"dataGaLocation":198},"/company/","about",{"text":474,"config":475,"footerGa":478},"Jobs",{"href":476,"dataGaName":477,"dataGaLocation":198},"/jobs/","jobs",{"dataGaName":477},{"text":440,"config":480},{"href":442,"dataGaName":443,"dataGaLocation":198},{"text":482,"config":483},"Leadership",{"href":484,"dataGaName":485,"dataGaLocation":198},"/company/team/e-group/","leadership",{"text":487,"config":488},"Handbook",{"href":489,"dataGaName":490,"dataGaLocation":198},"https://handbook.gitlab.com/","handbook",{"text":492,"config":493},"Investor relations",{"href":494,"dataGaName":495,"dataGaLocation":198},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":497,"config":498},"Trust Center",{"href":499,"dataGaName":500,"dataGaLocation":198},"/security/","trust center",{"text":502,"config":503},"AI Transparency Center",{"href":504,"dataGaName":505,"dataGaLocation":198},"/ai-transparency-center/","ai transparency center",{"text":507,"config":508},"Newsletter",{"href":509,"dataGaName":510,"dataGaLocation":198},"/company/contact/#contact-forms","newsletter",{"text":512,"config":513},"Press",{"href":514,"dataGaName":515,"dataGaLocation":198},"/press/","press",{"text":517,"config":518,"menu":519},"Contact us",{"dataNavLevelOne":463},{"type":248,"columns":520},[521],{"items":522},[523,528,533],{"text":524,"config":525},"Talk to sales",{"href":526,"dataGaName":527,"dataGaLocation":198},"/sales/","talk to sales",{"text":529,"config":530},"Support portal",{"href":531,"dataGaName":532,"dataGaLocation":198},"https://support.gitlab.com/hc/en-us","support portal",{"text":534,"config":535},"Customer portal",{"href":536,"dataGaName":537,"dataGaLocation":198},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":539,"login":540,"suggestions":547},"Close",{"text":541,"link":542},"To search repositories and projects, login to",{"text":543,"config":544},"gitlab.com",{"href":212,"dataGaName":545,"dataGaLocation":546},"search login","search",{"text":548,"default":549},"Suggestions",[550,552,556,558,562,566],{"text":229,"config":551},{"href":234,"dataGaName":229,"dataGaLocation":546},{"text":553,"config":554},"Code Suggestions (AI)",{"href":555,"dataGaName":553,"dataGaLocation":546},"/solutions/code-suggestions/",{"text":17,"config":557},{"href":265,"dataGaName":17,"dataGaLocation":546},{"text":559,"config":560},"GitLab on AWS",{"href":561,"dataGaName":559,"dataGaLocation":546},"/partners/technology-partners/aws/",{"text":563,"config":564},"GitLab on Google Cloud",{"href":565,"dataGaName":563,"dataGaLocation":546},"/partners/technology-partners/google-cloud-platform/",{"text":567,"config":568},"Why GitLab?",{"href":241,"dataGaName":567,"dataGaLocation":546},{"freeTrial":570,"mobileIcon":575,"desktopIcon":580,"secondaryButton":583},{"text":571,"config":572},"Start free trial",{"href":573,"dataGaName":203,"dataGaLocation":574},"https://gitlab.com/-/trials/new/","nav",{"altText":576,"config":577},"Gitlab Icon",{"src":578,"dataGaName":579,"dataGaLocation":574},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":576,"config":581},{"src":582,"dataGaName":579,"dataGaLocation":574},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":584,"config":585},"Get Started",{"href":586,"dataGaName":587,"dataGaLocation":574},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":589,"mobileIcon":593,"desktopIcon":595},{"text":590,"config":591},"Learn more about GitLab Duo",{"href":234,"dataGaName":592,"dataGaLocation":574},"gitlab duo",{"altText":576,"config":594},{"src":578,"dataGaName":579,"dataGaLocation":574},{"altText":576,"config":596},{"src":582,"dataGaName":579,"dataGaLocation":574},{"button":598,"mobileIcon":603,"desktopIcon":605},{"text":599,"config":600},"/switch",{"href":601,"dataGaName":602,"dataGaLocation":574},"#contact","switch",{"altText":576,"config":604},{"src":578,"dataGaName":579,"dataGaLocation":574},{"altText":576,"config":606},{"src":607,"dataGaName":579,"dataGaLocation":574},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":609,"mobileIcon":614,"desktopIcon":616},{"text":610,"config":611},"Back to pricing",{"href":345,"dataGaName":612,"dataGaLocation":574,"icon":613},"back to pricing","GoBack",{"altText":576,"config":615},{"src":578,"dataGaName":579,"dataGaLocation":574},{"altText":576,"config":617},{"src":582,"dataGaName":579,"dataGaLocation":574},{"title":619,"titleMobile":620,"button":621,"config":626},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":146,"config":622},{"href":623,"dataGaName":624,"dataGaLocation":625},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":627,"disabled":28},"release",{"data":629},{"text":630,"source":631,"edit":637,"contribute":642,"config":647,"items":652,"minimal":860},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":632,"config":633},"View page source",{"href":634,"dataGaName":635,"dataGaLocation":636},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":638,"config":639},"Edit this page",{"href":640,"dataGaName":641,"dataGaLocation":636},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":643,"config":644},"Please contribute",{"href":645,"dataGaName":646,"dataGaLocation":636},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":648,"facebook":649,"youtube":650,"linkedin":651},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[653,700,752,796,828],{"title":343,"links":654,"subMenu":669},[655,659,664],{"text":656,"config":657},"View plans",{"href":345,"dataGaName":658,"dataGaLocation":636},"view plans",{"text":660,"config":661},"Why Premium?",{"href":662,"dataGaName":663,"dataGaLocation":636},"/pricing/premium/","why premium",{"text":665,"config":666},"Why Ultimate?",{"href":667,"dataGaName":668,"dataGaLocation":636},"/pricing/ultimate/","why ultimate",[670],{"title":671,"links":672},"Contact Us",[673,676,678,680,685,690,695],{"text":674,"config":675},"Contact sales",{"href":526,"dataGaName":208,"dataGaLocation":636},{"text":529,"config":677},{"href":531,"dataGaName":532,"dataGaLocation":636},{"text":534,"config":679},{"href":536,"dataGaName":537,"dataGaLocation":636},{"text":681,"config":682},"Status",{"href":683,"dataGaName":684,"dataGaLocation":636},"https://status.gitlab.com/","status",{"text":686,"config":687},"Terms of use",{"href":688,"dataGaName":689,"dataGaLocation":636},"/terms/","terms of use",{"text":691,"config":692},"Privacy statement",{"href":693,"dataGaName":694,"dataGaLocation":636},"/privacy/","privacy statement",{"text":696,"config":697},"Cookie preferences",{"dataGaName":698,"dataGaLocation":636,"id":699,"isOneTrustButton":187},"cookie preferences","ot-sdk-btn",{"title":244,"links":701,"subMenu":710},[702,706],{"text":703,"config":704},"DevSecOps platform",{"href":227,"dataGaName":705,"dataGaLocation":636},"devsecops platform",{"text":707,"config":708},"AI-Assisted Development",{"href":234,"dataGaName":709,"dataGaLocation":636},"ai-assisted development",[711],{"title":13,"links":712},[713,717,722,727,732,737,742,747],{"text":714,"config":715},"CICD",{"href":19,"dataGaName":716,"dataGaLocation":636},"cicd",{"text":718,"config":719},"GitOps",{"href":720,"dataGaName":721,"dataGaLocation":636},"/topics/gitops/","gitops",{"text":723,"config":724},"DevOps",{"href":725,"dataGaName":726,"dataGaLocation":636},"/topics/devops/","devops",{"text":728,"config":729},"Version Control",{"href":730,"dataGaName":731,"dataGaLocation":636},"/topics/version-control/","version control",{"text":733,"config":734},"DevSecOps",{"href":735,"dataGaName":736,"dataGaLocation":636},"/topics/devsecops/","devsecops",{"text":738,"config":739},"Cloud Native",{"href":740,"dataGaName":741,"dataGaLocation":636},"/topics/cloud-native/","cloud native",{"text":743,"config":744},"AI for Coding",{"href":745,"dataGaName":746,"dataGaLocation":636},"/topics/devops/ai-for-coding/","ai for coding",{"text":748,"config":749},"Agentic AI",{"href":750,"dataGaName":751,"dataGaLocation":636},"/topics/agentic-ai/","agentic ai",{"title":753,"links":754},"Solutions",[755,757,759,764,768,771,775,778,780,783,786,791],{"text":287,"config":756},{"href":282,"dataGaName":287,"dataGaLocation":636},{"text":276,"config":758},{"href":260,"dataGaName":261,"dataGaLocation":636},{"text":760,"config":761},"Agile development",{"href":762,"dataGaName":763,"dataGaLocation":636},"/solutions/agile-delivery/","agile delivery",{"text":765,"config":766},"SCM",{"href":272,"dataGaName":767,"dataGaLocation":636},"source code management",{"text":714,"config":769},{"href":265,"dataGaName":770,"dataGaLocation":636},"continuous integration & delivery",{"text":772,"config":773},"Value stream management",{"href":315,"dataGaName":774,"dataGaLocation":636},"value stream management",{"text":718,"config":776},{"href":777,"dataGaName":721,"dataGaLocation":636},"/solutions/gitops/",{"text":325,"config":779},{"href":328,"dataGaName":329,"dataGaLocation":636},{"text":781,"config":782},"Small business",{"href":334,"dataGaName":335,"dataGaLocation":636},{"text":784,"config":785},"Public sector",{"href":340,"dataGaName":341,"dataGaLocation":636},{"text":787,"config":788},"Education",{"href":789,"dataGaName":790,"dataGaLocation":636},"/solutions/education/","education",{"text":792,"config":793},"Financial services",{"href":794,"dataGaName":795,"dataGaLocation":636},"/solutions/finance/","financial services",{"title":348,"links":797},[798,800,802,804,807,809,812,814,816,818,820,822,824,826],{"text":360,"config":799},{"href":362,"dataGaName":363,"dataGaLocation":636},{"text":365,"config":801},{"href":367,"dataGaName":368,"dataGaLocation":636},{"text":370,"config":803},{"href":372,"dataGaName":373,"dataGaLocation":636},{"text":375,"config":805},{"href":377,"dataGaName":806,"dataGaLocation":636},"docs",{"text":398,"config":808},{"href":400,"dataGaName":401,"dataGaLocation":636},{"text":810,"config":811},"What's new",{"href":458,"dataGaName":459,"dataGaLocation":636},{"text":393,"config":813},{"href":395,"dataGaName":396,"dataGaLocation":636},{"text":412,"config":815},{"href":414,"dataGaName":415,"dataGaLocation":636},{"text":420,"config":817},{"href":422,"dataGaName":423,"dataGaLocation":636},{"text":425,"config":819},{"href":427,"dataGaName":428,"dataGaLocation":636},{"text":430,"config":821},{"href":432,"dataGaName":433,"dataGaLocation":636},{"text":435,"config":823},{"href":437,"dataGaName":438,"dataGaLocation":636},{"text":440,"config":825},{"href":442,"dataGaName":443,"dataGaLocation":636},{"text":445,"config":827},{"href":447,"dataGaName":448,"dataGaLocation":636},{"title":461,"links":829},[830,832,834,836,838,840,844,849,851,853,855],{"text":469,"config":831},{"href":471,"dataGaName":463,"dataGaLocation":636},{"text":474,"config":833},{"href":476,"dataGaName":477,"dataGaLocation":636},{"text":482,"config":835},{"href":484,"dataGaName":485,"dataGaLocation":636},{"text":487,"config":837},{"href":489,"dataGaName":490,"dataGaLocation":636},{"text":492,"config":839},{"href":494,"dataGaName":495,"dataGaLocation":636},{"text":841,"config":842},"Sustainability",{"href":843,"dataGaName":841,"dataGaLocation":636},"/sustainability/",{"text":845,"config":846},"Diversity, inclusion and belonging (DIB)",{"href":847,"dataGaName":848,"dataGaLocation":636},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":497,"config":850},{"href":499,"dataGaName":500,"dataGaLocation":636},{"text":507,"config":852},{"href":509,"dataGaName":510,"dataGaLocation":636},{"text":512,"config":854},{"href":514,"dataGaName":515,"dataGaLocation":636},{"text":856,"config":857},"Modern Slavery Transparency Statement",{"href":858,"dataGaName":859,"dataGaLocation":636},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":861},[862,865,868],{"text":863,"config":864},"Terms",{"href":688,"dataGaName":689,"dataGaLocation":636},{"text":866,"config":867},"Cookies",{"dataGaName":698,"dataGaLocation":636,"id":699,"isOneTrustButton":187},{"text":869,"config":870},"Privacy",{"href":693,"dataGaName":694,"dataGaLocation":636},{"header":872,"blurb":873,"button":874,"secondaryButton":879},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":875,"config":876},"Get your free trial",{"href":877,"dataGaName":203,"dataGaLocation":878},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":674,"config":880},{"href":526,"dataGaName":208,"dataGaLocation":878},1786803782039]