[{"data":1,"prerenderedAt":987},["ShallowReactive",2],{"/blog/progressive-delivery-using-review-apps":3,"navigation-en-us":203,"banner-en-us":628,"footer-en-us":638,"blog-post-authors-en-us-Jason Yavorska":883,"blog-related-posts-en-us-progressive-delivery-using-review-apps":897,"blog-promotions-en-us":923,"next-steps-en-us":977},{"id":4,"title":5,"authors":6,"body":8,"category":181,"date":182,"description":183,"extension":184,"externalUrl":185,"faq":185,"featured":186,"heroImage":187,"meta":188,"navigation":189,"path":190,"seo":191,"slug":195,"stem":196,"tags":197,"template":201,"updatedDate":185,"__hash__":202},"blogPosts/en-us/blog/progressive-delivery-using-review-apps.md","Progressive Delivery: How to get started with Review Apps",[7],"Jason Yavorska",{"type":9,"value":10,"toc":173},"minimark",[11,22,31,46,51,54,68,71,80,87,90,94,97,100,109,113,122,130,134,137,150,156,159],[12,13,14,15,21],"p",{},"If you're not familiar with ",[16,17,20],"a",{"href":18,"rel":19},"https://redmonk.com/jgovernor/2018/08/06/towards-progressive-delivery/",[],"Progressive Delivery",",\nit's a new set of best practices that is gaining hold for delivering safely and frequently to\nproduction. Although it's not a completely new idea in the same way that continuous\ndelivery originally was, it is a clear evolution of those ideas that brings something\nnew to the table. By taking a step back and considering the corpus of knowledge and experience\ngained over the last 10 years, then applying a bit of systems thinking to\nhow all these different practices interact with emerging technologies, it has set a new\nbaseline for how software delivery can be done effectively.",[12,23,24,25,30],{},"We discuss our overall vision for Progressive Delivery on our ",[16,26,29],{"href":27,"rel":28},"https://docs.gitlab.com/ci/",[],"CI/CD vision page",",\nwhich also links to a few more resources if you're not up to speed with the concept in general.",[12,32,33,34,39,40,45],{},"In summary, though, continuous delivery gets you out of the mode of shipping one, big, risky\ndeployment to production, and instead breaks that risk up into many tiny parts – each with a\nfraction of the risk. Progressive Delivery takes this a step further by enabling you to\n",[16,35,38],{"href":36,"rel":37},"https://docs.gitlab.com/user/project/canary_deployments/",[],"canary test code"," in\nproduction with a small portion of your user base, use ",[16,41,44],{"href":42,"rel":43},"https://docs.gitlab.com/operations/feature_flags/",[],"feature flags","\nto manage rollout pacing, tie everything together with tracing,\nand automate the further deployment or rollback of that code depending on how it performs.",[47,48,50],"h2",{"id":49},"how-review-apps-can-help-enable-progressive-delivery","How Review Apps can help enable Progressive Delivery",[12,52,53],{},"Let me begin by explaining what GitLab Review Apps are:",[12,55,56,61,62,67],{},[16,57,60],{"href":58,"rel":59},"https://docs.gitlab.com/ci/review_apps/",[],"GitLab Review Apps"," are\nstaging environments that are automatically created for every branch and/or merge request. They are a collaboration tool\nbuilt into GitLab that helps take the hard work out of providing an environment to\nshowcase or validate product changes. There are a lot of different ways to configure\nthem, but the recommended way is to automatically create review app instances during your\n",[16,63,66],{"href":64,"rel":65},"https://docs.gitlab.com/ci/pipelines/merge_request_pipelines/",[],"merge request pipelines",". Doing this\nwill ensure that any merge request that is being considered will have an application\nthat developers can connect to to validate their changes.",[12,69,70],{},"With GitLab, we go a step beyond simply creating the review environment: we make it accessible.",[12,72,73,74,79],{},"Once configured, on your merge request page you'll now see a \"view app\" button that, as long as your\n",[16,75,78],{"href":76,"rel":77},"https://docs.gitlab.com/ci/review_apps/#route-maps",[],"route maps"," are configured correctly, will allow your\nusers to jump right to the changed content. Review apps do work even without the route maps – in that case\nthey will take you to the home page of your app – but with them they almost feel like magic.",[12,81,82],{},[83,84],"img",{"alt":85,"src":86,"title":85},"Review app","https://docs.gitlab.com/ci/review_apps/img/review_apps_preview_in_mr.png/",[12,88,89],{},"Review apps are a powerful tool on their own for enabling quick iteration, but if we think about\nthem in the context of Progressive Delivery, a whole new set of possibilities opens up.",[47,91,93],{"id":92},"review-apps-for-progressive-validation","Review apps for progressive validation",[12,95,96],{},"As mentioned above, a typical Progressive Delivery flow involves using targeted feature flags to validate\nchanges as they flow to production environments. Review apps, if configured to point to production\ndata/endpoints instead of ephemeral data, can serve as a merge request-based window into the changes\nthat are being considered for release.",[12,98,99],{},"Some of this will of course depend on your code, your testing procedures, and environments. You may\npoint review apps at production endpoints from the moment they are spun up, or perhaps only later\nin your merge request pipeline after some initial validation.",[12,101,102,103,108],{},"Since anyone can use these environments, you can point anyone with a stake in the success of the\nnew feature to the review app, and they are able to see the live behavior, using their own real\ndata, immediately in their own web browser. This is incredibly powerful for enabling rapid feedback\nand iteration. As a preview, we're also looking to improve this capability by adding an\n",[16,104,107],{"href":105,"rel":106},"https://gitlab.com/gitlab-org/gitlab-ee/issues/10761",[],"easy-to-use review interface for collecting feedback","\nright into review apps directly.",[47,110,112],{"id":111},"feature-flags-and-tracing","Feature flags and tracing",[12,114,115,116,121],{},"We can take this idea even one more step further. Using ",[16,117,120],{"href":118,"rel":119},"https://docs.gitlab.com/operations/feature_flags/#define-environment-specs",[],"per-environment feature flag behaviors",", we\ncan control the behavior of the review app environment in any way that the production environment can\nbe controlled. This opens up the possibility of validating any combination.",[12,123,124,125,129],{},"Finally, since review apps are built and deployed from GitLab CI/CD, all the predefined CI/CD environment\nvariables are available to the deploy script. You could configure your application to use your\nmerge request ID (",[126,127,128],"code",{},"CI_MERGE_REQUEST_ID",") as its unique ID for transaction tracing, tying transactions\nin the system automatically to the appropriate GitLab merge request.",[47,131,133],{"id":132},"as-you-can-see-theres-a-ton-of-potential-for-progressive-delivery-here","As you can see, there's a ton of potential for Progressive Delivery here",[12,135,136],{},"Review apps don't replace\nthe role of feature flags in a Progressive Delivery pipeline, but they provide an incredible\nsupplement that enables segmented validation in a completely new way. All in all, it's such an exciting time for\ncontinuous delivery – there's so much innovation happening on the process and technology fronts, and I'm\ncertain we're only scratching the surface of where we're headed.",[12,138,139,140,144,145,149],{},"Review Apps is just one way ",[16,141,143],{"href":142},"/solutions/continuous-integration/","GitLab CI/CD"," enables Progressive Delivery. Join us for our webcast ",[146,147,148],"em",{},"Mastering continuous software development"," and learn how GitLab’s built-in CI/CD helps teams implement Progressive Delivery workflows, without the complicated integrations and plugin maintenance.",[12,151,152],{},[16,153,155],{"href":154},"/events/","Watch the GitLab CI/CD webcast",[12,157,158],{},"If you have more ideas on how to use review apps even more effectively, or where you see the technology\nevolving next, please share in the comments.",[12,160,161,162,167,168],{},"Photo by ",[16,163,166],{"href":164,"rel":165},"https://unsplash.com/photos/5fNmWej4tAA?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Helloquence"," on ",[16,169,172],{"href":170,"rel":171},"https://unsplash.com/",[],"Unsplash",{"title":174,"searchDepth":175,"depth":175,"links":176},"",2,[177,178,179,180],{"id":49,"depth":175,"text":50},{"id":92,"depth":175,"text":93},{"id":111,"depth":175,"text":112},{"id":132,"depth":175,"text":133},"engineering","2019-04-19","Progressive Delivery is the next evolution of continuous delivery, and Review Apps are a key enabler.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666841/Blog/Hero%20Images/progressive-delivery-review-apps.jpg",{},true,"/en-us/blog/progressive-delivery-using-review-apps",{"title":5,"description":183,"ogTitle":5,"ogDescription":183,"noIndex":186,"ogImage":187,"ogUrl":192,"ogSiteName":193,"ogType":194,"canonicalUrls":192},"https://about.gitlab.com/blog/progressive-delivery-using-review-apps","https://about.gitlab.com","article","progressive-delivery-using-review-apps","en-us/blog/progressive-delivery-using-review-apps",[198,199,200],"CI/CD","features","CI","BlogPost","pz7XuJLy-O-loyS9bRANqKIN5cwfw0eNWIxwORTLwds",{"logo":204,"freeTrial":209,"sales":214,"login":219,"items":224,"search":548,"minimal":579,"duo":598,"switchNav":607,"pricingDeployment":618},{"config":205},{"href":206,"dataGaName":207,"dataGaLocation":208},"/","gitlab logo","header",{"text":210,"config":211},"Get free trial",{"href":212,"dataGaName":213,"dataGaLocation":208},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":215,"config":216},"Request a demo",{"href":217,"dataGaName":218,"dataGaLocation":208},"/sales/?contact-topic=request-demo","sales",{"text":220,"config":221},"Sign in",{"href":222,"dataGaName":223,"dataGaLocation":208},"https://gitlab.com/users/sign_in/","sign in",[225,254,352,357,470,526],{"text":226,"config":227,"menu":229},"Platform",{"dataNavLevelOne":228},"platform",{"type":230,"columns":231},"cards",[232,238,246],{"title":226,"description":233,"link":234},"The intelligent orchestration platform for DevSecOps",{"text":235,"config":236},"Explore our Platform",{"href":237,"dataGaName":228,"dataGaLocation":208},"/platform/",{"title":239,"description":240,"link":241},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":242,"config":243},"Meet GitLab Duo",{"href":244,"dataGaName":245,"dataGaLocation":208},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":247,"description":248,"link":249},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":250,"config":251},"Learn more",{"href":252,"dataGaName":253,"dataGaLocation":208},"/why-gitlab/","why gitlab",{"text":255,"left":189,"config":256,"menu":258},"Product",{"dataNavLevelOne":257},"solutions",{"type":259,"link":260,"columns":264,"feature":331},"lists",{"text":261,"config":262},"View all Solutions",{"href":263,"dataGaName":257,"dataGaLocation":208},"/solutions/",[265,287,310],{"title":266,"description":267,"link":268,"items":273},"Automation","CI/CD and automation to accelerate deployment",{"config":269},{"icon":270,"href":271,"dataGaName":272,"dataGaLocation":208},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[274,276,279,283],{"text":198,"config":275},{"href":142,"dataGaLocation":208,"dataGaName":198},{"text":239,"config":277},{"href":244,"dataGaLocation":208,"dataGaName":278},"gitlab duo agent platform - product menu",{"text":280,"config":281},"Source Code Management",{"href":282,"dataGaLocation":208,"dataGaName":280},"/solutions/source-code-management/",{"text":284,"config":285},"Automated Software Delivery",{"href":271,"dataGaLocation":208,"dataGaName":286},"Automated software delivery",{"title":288,"description":289,"link":290,"items":295},"Security","Deliver code faster without compromising security",{"config":291},{"href":292,"dataGaName":293,"dataGaLocation":208,"icon":294},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[296,300,305],{"text":297,"config":298},"Application Security Testing",{"href":292,"dataGaName":299,"dataGaLocation":208},"Application security testing",{"text":301,"config":302},"Software Supply Chain Security",{"href":303,"dataGaLocation":208,"dataGaName":304},"/solutions/supply-chain/","Software supply chain security",{"text":306,"config":307},"Software Compliance",{"href":308,"dataGaName":309,"dataGaLocation":208},"/solutions/software-compliance/","software compliance",{"title":311,"link":312,"items":317},"Measurement",{"config":313},{"icon":314,"href":315,"dataGaName":316,"dataGaLocation":208},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[318,322,326],{"text":319,"config":320},"Visibility & Measurement",{"href":315,"dataGaLocation":208,"dataGaName":321},"Visibility and Measurement",{"text":323,"config":324},"Value Stream Management",{"href":325,"dataGaLocation":208,"dataGaName":323},"/solutions/value-stream-management/",{"text":327,"config":328},"Analytics & Insights",{"href":329,"dataGaLocation":208,"dataGaName":330},"/solutions/analytics-and-insights/","Analytics and insights",{"title":332,"type":259,"items":333},"GitLab for",[334,340,346],{"text":335,"config":336},"Enterprise",{"icon":337,"href":338,"dataGaLocation":208,"dataGaName":339},"Building","/enterprise/","enterprise",{"text":341,"config":342},"Small Business",{"icon":343,"href":344,"dataGaLocation":208,"dataGaName":345},"Work","/small-business/","small business",{"text":347,"config":348},"Public Sector",{"icon":349,"href":350,"dataGaLocation":208,"dataGaName":351},"Organization","/solutions/public-sector/","public sector",{"text":353,"config":354},"Pricing",{"href":355,"dataGaName":356,"dataGaLocation":208,"dataNavLevelOne":356},"/pricing/","pricing",{"text":358,"config":359,"menu":361},"Resources",{"dataNavLevelOne":360},"resources",{"type":259,"link":362,"columns":366,"feature":459},{"text":363,"config":364},"View all resources",{"href":365,"dataGaName":360,"dataGaLocation":208},"/resources/",[367,400,427],{"title":368,"items":369},"Getting started",[370,375,380,385,390,395],{"text":371,"config":372},"Install",{"href":373,"dataGaName":374,"dataGaLocation":208},"/install/","install",{"text":376,"config":377},"Quick start guides",{"href":378,"dataGaName":379,"dataGaLocation":208},"/get-started/","quick setup checklists",{"text":381,"config":382},"Learn",{"href":383,"dataGaLocation":208,"dataGaName":384},"https://university.gitlab.com/","learn",{"text":386,"config":387},"Product documentation",{"href":388,"dataGaName":389,"dataGaLocation":208},"https://docs.gitlab.com/","product documentation",{"text":391,"config":392},"Best practice videos",{"href":393,"dataGaName":394,"dataGaLocation":208},"/getting-started-videos/","best practice videos",{"text":396,"config":397},"Integrations",{"href":398,"dataGaName":399,"dataGaLocation":208},"/integrations/","integrations",{"title":401,"items":402},"Discover",[403,408,413,418,422],{"text":404,"config":405},"Customer success stories",{"href":406,"dataGaName":407,"dataGaLocation":208},"/customers/","customer success stories",{"text":409,"config":410},"Blog",{"href":411,"dataGaName":412,"dataGaLocation":208},"/blog/","blog",{"text":414,"config":415},"Demo Hub",{"href":416,"dataGaName":417,"dataGaLocation":208},"/demo-hub/","demo hub",{"text":419,"config":420},"The Source",{"href":421,"dataGaName":412,"dataGaLocation":208},"/the-source/",{"text":423,"config":424},"Remote",{"href":425,"dataGaName":426,"dataGaLocation":208},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":428,"items":429},"Connect",[430,435,440,445,450,454],{"text":431,"config":432},"GitLab Services",{"href":433,"dataGaName":434,"dataGaLocation":208},"/services/","services",{"text":436,"config":437},"Contribute",{"href":438,"dataGaName":439,"dataGaLocation":208},"https://contributors.gitlab.com","contribute",{"text":441,"config":442},"Community",{"href":443,"dataGaName":444,"dataGaLocation":208},"/community/","community",{"text":446,"config":447},"Forum",{"href":448,"dataGaName":449,"dataGaLocation":208},"https://forum.gitlab.com/","forum",{"text":451,"config":452},"Events",{"href":154,"dataGaName":453,"dataGaLocation":208},"events",{"text":455,"config":456},"Partners",{"href":457,"dataGaName":458,"dataGaLocation":208},"/partners/","partners",{"config":460,"title":463,"text":464,"link":465},{"background":461,"textColor":462},"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":466,"config":467},"Read the latest",{"href":468,"dataGaName":469,"dataGaLocation":208},"/whats-new/","whats new",{"text":471,"config":472,"menu":474},"Company",{"dataNavLevelOne":473},"company",{"type":259,"columns":475},[476],{"items":477},[478,483,489,491,496,501,506,511,516,521],{"text":479,"config":480},"About",{"href":481,"dataGaName":482,"dataGaLocation":208},"/company/","about",{"text":484,"config":485,"footerGa":488},"Jobs",{"href":486,"dataGaName":487,"dataGaLocation":208},"/jobs/","jobs",{"dataGaName":487},{"text":451,"config":490},{"href":154,"dataGaName":453,"dataGaLocation":208},{"text":492,"config":493},"Leadership",{"href":494,"dataGaName":495,"dataGaLocation":208},"/company/team/e-group/","leadership",{"text":497,"config":498},"Handbook",{"href":499,"dataGaName":500,"dataGaLocation":208},"https://handbook.gitlab.com/","handbook",{"text":502,"config":503},"Investor relations",{"href":504,"dataGaName":505,"dataGaLocation":208},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":507,"config":508},"Trust Center",{"href":509,"dataGaName":510,"dataGaLocation":208},"/security/","trust center",{"text":512,"config":513},"AI Transparency Center",{"href":514,"dataGaName":515,"dataGaLocation":208},"/ai-transparency-center/","ai transparency center",{"text":517,"config":518},"Newsletter",{"href":519,"dataGaName":520,"dataGaLocation":208},"/company/contact/#contact-forms","newsletter",{"text":522,"config":523},"Press",{"href":524,"dataGaName":525,"dataGaLocation":208},"/press/","press",{"text":527,"config":528,"menu":529},"Contact us",{"dataNavLevelOne":473},{"type":259,"columns":530},[531],{"items":532},[533,538,543],{"text":534,"config":535},"Talk to sales",{"href":536,"dataGaName":537,"dataGaLocation":208},"/sales/","talk to sales",{"text":539,"config":540},"Support portal",{"href":541,"dataGaName":542,"dataGaLocation":208},"https://support.gitlab.com/hc/en-us","support portal",{"text":544,"config":545},"Customer portal",{"href":546,"dataGaName":547,"dataGaLocation":208},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":549,"login":550,"suggestions":557},"Close",{"text":551,"link":552},"To search repositories and projects, login to",{"text":553,"config":554},"gitlab.com",{"href":222,"dataGaName":555,"dataGaLocation":556},"search login","search",{"text":558,"default":559},"Suggestions",[560,562,566,568,572,576],{"text":239,"config":561},{"href":244,"dataGaName":239,"dataGaLocation":556},{"text":563,"config":564},"Code Suggestions (AI)",{"href":565,"dataGaName":563,"dataGaLocation":556},"/solutions/code-suggestions/",{"text":198,"config":567},{"href":142,"dataGaName":198,"dataGaLocation":556},{"text":569,"config":570},"GitLab on AWS",{"href":571,"dataGaName":569,"dataGaLocation":556},"/partners/technology-partners/aws/",{"text":573,"config":574},"GitLab on Google Cloud",{"href":575,"dataGaName":573,"dataGaLocation":556},"/partners/technology-partners/google-cloud-platform/",{"text":577,"config":578},"Why GitLab?",{"href":252,"dataGaName":577,"dataGaLocation":556},{"freeTrial":580,"mobileIcon":585,"desktopIcon":590,"secondaryButton":593},{"text":581,"config":582},"Start free trial",{"href":583,"dataGaName":213,"dataGaLocation":584},"https://gitlab.com/-/trials/new/","nav",{"altText":586,"config":587},"Gitlab Icon",{"src":588,"dataGaName":589,"dataGaLocation":584},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":586,"config":591},{"src":592,"dataGaName":589,"dataGaLocation":584},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":594,"config":595},"Get Started",{"href":596,"dataGaName":597,"dataGaLocation":584},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":599,"mobileIcon":603,"desktopIcon":605},{"text":600,"config":601},"Learn more about GitLab Duo",{"href":244,"dataGaName":602,"dataGaLocation":584},"gitlab duo",{"altText":586,"config":604},{"src":588,"dataGaName":589,"dataGaLocation":584},{"altText":586,"config":606},{"src":592,"dataGaName":589,"dataGaLocation":584},{"button":608,"mobileIcon":613,"desktopIcon":615},{"text":609,"config":610},"/switch",{"href":611,"dataGaName":612,"dataGaLocation":584},"#contact","switch",{"altText":586,"config":614},{"src":588,"dataGaName":589,"dataGaLocation":584},{"altText":586,"config":616},{"src":617,"dataGaName":589,"dataGaLocation":584},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":619,"mobileIcon":624,"desktopIcon":626},{"text":620,"config":621},"Back to pricing",{"href":355,"dataGaName":622,"dataGaLocation":584,"icon":623},"back to pricing","GoBack",{"altText":586,"config":625},{"src":588,"dataGaName":589,"dataGaLocation":584},{"altText":586,"config":627},{"src":592,"dataGaName":589,"dataGaLocation":584},{"title":629,"titleMobile":630,"button":631,"config":636},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":250,"config":632},{"href":633,"dataGaName":634,"dataGaLocation":635},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":637,"disabled":186},"release",{"data":639},{"text":640,"source":641,"edit":647,"contribute":652,"config":657,"items":662,"minimal":872},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":642,"config":643},"View page source",{"href":644,"dataGaName":645,"dataGaLocation":646},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":648,"config":649},"Edit this page",{"href":650,"dataGaName":651,"dataGaLocation":646},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":653,"config":654},"Please contribute",{"href":655,"dataGaName":656,"dataGaLocation":646},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":658,"facebook":659,"youtube":660,"linkedin":661},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[663,710,764,808,840],{"title":353,"links":664,"subMenu":679},[665,669,674],{"text":666,"config":667},"View plans",{"href":355,"dataGaName":668,"dataGaLocation":646},"view plans",{"text":670,"config":671},"Why Premium?",{"href":672,"dataGaName":673,"dataGaLocation":646},"/pricing/premium/","why premium",{"text":675,"config":676},"Why Ultimate?",{"href":677,"dataGaName":678,"dataGaLocation":646},"/pricing/ultimate/","why ultimate",[680],{"title":681,"links":682},"Contact Us",[683,686,688,690,695,700,705],{"text":684,"config":685},"Contact sales",{"href":536,"dataGaName":218,"dataGaLocation":646},{"text":539,"config":687},{"href":541,"dataGaName":542,"dataGaLocation":646},{"text":544,"config":689},{"href":546,"dataGaName":547,"dataGaLocation":646},{"text":691,"config":692},"Status",{"href":693,"dataGaName":694,"dataGaLocation":646},"https://status.gitlab.com/","status",{"text":696,"config":697},"Terms of use",{"href":698,"dataGaName":699,"dataGaLocation":646},"/terms/","terms of use",{"text":701,"config":702},"Privacy statement",{"href":703,"dataGaName":704,"dataGaLocation":646},"/privacy/","privacy statement",{"text":706,"config":707},"Cookie preferences",{"dataGaName":708,"dataGaLocation":646,"id":709,"isOneTrustButton":189},"cookie preferences","ot-sdk-btn",{"title":255,"links":711,"subMenu":720},[712,716],{"text":713,"config":714},"DevSecOps platform",{"href":237,"dataGaName":715,"dataGaLocation":646},"devsecops platform",{"text":717,"config":718},"AI-Assisted Development",{"href":244,"dataGaName":719,"dataGaLocation":646},"ai-assisted development",[721],{"title":722,"links":723},"Topics",[724,729,734,739,744,749,754,759],{"text":725,"config":726},"CICD",{"href":727,"dataGaName":728,"dataGaLocation":646},"/topics/ci-cd/","cicd",{"text":730,"config":731},"GitOps",{"href":732,"dataGaName":733,"dataGaLocation":646},"/topics/gitops/","gitops",{"text":735,"config":736},"DevOps",{"href":737,"dataGaName":738,"dataGaLocation":646},"/topics/devops/","devops",{"text":740,"config":741},"Version Control",{"href":742,"dataGaName":743,"dataGaLocation":646},"/topics/version-control/","version control",{"text":745,"config":746},"DevSecOps",{"href":747,"dataGaName":748,"dataGaLocation":646},"/topics/devsecops/","devsecops",{"text":750,"config":751},"Cloud Native",{"href":752,"dataGaName":753,"dataGaLocation":646},"/topics/cloud-native/","cloud native",{"text":755,"config":756},"AI for Coding",{"href":757,"dataGaName":758,"dataGaLocation":646},"/topics/devops/ai-for-coding/","ai for coding",{"text":760,"config":761},"Agentic AI",{"href":762,"dataGaName":763,"dataGaLocation":646},"/topics/agentic-ai/","agentic ai",{"title":765,"links":766},"Solutions",[767,769,771,776,780,783,787,790,792,795,798,803],{"text":297,"config":768},{"href":292,"dataGaName":297,"dataGaLocation":646},{"text":286,"config":770},{"href":271,"dataGaName":272,"dataGaLocation":646},{"text":772,"config":773},"Agile development",{"href":774,"dataGaName":775,"dataGaLocation":646},"/solutions/agile-delivery/","agile delivery",{"text":777,"config":778},"SCM",{"href":282,"dataGaName":779,"dataGaLocation":646},"source code management",{"text":725,"config":781},{"href":142,"dataGaName":782,"dataGaLocation":646},"continuous integration & delivery",{"text":784,"config":785},"Value stream management",{"href":325,"dataGaName":786,"dataGaLocation":646},"value stream management",{"text":730,"config":788},{"href":789,"dataGaName":733,"dataGaLocation":646},"/solutions/gitops/",{"text":335,"config":791},{"href":338,"dataGaName":339,"dataGaLocation":646},{"text":793,"config":794},"Small business",{"href":344,"dataGaName":345,"dataGaLocation":646},{"text":796,"config":797},"Public sector",{"href":350,"dataGaName":351,"dataGaLocation":646},{"text":799,"config":800},"Education",{"href":801,"dataGaName":802,"dataGaLocation":646},"/solutions/education/","education",{"text":804,"config":805},"Financial services",{"href":806,"dataGaName":807,"dataGaLocation":646},"/solutions/finance/","financial services",{"title":358,"links":809},[810,812,814,816,819,821,824,826,828,830,832,834,836,838],{"text":371,"config":811},{"href":373,"dataGaName":374,"dataGaLocation":646},{"text":376,"config":813},{"href":378,"dataGaName":379,"dataGaLocation":646},{"text":381,"config":815},{"href":383,"dataGaName":384,"dataGaLocation":646},{"text":386,"config":817},{"href":388,"dataGaName":818,"dataGaLocation":646},"docs",{"text":409,"config":820},{"href":411,"dataGaName":412,"dataGaLocation":646},{"text":822,"config":823},"What's new",{"href":468,"dataGaName":469,"dataGaLocation":646},{"text":404,"config":825},{"href":406,"dataGaName":407,"dataGaLocation":646},{"text":423,"config":827},{"href":425,"dataGaName":426,"dataGaLocation":646},{"text":431,"config":829},{"href":433,"dataGaName":434,"dataGaLocation":646},{"text":436,"config":831},{"href":438,"dataGaName":439,"dataGaLocation":646},{"text":441,"config":833},{"href":443,"dataGaName":444,"dataGaLocation":646},{"text":446,"config":835},{"href":448,"dataGaName":449,"dataGaLocation":646},{"text":451,"config":837},{"href":154,"dataGaName":453,"dataGaLocation":646},{"text":455,"config":839},{"href":457,"dataGaName":458,"dataGaLocation":646},{"title":471,"links":841},[842,844,846,848,850,852,856,861,863,865,867],{"text":479,"config":843},{"href":481,"dataGaName":473,"dataGaLocation":646},{"text":484,"config":845},{"href":486,"dataGaName":487,"dataGaLocation":646},{"text":492,"config":847},{"href":494,"dataGaName":495,"dataGaLocation":646},{"text":497,"config":849},{"href":499,"dataGaName":500,"dataGaLocation":646},{"text":502,"config":851},{"href":504,"dataGaName":505,"dataGaLocation":646},{"text":853,"config":854},"Sustainability",{"href":855,"dataGaName":853,"dataGaLocation":646},"/sustainability/",{"text":857,"config":858},"Diversity, inclusion and belonging (DIB)",{"href":859,"dataGaName":860,"dataGaLocation":646},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":507,"config":862},{"href":509,"dataGaName":510,"dataGaLocation":646},{"text":517,"config":864},{"href":519,"dataGaName":520,"dataGaLocation":646},{"text":522,"config":866},{"href":524,"dataGaName":525,"dataGaLocation":646},{"text":868,"config":869},"Modern Slavery Transparency Statement",{"href":870,"dataGaName":871,"dataGaLocation":646},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":873},[874,877,880],{"text":875,"config":876},"Terms",{"href":698,"dataGaName":699,"dataGaLocation":646},{"text":878,"config":879},"Cookies",{"dataGaName":708,"dataGaLocation":646,"id":709,"isOneTrustButton":189},{"text":881,"config":882},"Privacy",{"href":703,"dataGaName":704,"dataGaLocation":646},[884],{"id":885,"title":7,"body":185,"config":886,"content":888,"description":185,"extension":891,"meta":892,"navigation":189,"path":893,"seo":894,"stem":895,"__hash__":896},"blogAuthors/en-us/blog/authors/jason-yavorska.yml",{"template":887},"BlogAuthor",{"name":7,"config":889},{"headshot":174,"ctfId":890},"jyavorska","yml",{},"/en-us/blog/authors/jason-yavorska",{},"en-us/blog/authors/jason-yavorska","eFtNS4VsB5vvAsfbNZ0pGZ1cC600ZgmmRzLEDxetiGk",[898,907,915],{"title":899,"description":900,"heroImage":901,"category":181,"date":902,"authors":903,"slug":906,"externalUrl":185},"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",[904,905],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":908,"description":909,"heroImage":910,"category":181,"date":911,"authors":912,"slug":914,"externalUrl":185},"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",[913],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":916,"description":917,"heroImage":918,"category":181,"date":919,"authors":920,"slug":922,"externalUrl":185},"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",[921],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":924},[925,939,951,963],{"id":926,"categories":927,"header":929,"text":930,"button":931,"image":936},"ai-modernization",[928],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":932,"config":933},"Get your AI maturity score",{"href":934,"dataGaName":935,"dataGaLocation":412},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":937},{"src":938},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":940,"categories":941,"header":943,"text":930,"button":944,"image":948},"devops-modernization",[942,748],"product","Are you just managing tools or shipping innovation?",{"text":945,"config":946},"Get your DevOps maturity score",{"href":947,"dataGaName":935,"dataGaLocation":412},"/assessments/devops-modernization-assessment/",{"config":949},{"src":950},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":952,"categories":953,"header":955,"text":930,"button":956,"image":960},"security-modernization",[954],"security","Are you trading speed for security?",{"text":957,"config":958},"Get your security maturity score",{"href":959,"dataGaName":935,"dataGaLocation":412},"/assessments/security-modernization-assessment/",{"config":961},{"src":962},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":964,"paths":965,"header":968,"text":969,"button":970,"image":975},"github-azure-migration",[966,967],"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":971,"config":972},"See how GitLab compares to GitHub",{"href":973,"dataGaName":974,"dataGaLocation":412},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":976},{"src":950},{"header":978,"blurb":979,"button":980,"secondaryButton":985},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":981,"config":982},"Get your free trial",{"href":983,"dataGaName":213,"dataGaLocation":984},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":684,"config":986},{"href":536,"dataGaName":218,"dataGaLocation":984},1786803773951]