[{"data":1,"prerenderedAt":1036},["ShallowReactive",2],{"/blog/how-gitlab-transforms-embedded-systems-testing-cycles":3,"navigation-en-us":234,"banner-en-us":662,"footer-en-us":672,"blog-post-authors-en-us-Matt DeLaney|Darwin Sanoy":917,"blog-related-posts-en-us-how-gitlab-transforms-embedded-systems-testing-cycles":947,"blog-promotions-en-us":973,"next-steps-en-us":1026},{"id":4,"title":5,"authors":6,"body":9,"category":213,"date":214,"description":215,"extension":216,"externalUrl":217,"faq":217,"featured":218,"heroImage":219,"meta":220,"navigation":218,"path":221,"seo":222,"slug":226,"stem":227,"tags":228,"template":232,"updatedDate":217,"__hash__":233},"blogPosts/en-us/blog/how-gitlab-transforms-embedded-systems-testing-cycles.md","How GitLab transforms embedded systems testing cycles",[7,8],"Matt DeLaney","Darwin Sanoy",{"type":10,"value":11,"toc":199},"minimark",[12,16,19,24,27,30,35,42,48,54,57,61,67,74,81,84,90,94,104,108,130,133,146,149,155,158,164,168,171,185,189],[13,14,15],"p",{},"Embedded developers know this cycle well: write code, wait days or weeks to test on a hardware test bench, discover bugs, fix them, then wait again. Virtual testing environments promise faster feedback, but most implementations create new problems such as environment sprawl and escalating costs.",[13,17,18],{},"GitLab's managed lifecycle environments solve these virtual testing challenges. Through virtual environment automation, GitLab accelerates embedded development cycles without the configuration complexity and cost overruns.",[20,21,23],"h2",{"id":22},"virtual-testing-challenges","Virtual testing challenges",[13,25,26],{},"Virtual testing environments — simulated hardware setups that replicate embedded system behavior and real-world conditions — offer the potential to reduce hardware bottlenecks. Teams can test firmware on simulated processors, run model-in-the-loop (MIL) tests in MATLAB/Simulink, or verify software on virtual embedded systems without waiting for physical hardware access.",[13,28,29],{},"However, teams often implement virtual environments using one of two common approaches, both of which create unsustainable challenges.",[31,32,34],"h3",{"id":33},"flawed-approach-1-pipeline-lifecycle-environments","Flawed approach 1: Pipeline lifecycle environments",[13,36,37,41],{},[38,39,40],"strong",{},"Pipeline lifecycle environments re-create the entire testing setup for every CI/CD run."," When code changes trigger your CI/CD pipeline, the system provisions infrastructure, installs software simulations, and configures everything from scratch before running tests.",[13,43,44,45],{},"This approach works for simple scenarios but becomes inefficient as complexity rises. Consider software-in-the-loop (SIL) testing in a complex virtual environment, for example. Each pipeline run requires complete environment re-creation, including virtual processor provisioning, toolchain installations, and target configurations. ",[38,46,47],{},"These processes can eat up considerable time.",[13,49,50,51],{},"Moreover, as embedded systems require more sophisticated virtual hardware configurations, the provisioning ",[38,52,53],{},"costs quickly add up.",[13,55,56],{},"To avoid these rebuild costs and delays, many teams turn to long-lived environments that persist between test runs. But they come with downsides.",[31,58,60],{"id":59},"flawed-approach-2-long-lived-environments","Flawed approach 2: Long-lived environments",[13,62,63,66],{},[38,64,65],{},"Long-lived environments persist indefinitely"," to avoid constant rebuilding. Developers request these environments from IT or DevOps teams, wait for approval, then need someone to manually provision the infrastructure. These environments are then tied to individual developers/teams rather than specific code changes, and they support ongoing development work across multiple projects.",[13,68,69,70,73],{},"While this eliminates rebuild overhead, ",[38,71,72],{},"it creates environment sprawl."," Environments accumulate without a clear termination date. Infrastructure costs climb as environments consume resources indefinitely.",[13,75,76,77,80],{},"Long-lived environments also suffer from ",[38,78,79],{},"\"config rot\""," — environments retain settings, cached data, or software versions from previous tests that can affect subsequent results. A test that should fail ends up passing due to the residue of previous testing.",[13,82,83],{},"Ultimately, managing long-lived environments is a manual process that slows development velocity and increases operational overhead.",[13,85,86,89],{},[38,87,88],{},"GitLab offers a third approach"," through “managed lifecycle environments.” This approach captures the benefits of both long-lived and pipeline lifecycle environments while avoiding the drawbacks.",[20,91,93],{"id":92},"solution-managed-lifecycle-environments","Solution: Managed lifecycle environments",[13,95,96,97,103],{},"GitLab's managed lifecycle environments tie virtual testing setups to merge requests (",[98,99,102],"a",{"href":100,"rel":101},"https://docs.gitlab.com/user/project/merge_requests/",[],"MRs",") rather than pipeline runs or individual developers. You can also think of them as “managed MR test environments.” When you create an MR for a new feature, GitLab automatically orchestrates the provisioning of necessary virtual testing environments. These environments persist throughout the entire feature development process.",[31,105,107],{"id":106},"key-benefits","Key benefits",[109,110,111,118,124],"ul",{},[112,113,114,117],"li",{},[38,115,116],{},"Persistent environments without rebuilding:"," The same virtual environment handles multiple pipeline runs as you iterate on your feature. Whether you're running MIL tests in MATLAB/Simulink or SIL tests on specialized embedded processors, the environment remains configured and ready.",[112,119,120,123],{},[38,121,122],{},"Automatic cleanup:"," When you merge your feature and delete the branch, GitLab automatically triggers environment cleanup, eliminating environment sprawl.",[112,125,126,129],{},[38,127,128],{},"Single source of truth:"," The MR records all build results, test outcomes, and environment metadata in one location. Team members can track progress and collaborate without shuffling between different tools or spreadsheets.",[13,131,132],{},"Watch this overview video to see how managed lifecycle environments work in practice:",[134,135,138,139],"figure",{"className":136},[137],"video_container","\n  ",[140,141,145],"iframe",{"src":142,"frameBorder":143,"allowFullScreen":144},"https://www.youtube.com/embed/9tfyVPK5DuI?si=Kj_xXNo02bnFBDhy","0","true"," ",[13,147,148],{},"GitLab automates the entire testing workflow. Each time you run firmware tests, GitLab orchestrates testing in the appropriate virtual environment, records results, and provides full visibility into every pipeline run. This approach transforms complex virtual testing from a manual, error-prone process into automated, reliable workflows.",[13,150,151,154],{},[38,152,153],{},"The result:"," Teams get reusable environments without runaway costs. And they increase efficiency while maintaining clean, isolated testing setups for each feature.",[13,156,157],{},"See a demonstration of managed lifecycle environments for testing firmware on virtual hardware:",[134,159,138,161],{"className":160},[137],[140,162,145],{"src":163,"frameBorder":143,"allowFullScreen":144},"https://www.youtube.com/embed/iWdY-kTlpH4?si=D6rpoulr9sv6Sl6E",[20,165,167],{"id":166},"business-impact","Business impact",[13,169,170],{},"GitLab's managed lifecycle environments deliver measurable improvements across embedded development workflows. Teams running MIL testing in MATLAB/Simulink and SIL testing on specialized processors like Infineon AURIX or BlackBerry QNX systems no longer face the tradeoff between constant environment rebuilds or uncontrolled environment sprawl. Instead, these complex virtual testing setups persist throughout feature development while automatically cleaning up when complete, enabling:",[109,172,173,176,179,182],{},[112,174,175],{},"Faster product development cycles",[112,177,178],{},"Shorter time-to-market",[112,180,181],{},"Lower infrastructure costs",[112,183,184],{},"Higher quality assurance",[20,186,188],{"id":187},"start-transforming-virtual-testing-today","Start transforming virtual testing today",[13,190,191,198],{},[98,192,195],{"href":193,"rel":194},"https://learn.gitlab.com/embedded-en/whitepaper-unlocking-agility-embedded-development",[],[38,196,197],{},"Download “Unlocking agility and avoiding runaway costs in embedded development”"," for a deeper exploration of managed lifecycle environments and learn how to accelerate embedded development workflows dramatically.",{"title":200,"searchDepth":201,"depth":201,"links":202},"",2,[203,208,211,212],{"id":22,"depth":201,"text":23,"children":204},[205,207],{"id":33,"depth":206,"text":34},3,{"id":59,"depth":206,"text":60},{"id":92,"depth":201,"text":93,"children":209},[210],{"id":106,"depth":206,"text":107},{"id":166,"depth":201,"text":167},{"id":187,"depth":201,"text":188},"engineering","2025-10-02","Discover how managed lifecycle environments streamline and automate virtual testing, delivering rapid feedback without environment sprawl or cost overruns.","md",null,true,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png",{},"/en-us/blog/how-gitlab-transforms-embedded-systems-testing-cycles",{"config":223,"title":5,"description":225},{"noIndex":224},false,"Discover how managed lifecycle environments streamline virtual testing, delivering rapid feedback without environment sprawl or cost overruns.","how-gitlab-transforms-embedded-systems-testing-cycles","en-us/blog/how-gitlab-transforms-embedded-systems-testing-cycles",[229,230,231],"product","embedded DevOps","testing","BlogPost","3xB6q7xjVxUy13B5wEovDw1JZKYBgF7mDzHt53BY8Yg",{"logo":235,"freeTrial":240,"sales":245,"login":250,"items":255,"search":582,"minimal":613,"duo":632,"switchNav":641,"pricingDeployment":652},{"config":236},{"href":237,"dataGaName":238,"dataGaLocation":239},"/","gitlab logo","header",{"text":241,"config":242},"Get free trial",{"href":243,"dataGaName":244,"dataGaLocation":239},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":246,"config":247},"Request a demo",{"href":248,"dataGaName":249,"dataGaLocation":239},"/sales/?contact-topic=request-demo","sales",{"text":251,"config":252},"Sign in",{"href":253,"dataGaName":254,"dataGaLocation":239},"https://gitlab.com/users/sign_in/","sign in",[256,285,385,390,504,560],{"text":257,"config":258,"menu":260},"Platform",{"dataNavLevelOne":259},"platform",{"type":261,"columns":262},"cards",[263,269,277],{"title":257,"description":264,"link":265},"The intelligent orchestration platform for DevSecOps",{"text":266,"config":267},"Explore our Platform",{"href":268,"dataGaName":259,"dataGaLocation":239},"/platform/",{"title":270,"description":271,"link":272},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":273,"config":274},"Meet GitLab Duo",{"href":275,"dataGaName":276,"dataGaLocation":239},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":278,"description":279,"link":280},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":281,"config":282},"Learn more",{"href":283,"dataGaName":284,"dataGaLocation":239},"/why-gitlab/","why gitlab",{"text":286,"left":218,"config":287,"menu":289},"Product",{"dataNavLevelOne":288},"solutions",{"type":290,"link":291,"columns":295,"feature":364},"lists",{"text":292,"config":293},"View all Solutions",{"href":294,"dataGaName":288,"dataGaLocation":239},"/solutions/",[296,320,343],{"title":297,"description":298,"link":299,"items":304},"Automation","CI/CD and automation to accelerate deployment",{"config":300},{"icon":301,"href":302,"dataGaName":303,"dataGaLocation":239},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[305,309,312,316],{"text":306,"config":307},"CI/CD",{"href":308,"dataGaLocation":239,"dataGaName":306},"/solutions/continuous-integration/",{"text":270,"config":310},{"href":275,"dataGaLocation":239,"dataGaName":311},"gitlab duo agent platform - product menu",{"text":313,"config":314},"Source Code Management",{"href":315,"dataGaLocation":239,"dataGaName":313},"/solutions/source-code-management/",{"text":317,"config":318},"Automated Software Delivery",{"href":302,"dataGaLocation":239,"dataGaName":319},"Automated software delivery",{"title":321,"description":322,"link":323,"items":328},"Security","Deliver code faster without compromising security",{"config":324},{"href":325,"dataGaName":326,"dataGaLocation":239,"icon":327},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[329,333,338],{"text":330,"config":331},"Application Security Testing",{"href":325,"dataGaName":332,"dataGaLocation":239},"Application security testing",{"text":334,"config":335},"Software Supply Chain Security",{"href":336,"dataGaLocation":239,"dataGaName":337},"/solutions/supply-chain/","Software supply chain security",{"text":339,"config":340},"Software Compliance",{"href":341,"dataGaName":342,"dataGaLocation":239},"/solutions/software-compliance/","software compliance",{"title":344,"link":345,"items":350},"Measurement",{"config":346},{"icon":347,"href":348,"dataGaName":349,"dataGaLocation":239},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[351,355,359],{"text":352,"config":353},"Visibility & Measurement",{"href":348,"dataGaLocation":239,"dataGaName":354},"Visibility and Measurement",{"text":356,"config":357},"Value Stream Management",{"href":358,"dataGaLocation":239,"dataGaName":356},"/solutions/value-stream-management/",{"text":360,"config":361},"Analytics & Insights",{"href":362,"dataGaLocation":239,"dataGaName":363},"/solutions/analytics-and-insights/","Analytics and insights",{"title":365,"type":290,"items":366},"GitLab for",[367,373,379],{"text":368,"config":369},"Enterprise",{"icon":370,"href":371,"dataGaLocation":239,"dataGaName":372},"Building","/enterprise/","enterprise",{"text":374,"config":375},"Small Business",{"icon":376,"href":377,"dataGaLocation":239,"dataGaName":378},"Work","/small-business/","small business",{"text":380,"config":381},"Public Sector",{"icon":382,"href":383,"dataGaLocation":239,"dataGaName":384},"Organization","/solutions/public-sector/","public sector",{"text":386,"config":387},"Pricing",{"href":388,"dataGaName":389,"dataGaLocation":239,"dataNavLevelOne":389},"/pricing/","pricing",{"text":391,"config":392,"menu":394},"Resources",{"dataNavLevelOne":393},"resources",{"type":290,"link":395,"columns":399,"feature":493},{"text":396,"config":397},"View all resources",{"href":398,"dataGaName":393,"dataGaLocation":239},"/resources/",[400,433,460],{"title":401,"items":402},"Getting started",[403,408,413,418,423,428],{"text":404,"config":405},"Install",{"href":406,"dataGaName":407,"dataGaLocation":239},"/install/","install",{"text":409,"config":410},"Quick start guides",{"href":411,"dataGaName":412,"dataGaLocation":239},"/get-started/","quick setup checklists",{"text":414,"config":415},"Learn",{"href":416,"dataGaLocation":239,"dataGaName":417},"https://university.gitlab.com/","learn",{"text":419,"config":420},"Product documentation",{"href":421,"dataGaName":422,"dataGaLocation":239},"https://docs.gitlab.com/","product documentation",{"text":424,"config":425},"Best practice videos",{"href":426,"dataGaName":427,"dataGaLocation":239},"/getting-started-videos/","best practice videos",{"text":429,"config":430},"Integrations",{"href":431,"dataGaName":432,"dataGaLocation":239},"/integrations/","integrations",{"title":434,"items":435},"Discover",[436,441,446,451,455],{"text":437,"config":438},"Customer success stories",{"href":439,"dataGaName":440,"dataGaLocation":239},"/customers/","customer success stories",{"text":442,"config":443},"Blog",{"href":444,"dataGaName":445,"dataGaLocation":239},"/blog/","blog",{"text":447,"config":448},"Demo Hub",{"href":449,"dataGaName":450,"dataGaLocation":239},"/demo-hub/","demo hub",{"text":452,"config":453},"The Source",{"href":454,"dataGaName":445,"dataGaLocation":239},"/the-source/",{"text":456,"config":457},"Remote",{"href":458,"dataGaName":459,"dataGaLocation":239},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":461,"items":462},"Connect",[463,468,473,478,483,488],{"text":464,"config":465},"GitLab Services",{"href":466,"dataGaName":467,"dataGaLocation":239},"/services/","services",{"text":469,"config":470},"Contribute",{"href":471,"dataGaName":472,"dataGaLocation":239},"https://contributors.gitlab.com","contribute",{"text":474,"config":475},"Community",{"href":476,"dataGaName":477,"dataGaLocation":239},"/community/","community",{"text":479,"config":480},"Forum",{"href":481,"dataGaName":482,"dataGaLocation":239},"https://forum.gitlab.com/","forum",{"text":484,"config":485},"Events",{"href":486,"dataGaName":487,"dataGaLocation":239},"/events/","events",{"text":489,"config":490},"Partners",{"href":491,"dataGaName":492,"dataGaLocation":239},"/partners/","partners",{"config":494,"title":497,"text":498,"link":499},{"background":495,"textColor":496},"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":500,"config":501},"Read the latest",{"href":502,"dataGaName":503,"dataGaLocation":239},"/whats-new/","whats new",{"text":505,"config":506,"menu":508},"Company",{"dataNavLevelOne":507},"company",{"type":290,"columns":509},[510],{"items":511},[512,517,523,525,530,535,540,545,550,555],{"text":513,"config":514},"About",{"href":515,"dataGaName":516,"dataGaLocation":239},"/company/","about",{"text":518,"config":519,"footerGa":522},"Jobs",{"href":520,"dataGaName":521,"dataGaLocation":239},"/jobs/","jobs",{"dataGaName":521},{"text":484,"config":524},{"href":486,"dataGaName":487,"dataGaLocation":239},{"text":526,"config":527},"Leadership",{"href":528,"dataGaName":529,"dataGaLocation":239},"/company/team/e-group/","leadership",{"text":531,"config":532},"Handbook",{"href":533,"dataGaName":534,"dataGaLocation":239},"https://handbook.gitlab.com/","handbook",{"text":536,"config":537},"Investor relations",{"href":538,"dataGaName":539,"dataGaLocation":239},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":541,"config":542},"Trust Center",{"href":543,"dataGaName":544,"dataGaLocation":239},"/security/","trust center",{"text":546,"config":547},"AI Transparency Center",{"href":548,"dataGaName":549,"dataGaLocation":239},"/ai-transparency-center/","ai transparency center",{"text":551,"config":552},"Newsletter",{"href":553,"dataGaName":554,"dataGaLocation":239},"/company/contact/#contact-forms","newsletter",{"text":556,"config":557},"Press",{"href":558,"dataGaName":559,"dataGaLocation":239},"/press/","press",{"text":561,"config":562,"menu":563},"Contact us",{"dataNavLevelOne":507},{"type":290,"columns":564},[565],{"items":566},[567,572,577],{"text":568,"config":569},"Talk to sales",{"href":570,"dataGaName":571,"dataGaLocation":239},"/sales/","talk to sales",{"text":573,"config":574},"Support portal",{"href":575,"dataGaName":576,"dataGaLocation":239},"https://support.gitlab.com/hc/en-us","support portal",{"text":578,"config":579},"Customer portal",{"href":580,"dataGaName":581,"dataGaLocation":239},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":583,"login":584,"suggestions":591},"Close",{"text":585,"link":586},"To search repositories and projects, login to",{"text":587,"config":588},"gitlab.com",{"href":253,"dataGaName":589,"dataGaLocation":590},"search login","search",{"text":592,"default":593},"Suggestions",[594,596,600,602,606,610],{"text":270,"config":595},{"href":275,"dataGaName":270,"dataGaLocation":590},{"text":597,"config":598},"Code Suggestions (AI)",{"href":599,"dataGaName":597,"dataGaLocation":590},"/solutions/code-suggestions/",{"text":306,"config":601},{"href":308,"dataGaName":306,"dataGaLocation":590},{"text":603,"config":604},"GitLab on AWS",{"href":605,"dataGaName":603,"dataGaLocation":590},"/partners/technology-partners/aws/",{"text":607,"config":608},"GitLab on Google Cloud",{"href":609,"dataGaName":607,"dataGaLocation":590},"/partners/technology-partners/google-cloud-platform/",{"text":611,"config":612},"Why GitLab?",{"href":283,"dataGaName":611,"dataGaLocation":590},{"freeTrial":614,"mobileIcon":619,"desktopIcon":624,"secondaryButton":627},{"text":615,"config":616},"Start free trial",{"href":617,"dataGaName":244,"dataGaLocation":618},"https://gitlab.com/-/trials/new/","nav",{"altText":620,"config":621},"Gitlab Icon",{"src":622,"dataGaName":623,"dataGaLocation":618},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":620,"config":625},{"src":626,"dataGaName":623,"dataGaLocation":618},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":628,"config":629},"Get Started",{"href":630,"dataGaName":631,"dataGaLocation":618},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":633,"mobileIcon":637,"desktopIcon":639},{"text":634,"config":635},"Learn more about GitLab Duo",{"href":275,"dataGaName":636,"dataGaLocation":618},"gitlab duo",{"altText":620,"config":638},{"src":622,"dataGaName":623,"dataGaLocation":618},{"altText":620,"config":640},{"src":626,"dataGaName":623,"dataGaLocation":618},{"button":642,"mobileIcon":647,"desktopIcon":649},{"text":643,"config":644},"/switch",{"href":645,"dataGaName":646,"dataGaLocation":618},"#contact","switch",{"altText":620,"config":648},{"src":622,"dataGaName":623,"dataGaLocation":618},{"altText":620,"config":650},{"src":651,"dataGaName":623,"dataGaLocation":618},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":653,"mobileIcon":658,"desktopIcon":660},{"text":654,"config":655},"Back to pricing",{"href":388,"dataGaName":656,"dataGaLocation":618,"icon":657},"back to pricing","GoBack",{"altText":620,"config":659},{"src":622,"dataGaName":623,"dataGaLocation":618},{"altText":620,"config":661},{"src":626,"dataGaName":623,"dataGaLocation":618},{"title":663,"titleMobile":664,"button":665,"config":670},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":281,"config":666},{"href":667,"dataGaName":668,"dataGaLocation":669},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":671,"disabled":224},"release",{"data":673},{"text":674,"source":675,"edit":681,"contribute":686,"config":691,"items":696,"minimal":906},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":676,"config":677},"View page source",{"href":678,"dataGaName":679,"dataGaLocation":680},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":682,"config":683},"Edit this page",{"href":684,"dataGaName":685,"dataGaLocation":680},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":687,"config":688},"Please contribute",{"href":689,"dataGaName":690,"dataGaLocation":680},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":692,"facebook":693,"youtube":694,"linkedin":695},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[697,744,798,842,874],{"title":386,"links":698,"subMenu":713},[699,703,708],{"text":700,"config":701},"View plans",{"href":388,"dataGaName":702,"dataGaLocation":680},"view plans",{"text":704,"config":705},"Why Premium?",{"href":706,"dataGaName":707,"dataGaLocation":680},"/pricing/premium/","why premium",{"text":709,"config":710},"Why Ultimate?",{"href":711,"dataGaName":712,"dataGaLocation":680},"/pricing/ultimate/","why ultimate",[714],{"title":715,"links":716},"Contact Us",[717,720,722,724,729,734,739],{"text":718,"config":719},"Contact sales",{"href":570,"dataGaName":249,"dataGaLocation":680},{"text":573,"config":721},{"href":575,"dataGaName":576,"dataGaLocation":680},{"text":578,"config":723},{"href":580,"dataGaName":581,"dataGaLocation":680},{"text":725,"config":726},"Status",{"href":727,"dataGaName":728,"dataGaLocation":680},"https://status.gitlab.com/","status",{"text":730,"config":731},"Terms of use",{"href":732,"dataGaName":733,"dataGaLocation":680},"/terms/","terms of use",{"text":735,"config":736},"Privacy statement",{"href":737,"dataGaName":738,"dataGaLocation":680},"/privacy/","privacy statement",{"text":740,"config":741},"Cookie preferences",{"dataGaName":742,"dataGaLocation":680,"id":743,"isOneTrustButton":218},"cookie preferences","ot-sdk-btn",{"title":286,"links":745,"subMenu":754},[746,750],{"text":747,"config":748},"DevSecOps platform",{"href":268,"dataGaName":749,"dataGaLocation":680},"devsecops platform",{"text":751,"config":752},"AI-Assisted Development",{"href":275,"dataGaName":753,"dataGaLocation":680},"ai-assisted development",[755],{"title":756,"links":757},"Topics",[758,763,768,773,778,783,788,793],{"text":759,"config":760},"CICD",{"href":761,"dataGaName":762,"dataGaLocation":680},"/topics/ci-cd/","cicd",{"text":764,"config":765},"GitOps",{"href":766,"dataGaName":767,"dataGaLocation":680},"/topics/gitops/","gitops",{"text":769,"config":770},"DevOps",{"href":771,"dataGaName":772,"dataGaLocation":680},"/topics/devops/","devops",{"text":774,"config":775},"Version Control",{"href":776,"dataGaName":777,"dataGaLocation":680},"/topics/version-control/","version control",{"text":779,"config":780},"DevSecOps",{"href":781,"dataGaName":782,"dataGaLocation":680},"/topics/devsecops/","devsecops",{"text":784,"config":785},"Cloud Native",{"href":786,"dataGaName":787,"dataGaLocation":680},"/topics/cloud-native/","cloud native",{"text":789,"config":790},"AI for Coding",{"href":791,"dataGaName":792,"dataGaLocation":680},"/topics/devops/ai-for-coding/","ai for coding",{"text":794,"config":795},"Agentic AI",{"href":796,"dataGaName":797,"dataGaLocation":680},"/topics/agentic-ai/","agentic ai",{"title":799,"links":800},"Solutions",[801,803,805,810,814,817,821,824,826,829,832,837],{"text":330,"config":802},{"href":325,"dataGaName":330,"dataGaLocation":680},{"text":319,"config":804},{"href":302,"dataGaName":303,"dataGaLocation":680},{"text":806,"config":807},"Agile development",{"href":808,"dataGaName":809,"dataGaLocation":680},"/solutions/agile-delivery/","agile delivery",{"text":811,"config":812},"SCM",{"href":315,"dataGaName":813,"dataGaLocation":680},"source code management",{"text":759,"config":815},{"href":308,"dataGaName":816,"dataGaLocation":680},"continuous integration & delivery",{"text":818,"config":819},"Value stream management",{"href":358,"dataGaName":820,"dataGaLocation":680},"value stream management",{"text":764,"config":822},{"href":823,"dataGaName":767,"dataGaLocation":680},"/solutions/gitops/",{"text":368,"config":825},{"href":371,"dataGaName":372,"dataGaLocation":680},{"text":827,"config":828},"Small business",{"href":377,"dataGaName":378,"dataGaLocation":680},{"text":830,"config":831},"Public sector",{"href":383,"dataGaName":384,"dataGaLocation":680},{"text":833,"config":834},"Education",{"href":835,"dataGaName":836,"dataGaLocation":680},"/solutions/education/","education",{"text":838,"config":839},"Financial services",{"href":840,"dataGaName":841,"dataGaLocation":680},"/solutions/finance/","financial services",{"title":391,"links":843},[844,846,848,850,853,855,858,860,862,864,866,868,870,872],{"text":404,"config":845},{"href":406,"dataGaName":407,"dataGaLocation":680},{"text":409,"config":847},{"href":411,"dataGaName":412,"dataGaLocation":680},{"text":414,"config":849},{"href":416,"dataGaName":417,"dataGaLocation":680},{"text":419,"config":851},{"href":421,"dataGaName":852,"dataGaLocation":680},"docs",{"text":442,"config":854},{"href":444,"dataGaName":445,"dataGaLocation":680},{"text":856,"config":857},"What's new",{"href":502,"dataGaName":503,"dataGaLocation":680},{"text":437,"config":859},{"href":439,"dataGaName":440,"dataGaLocation":680},{"text":456,"config":861},{"href":458,"dataGaName":459,"dataGaLocation":680},{"text":464,"config":863},{"href":466,"dataGaName":467,"dataGaLocation":680},{"text":469,"config":865},{"href":471,"dataGaName":472,"dataGaLocation":680},{"text":474,"config":867},{"href":476,"dataGaName":477,"dataGaLocation":680},{"text":479,"config":869},{"href":481,"dataGaName":482,"dataGaLocation":680},{"text":484,"config":871},{"href":486,"dataGaName":487,"dataGaLocation":680},{"text":489,"config":873},{"href":491,"dataGaName":492,"dataGaLocation":680},{"title":505,"links":875},[876,878,880,882,884,886,890,895,897,899,901],{"text":513,"config":877},{"href":515,"dataGaName":507,"dataGaLocation":680},{"text":518,"config":879},{"href":520,"dataGaName":521,"dataGaLocation":680},{"text":526,"config":881},{"href":528,"dataGaName":529,"dataGaLocation":680},{"text":531,"config":883},{"href":533,"dataGaName":534,"dataGaLocation":680},{"text":536,"config":885},{"href":538,"dataGaName":539,"dataGaLocation":680},{"text":887,"config":888},"Sustainability",{"href":889,"dataGaName":887,"dataGaLocation":680},"/sustainability/",{"text":891,"config":892},"Diversity, inclusion and belonging (DIB)",{"href":893,"dataGaName":894,"dataGaLocation":680},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":541,"config":896},{"href":543,"dataGaName":544,"dataGaLocation":680},{"text":551,"config":898},{"href":553,"dataGaName":554,"dataGaLocation":680},{"text":556,"config":900},{"href":558,"dataGaName":559,"dataGaLocation":680},{"text":902,"config":903},"Modern Slavery Transparency Statement",{"href":904,"dataGaName":905,"dataGaLocation":680},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":907},[908,911,914],{"text":909,"config":910},"Terms",{"href":732,"dataGaName":733,"dataGaLocation":680},{"text":912,"config":913},"Cookies",{"dataGaName":742,"dataGaLocation":680,"id":743,"isOneTrustButton":218},{"text":915,"config":916},"Privacy",{"href":737,"dataGaName":738,"dataGaLocation":680},[918,933],{"id":919,"title":920,"body":217,"config":921,"content":923,"description":217,"extension":927,"meta":928,"navigation":218,"path":929,"seo":930,"stem":931,"__hash__":932},"blogAuthors/en-us/blog/authors/matt-delaney.yml","Matt Delaney",{"template":922},"BlogAuthor",{"name":7,"config":924},{"headshot":925,"ctfId":926},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659749/Blog/Author%20Headshots/matt_delaney_headshot.png","6apeWdrqrZlMIdaxzV5NvZ","yml",{},"/en-us/blog/authors/matt-delaney",{},"en-us/blog/authors/matt-delaney","b9xB1BL3BNCvt-L4rxruJhCY6gCxTN4uuajDY6T9djU",{"id":934,"title":8,"body":217,"config":935,"content":936,"description":217,"extension":927,"meta":942,"navigation":218,"path":943,"seo":944,"stem":945,"__hash__":946},"blogAuthors/en-us/blog/authors/darwin-sanoy.yml",{"template":922},{"role":937,"name":8,"config":938},"Field Chief Cloud Architect",{"headshot":939,"linkedin":940,"ctfId":941},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659751/Blog/Author%20Headshots/Darwin-Sanoy-headshot-395-square-gitlab-teampage-avatar.png","https://linkedin.com/in/darwinsanoy","DarwinJS",{},"/en-us/blog/authors/darwin-sanoy",{},"en-us/blog/authors/darwin-sanoy","UkMMwmU5o2e6Y-wBltA9E_z96LvHuB-bG6VW9DsLzIY",[948,957,965],{"title":949,"description":950,"heroImage":951,"category":213,"date":952,"authors":953,"slug":956,"externalUrl":217},"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",[954,955],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":958,"description":959,"heroImage":960,"category":213,"date":961,"authors":962,"slug":964,"externalUrl":217},"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",[963],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":966,"description":967,"heroImage":968,"category":213,"date":969,"authors":970,"slug":972,"externalUrl":217},"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",[971],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":974},[975,989,1000,1012],{"id":976,"categories":977,"header":979,"text":980,"button":981,"image":986},"ai-modernization",[978],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":982,"config":983},"Get your AI maturity score",{"href":984,"dataGaName":985,"dataGaLocation":445},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":987},{"src":988},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":990,"categories":991,"header":992,"text":980,"button":993,"image":997},"devops-modernization",[229,782],"Are you just managing tools or shipping innovation?",{"text":994,"config":995},"Get your DevOps maturity score",{"href":996,"dataGaName":985,"dataGaLocation":445},"/assessments/devops-modernization-assessment/",{"config":998},{"src":999},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1001,"categories":1002,"header":1004,"text":980,"button":1005,"image":1009},"security-modernization",[1003],"security","Are you trading speed for security?",{"text":1006,"config":1007},"Get your security maturity score",{"href":1008,"dataGaName":985,"dataGaLocation":445},"/assessments/security-modernization-assessment/",{"config":1010},{"src":1011},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1013,"paths":1014,"header":1017,"text":1018,"button":1019,"image":1024},"github-azure-migration",[1015,1016],"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":1020,"config":1021},"See how GitLab compares to GitHub",{"href":1022,"dataGaName":1023,"dataGaLocation":445},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1025},{"src":999},{"header":1027,"blurb":1028,"button":1029,"secondaryButton":1034},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1030,"config":1031},"Get your free trial",{"href":1032,"dataGaName":244,"dataGaLocation":1033},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":718,"config":1035},{"href":570,"dataGaName":249,"dataGaLocation":1033},1786803751750]