[{"data":1,"prerenderedAt":996},["ShallowReactive",2],{"/blog/stageless-pipelines":3,"navigation-en-us":208,"banner-en-us":636,"footer-en-us":646,"blog-post-authors-en-us-Dov Hershkovitch":891,"blog-related-posts-en-us-stageless-pipelines":906,"blog-promotions-en-us":932,"next-steps-en-us":986},{"id":4,"title":5,"authors":6,"body":8,"category":187,"date":188,"description":189,"extension":190,"externalUrl":191,"faq":191,"featured":192,"heroImage":193,"meta":194,"navigation":195,"path":196,"seo":197,"slug":201,"stem":202,"tags":203,"template":206,"updatedDate":191,"__hash__":207},"blogPosts/en-us/blog/stageless-pipelines.md","Write a stageless CI/CD pipeline using GitLab 14.2",[7],"Dov Hershkovitch",{"type":9,"value":10,"toc":178},"minimark",[11,40,45,54,57,61,76,93,97,109,123,127,145,159,163,166,169],[12,13,14,15,21,22,30,31,36,37,39],"p",{},"GitLab CI/CD technology has historically divided a pipeline into stages based on the typical development workflow. Now that ",[16,17,20],"a",{"href":18,"rel":19},"https://docs.gitlab.com/releases/",[],"GitLab 14.2 has launched",", users can speed up cycle times by using the ",[16,23,26],{"href":24,"rel":25},"https://docs.gitlab.com/ci/yaml/#needs",[],[27,28,29],"code",{},"needs"," command to write a complete CI/CD pipeline with every job in the single stage. In fact, you can omit stages completely and have a ",[16,32,35],{"href":33,"rel":34},"https://docs.gitlab.com/releases/#stageless-pipelines",[],"\"stageless\" pipeline"," that executes entirely based on the ",[27,38,29],{}," dependencies.",[41,42,44],"h2",{"id":43},"understanding-stages","Understanding stages",[12,46,47,48,53],{},"In GitLab CI/CD, you use ",[16,49,52],{"href":50,"rel":51},"https://docs.gitlab.com/ci/yaml/#stages",[],"stages"," to group jobs based on the development workflow and control the order of execution for CI/CD jobs.",[12,55,56],{},"Pipelines execute each stage in order, where all jobs in a single stage run in parallel. After a stage completes, the pipeline moves on to execute the next stage and runs those jobs, and the process continues like this until the pipeline completes or a job fails. If a job fails, the jobs in later stages don't start at all.",[41,58,60],{"id":59},"history-of-stages-in-gitlab-cicd","History of stages in GitLab CI/CD",[12,62,63,64,67,68,71,72,75],{},"When we first designed GitLab CI/CD, we knew that in a continuous integration workflow you build and test software every time a developer pushes code to the repository. The use of stages in GitLab CI/CD helped establish a mental model of how a pipeline will execute. By default, stages are ordered as: ",[27,65,66],{},"build",", ",[27,69,70],{},"test",", and ",[27,73,74],{},"deploy"," - so all stages execute in a logical order that matches a development workflow. The first step is to build the code, and if that works, the next step is to test it. If the tests pass, then you deploy the application.",[12,77,78,79,82,83,86,87,89,90,92],{},"Of course, you can actually create as many stages as you like and order them as desired. We also introduced the ",[27,80,81],{},".pre"," and ",[27,84,85],{},".post"," stages which are predefined stages that let you set certain jobs to always run at the beginning (",[27,88,81],{},") or end (",[27,91,85],{},") of your pipeline. GitLab CI/CD used stages for the past few years.",[41,94,96],{"id":95},"starting-to-break-out-of-stage-order","Starting to break out of stage order",[12,98,99,100,105,106,108],{},"Last year we introduced the ",[16,101,103],{"href":24,"rel":102},[],[27,104,29],{}," keyword which allows a user to create a Directed Acyclic Graphs (DAG) to speed up the pipeline. A job that uses the ",[27,107,29],{}," keyword creates a dependency between it and one or more different jobs in earlier stages. The job is allowed to start as soon as the earlier jobs finish, skipping the stage order to speed up the pipeline.",[12,110,111,112,114,115,119,120,122],{},"In a sense, you can think of a pipeline that only uses stages as the same as a pipeline that uses ",[27,113,29],{}," – except every job \"needs\" every job in the previous stage. On the other hand, if jobs in a pipeline ",[116,117,118],"em",{},"do"," use ",[27,121,29],{},", they only \"need\" the exact jobs that will allow them to complete successfully. They shouldn't need all the jobs in the previous stage. For example, there's no need for a ruby test job to wait for a javascript linter to complete.",[41,124,126],{"id":125},"stageless-pipelines-become-reality","Stageless pipelines become reality",[12,128,129,130,132,133,135,136,138,139,144],{},"The ",[27,131,29],{}," keyword quickly became popular among our users and helped optimize and accelerate CI/CD pipelines. However it had one limitation: A ",[27,134,29],{}," dependency could only exist between the jobs in different stages. This limitation was a pain point for our users because they wanted to configure the pipeline based on the ",[27,137,29],{}," dependencies only and drop the use of stages completely. The importance of adding this functionality became clear because this was one of the most popular ",[16,140,143],{"href":141,"rel":142},"https://gitlab.com/gitlab-org/gitlab/-/issues/30632",[],"feature requests"," for GitLab CI/CD.",[12,146,147,148,155,156,158],{},"Now in GitLab 14.2, ",[16,149,151,152,154],{"href":33,"rel":150},[],"you can finally define a whole pipeline using nothing but ",[27,153,29],{}," to control the execution order",". No more need to define any stages if you use ",[27,157,29],{},"!",[41,160,162],{"id":161},"are-we-getting-rid-of-stages","Are we getting rid of stages?",[12,164,165],{},"No, we do not have any plans to remove stages from our GitLab CI/CD, and it still works great for those that prefer this workflow.",[12,167,168],{},"In fact if you build a \"stageless\" pipeline, there will still be at least one stage that holds all the jobs. Removing stages was never the goal. Our goal is still to support you in building better and faster pipelines, while providing you with the high degree of flexibility you want.",[12,170,171,172,177],{},"As always, share any thoughts, comments, or questions, by ",[16,173,176],{"href":174,"rel":175},"https://gitlab.com/gitlab-org/gitlab/-/issues/new?issue%5Bmilestone_id%5D=",[],"opening an issue in GitLab"," and mentioning me (@dhershkovitch).",{"title":179,"searchDepth":180,"depth":180,"links":181},"",2,[182,183,184,185,186],{"id":43,"depth":180,"text":44},{"id":59,"depth":180,"text":60},{"id":95,"depth":180,"text":96},{"id":125,"depth":180,"text":126},{"id":161,"depth":180,"text":162},"engineering","2021-08-24","With GitLab 14.2, you can write a complete CI/CD pipeline without defining any stages.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679507/Blog/Hero%20Images/ci-cd.png",{},true,"/en-us/blog/stageless-pipelines",{"title":5,"description":189,"ogTitle":5,"ogDescription":189,"noIndex":192,"ogImage":193,"ogUrl":198,"ogSiteName":199,"ogType":200,"canonicalUrls":198},"https://about.gitlab.com/blog/stageless-pipelines","https://about.gitlab.com","article","stageless-pipelines","en-us/blog/stageless-pipelines",[204,205],"CI","CD","BlogPost","rMx2UtvwU2CoQubNm5xPYk_onW52P8kCRtH2aapNoUw",{"logo":209,"freeTrial":214,"sales":219,"login":224,"items":229,"search":556,"minimal":587,"duo":606,"switchNav":615,"pricingDeployment":626},{"config":210},{"href":211,"dataGaName":212,"dataGaLocation":213},"/","gitlab logo","header",{"text":215,"config":216},"Get free trial",{"href":217,"dataGaName":218,"dataGaLocation":213},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":220,"config":221},"Request a demo",{"href":222,"dataGaName":223,"dataGaLocation":213},"/sales/?contact-topic=request-demo","sales",{"text":225,"config":226},"Sign in",{"href":227,"dataGaName":228,"dataGaLocation":213},"https://gitlab.com/users/sign_in/","sign in",[230,259,359,364,478,534],{"text":231,"config":232,"menu":234},"Platform",{"dataNavLevelOne":233},"platform",{"type":235,"columns":236},"cards",[237,243,251],{"title":231,"description":238,"link":239},"The intelligent orchestration platform for DevSecOps",{"text":240,"config":241},"Explore our Platform",{"href":242,"dataGaName":233,"dataGaLocation":213},"/platform/",{"title":244,"description":245,"link":246},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":247,"config":248},"Meet GitLab Duo",{"href":249,"dataGaName":250,"dataGaLocation":213},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":252,"description":253,"link":254},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":255,"config":256},"Learn more",{"href":257,"dataGaName":258,"dataGaLocation":213},"/why-gitlab/","why gitlab",{"text":260,"left":195,"config":261,"menu":263},"Product",{"dataNavLevelOne":262},"solutions",{"type":264,"link":265,"columns":269,"feature":338},"lists",{"text":266,"config":267},"View all Solutions",{"href":268,"dataGaName":262,"dataGaLocation":213},"/solutions/",[270,294,317],{"title":271,"description":272,"link":273,"items":278},"Automation","CI/CD and automation to accelerate deployment",{"config":274},{"icon":275,"href":276,"dataGaName":277,"dataGaLocation":213},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[279,283,286,290],{"text":280,"config":281},"CI/CD",{"href":282,"dataGaLocation":213,"dataGaName":280},"/solutions/continuous-integration/",{"text":244,"config":284},{"href":249,"dataGaLocation":213,"dataGaName":285},"gitlab duo agent platform - product menu",{"text":287,"config":288},"Source Code Management",{"href":289,"dataGaLocation":213,"dataGaName":287},"/solutions/source-code-management/",{"text":291,"config":292},"Automated Software Delivery",{"href":276,"dataGaLocation":213,"dataGaName":293},"Automated software delivery",{"title":295,"description":296,"link":297,"items":302},"Security","Deliver code faster without compromising security",{"config":298},{"href":299,"dataGaName":300,"dataGaLocation":213,"icon":301},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[303,307,312],{"text":304,"config":305},"Application Security Testing",{"href":299,"dataGaName":306,"dataGaLocation":213},"Application security testing",{"text":308,"config":309},"Software Supply Chain Security",{"href":310,"dataGaLocation":213,"dataGaName":311},"/solutions/supply-chain/","Software supply chain security",{"text":313,"config":314},"Software Compliance",{"href":315,"dataGaName":316,"dataGaLocation":213},"/solutions/software-compliance/","software compliance",{"title":318,"link":319,"items":324},"Measurement",{"config":320},{"icon":321,"href":322,"dataGaName":323,"dataGaLocation":213},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[325,329,333],{"text":326,"config":327},"Visibility & Measurement",{"href":322,"dataGaLocation":213,"dataGaName":328},"Visibility and Measurement",{"text":330,"config":331},"Value Stream Management",{"href":332,"dataGaLocation":213,"dataGaName":330},"/solutions/value-stream-management/",{"text":334,"config":335},"Analytics & Insights",{"href":336,"dataGaLocation":213,"dataGaName":337},"/solutions/analytics-and-insights/","Analytics and insights",{"title":339,"type":264,"items":340},"GitLab for",[341,347,353],{"text":342,"config":343},"Enterprise",{"icon":344,"href":345,"dataGaLocation":213,"dataGaName":346},"Building","/enterprise/","enterprise",{"text":348,"config":349},"Small Business",{"icon":350,"href":351,"dataGaLocation":213,"dataGaName":352},"Work","/small-business/","small business",{"text":354,"config":355},"Public Sector",{"icon":356,"href":357,"dataGaLocation":213,"dataGaName":358},"Organization","/solutions/public-sector/","public sector",{"text":360,"config":361},"Pricing",{"href":362,"dataGaName":363,"dataGaLocation":213,"dataNavLevelOne":363},"/pricing/","pricing",{"text":365,"config":366,"menu":368},"Resources",{"dataNavLevelOne":367},"resources",{"type":264,"link":369,"columns":373,"feature":467},{"text":370,"config":371},"View all resources",{"href":372,"dataGaName":367,"dataGaLocation":213},"/resources/",[374,407,434],{"title":375,"items":376},"Getting started",[377,382,387,392,397,402],{"text":378,"config":379},"Install",{"href":380,"dataGaName":381,"dataGaLocation":213},"/install/","install",{"text":383,"config":384},"Quick start guides",{"href":385,"dataGaName":386,"dataGaLocation":213},"/get-started/","quick setup checklists",{"text":388,"config":389},"Learn",{"href":390,"dataGaLocation":213,"dataGaName":391},"https://university.gitlab.com/","learn",{"text":393,"config":394},"Product documentation",{"href":395,"dataGaName":396,"dataGaLocation":213},"https://docs.gitlab.com/","product documentation",{"text":398,"config":399},"Best practice videos",{"href":400,"dataGaName":401,"dataGaLocation":213},"/getting-started-videos/","best practice videos",{"text":403,"config":404},"Integrations",{"href":405,"dataGaName":406,"dataGaLocation":213},"/integrations/","integrations",{"title":408,"items":409},"Discover",[410,415,420,425,429],{"text":411,"config":412},"Customer success stories",{"href":413,"dataGaName":414,"dataGaLocation":213},"/customers/","customer success stories",{"text":416,"config":417},"Blog",{"href":418,"dataGaName":419,"dataGaLocation":213},"/blog/","blog",{"text":421,"config":422},"Demo Hub",{"href":423,"dataGaName":424,"dataGaLocation":213},"/demo-hub/","demo hub",{"text":426,"config":427},"The Source",{"href":428,"dataGaName":419,"dataGaLocation":213},"/the-source/",{"text":430,"config":431},"Remote",{"href":432,"dataGaName":433,"dataGaLocation":213},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":435,"items":436},"Connect",[437,442,447,452,457,462],{"text":438,"config":439},"GitLab Services",{"href":440,"dataGaName":441,"dataGaLocation":213},"/services/","services",{"text":443,"config":444},"Contribute",{"href":445,"dataGaName":446,"dataGaLocation":213},"https://contributors.gitlab.com","contribute",{"text":448,"config":449},"Community",{"href":450,"dataGaName":451,"dataGaLocation":213},"/community/","community",{"text":453,"config":454},"Forum",{"href":455,"dataGaName":456,"dataGaLocation":213},"https://forum.gitlab.com/","forum",{"text":458,"config":459},"Events",{"href":460,"dataGaName":461,"dataGaLocation":213},"/events/","events",{"text":463,"config":464},"Partners",{"href":465,"dataGaName":466,"dataGaLocation":213},"/partners/","partners",{"config":468,"title":471,"text":472,"link":473},{"background":469,"textColor":470},"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":474,"config":475},"Read the latest",{"href":476,"dataGaName":477,"dataGaLocation":213},"/whats-new/","whats new",{"text":479,"config":480,"menu":482},"Company",{"dataNavLevelOne":481},"company",{"type":264,"columns":483},[484],{"items":485},[486,491,497,499,504,509,514,519,524,529],{"text":487,"config":488},"About",{"href":489,"dataGaName":490,"dataGaLocation":213},"/company/","about",{"text":492,"config":493,"footerGa":496},"Jobs",{"href":494,"dataGaName":495,"dataGaLocation":213},"/jobs/","jobs",{"dataGaName":495},{"text":458,"config":498},{"href":460,"dataGaName":461,"dataGaLocation":213},{"text":500,"config":501},"Leadership",{"href":502,"dataGaName":503,"dataGaLocation":213},"/company/team/e-group/","leadership",{"text":505,"config":506},"Handbook",{"href":507,"dataGaName":508,"dataGaLocation":213},"https://handbook.gitlab.com/","handbook",{"text":510,"config":511},"Investor relations",{"href":512,"dataGaName":513,"dataGaLocation":213},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":515,"config":516},"Trust Center",{"href":517,"dataGaName":518,"dataGaLocation":213},"/security/","trust center",{"text":520,"config":521},"AI Transparency Center",{"href":522,"dataGaName":523,"dataGaLocation":213},"/ai-transparency-center/","ai transparency center",{"text":525,"config":526},"Newsletter",{"href":527,"dataGaName":528,"dataGaLocation":213},"/company/contact/#contact-forms","newsletter",{"text":530,"config":531},"Press",{"href":532,"dataGaName":533,"dataGaLocation":213},"/press/","press",{"text":535,"config":536,"menu":537},"Contact us",{"dataNavLevelOne":481},{"type":264,"columns":538},[539],{"items":540},[541,546,551],{"text":542,"config":543},"Talk to sales",{"href":544,"dataGaName":545,"dataGaLocation":213},"/sales/","talk to sales",{"text":547,"config":548},"Support portal",{"href":549,"dataGaName":550,"dataGaLocation":213},"https://support.gitlab.com/hc/en-us","support portal",{"text":552,"config":553},"Customer portal",{"href":554,"dataGaName":555,"dataGaLocation":213},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":557,"login":558,"suggestions":565},"Close",{"text":559,"link":560},"To search repositories and projects, login to",{"text":561,"config":562},"gitlab.com",{"href":227,"dataGaName":563,"dataGaLocation":564},"search login","search",{"text":566,"default":567},"Suggestions",[568,570,574,576,580,584],{"text":244,"config":569},{"href":249,"dataGaName":244,"dataGaLocation":564},{"text":571,"config":572},"Code Suggestions (AI)",{"href":573,"dataGaName":571,"dataGaLocation":564},"/solutions/code-suggestions/",{"text":280,"config":575},{"href":282,"dataGaName":280,"dataGaLocation":564},{"text":577,"config":578},"GitLab on AWS",{"href":579,"dataGaName":577,"dataGaLocation":564},"/partners/technology-partners/aws/",{"text":581,"config":582},"GitLab on Google Cloud",{"href":583,"dataGaName":581,"dataGaLocation":564},"/partners/technology-partners/google-cloud-platform/",{"text":585,"config":586},"Why GitLab?",{"href":257,"dataGaName":585,"dataGaLocation":564},{"freeTrial":588,"mobileIcon":593,"desktopIcon":598,"secondaryButton":601},{"text":589,"config":590},"Start free trial",{"href":591,"dataGaName":218,"dataGaLocation":592},"https://gitlab.com/-/trials/new/","nav",{"altText":594,"config":595},"Gitlab Icon",{"src":596,"dataGaName":597,"dataGaLocation":592},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":594,"config":599},{"src":600,"dataGaName":597,"dataGaLocation":592},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":602,"config":603},"Get Started",{"href":604,"dataGaName":605,"dataGaLocation":592},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":607,"mobileIcon":611,"desktopIcon":613},{"text":608,"config":609},"Learn more about GitLab Duo",{"href":249,"dataGaName":610,"dataGaLocation":592},"gitlab duo",{"altText":594,"config":612},{"src":596,"dataGaName":597,"dataGaLocation":592},{"altText":594,"config":614},{"src":600,"dataGaName":597,"dataGaLocation":592},{"button":616,"mobileIcon":621,"desktopIcon":623},{"text":617,"config":618},"/switch",{"href":619,"dataGaName":620,"dataGaLocation":592},"#contact","switch",{"altText":594,"config":622},{"src":596,"dataGaName":597,"dataGaLocation":592},{"altText":594,"config":624},{"src":625,"dataGaName":597,"dataGaLocation":592},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":627,"mobileIcon":632,"desktopIcon":634},{"text":628,"config":629},"Back to pricing",{"href":362,"dataGaName":630,"dataGaLocation":592,"icon":631},"back to pricing","GoBack",{"altText":594,"config":633},{"src":596,"dataGaName":597,"dataGaLocation":592},{"altText":594,"config":635},{"src":600,"dataGaName":597,"dataGaLocation":592},{"title":637,"titleMobile":638,"button":639,"config":644},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":255,"config":640},{"href":641,"dataGaName":642,"dataGaLocation":643},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":645,"disabled":192},"release",{"data":647},{"text":648,"source":649,"edit":655,"contribute":660,"config":665,"items":670,"minimal":880},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":650,"config":651},"View page source",{"href":652,"dataGaName":653,"dataGaLocation":654},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":656,"config":657},"Edit this page",{"href":658,"dataGaName":659,"dataGaLocation":654},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":661,"config":662},"Please contribute",{"href":663,"dataGaName":664,"dataGaLocation":654},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":666,"facebook":667,"youtube":668,"linkedin":669},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[671,718,772,816,848],{"title":360,"links":672,"subMenu":687},[673,677,682],{"text":674,"config":675},"View plans",{"href":362,"dataGaName":676,"dataGaLocation":654},"view plans",{"text":678,"config":679},"Why Premium?",{"href":680,"dataGaName":681,"dataGaLocation":654},"/pricing/premium/","why premium",{"text":683,"config":684},"Why Ultimate?",{"href":685,"dataGaName":686,"dataGaLocation":654},"/pricing/ultimate/","why ultimate",[688],{"title":689,"links":690},"Contact Us",[691,694,696,698,703,708,713],{"text":692,"config":693},"Contact sales",{"href":544,"dataGaName":223,"dataGaLocation":654},{"text":547,"config":695},{"href":549,"dataGaName":550,"dataGaLocation":654},{"text":552,"config":697},{"href":554,"dataGaName":555,"dataGaLocation":654},{"text":699,"config":700},"Status",{"href":701,"dataGaName":702,"dataGaLocation":654},"https://status.gitlab.com/","status",{"text":704,"config":705},"Terms of use",{"href":706,"dataGaName":707,"dataGaLocation":654},"/terms/","terms of use",{"text":709,"config":710},"Privacy statement",{"href":711,"dataGaName":712,"dataGaLocation":654},"/privacy/","privacy statement",{"text":714,"config":715},"Cookie preferences",{"dataGaName":716,"dataGaLocation":654,"id":717,"isOneTrustButton":195},"cookie preferences","ot-sdk-btn",{"title":260,"links":719,"subMenu":728},[720,724],{"text":721,"config":722},"DevSecOps platform",{"href":242,"dataGaName":723,"dataGaLocation":654},"devsecops platform",{"text":725,"config":726},"AI-Assisted Development",{"href":249,"dataGaName":727,"dataGaLocation":654},"ai-assisted development",[729],{"title":730,"links":731},"Topics",[732,737,742,747,752,757,762,767],{"text":733,"config":734},"CICD",{"href":735,"dataGaName":736,"dataGaLocation":654},"/topics/ci-cd/","cicd",{"text":738,"config":739},"GitOps",{"href":740,"dataGaName":741,"dataGaLocation":654},"/topics/gitops/","gitops",{"text":743,"config":744},"DevOps",{"href":745,"dataGaName":746,"dataGaLocation":654},"/topics/devops/","devops",{"text":748,"config":749},"Version Control",{"href":750,"dataGaName":751,"dataGaLocation":654},"/topics/version-control/","version control",{"text":753,"config":754},"DevSecOps",{"href":755,"dataGaName":756,"dataGaLocation":654},"/topics/devsecops/","devsecops",{"text":758,"config":759},"Cloud Native",{"href":760,"dataGaName":761,"dataGaLocation":654},"/topics/cloud-native/","cloud native",{"text":763,"config":764},"AI for Coding",{"href":765,"dataGaName":766,"dataGaLocation":654},"/topics/devops/ai-for-coding/","ai for coding",{"text":768,"config":769},"Agentic AI",{"href":770,"dataGaName":771,"dataGaLocation":654},"/topics/agentic-ai/","agentic ai",{"title":773,"links":774},"Solutions",[775,777,779,784,788,791,795,798,800,803,806,811],{"text":304,"config":776},{"href":299,"dataGaName":304,"dataGaLocation":654},{"text":293,"config":778},{"href":276,"dataGaName":277,"dataGaLocation":654},{"text":780,"config":781},"Agile development",{"href":782,"dataGaName":783,"dataGaLocation":654},"/solutions/agile-delivery/","agile delivery",{"text":785,"config":786},"SCM",{"href":289,"dataGaName":787,"dataGaLocation":654},"source code management",{"text":733,"config":789},{"href":282,"dataGaName":790,"dataGaLocation":654},"continuous integration & delivery",{"text":792,"config":793},"Value stream management",{"href":332,"dataGaName":794,"dataGaLocation":654},"value stream management",{"text":738,"config":796},{"href":797,"dataGaName":741,"dataGaLocation":654},"/solutions/gitops/",{"text":342,"config":799},{"href":345,"dataGaName":346,"dataGaLocation":654},{"text":801,"config":802},"Small business",{"href":351,"dataGaName":352,"dataGaLocation":654},{"text":804,"config":805},"Public sector",{"href":357,"dataGaName":358,"dataGaLocation":654},{"text":807,"config":808},"Education",{"href":809,"dataGaName":810,"dataGaLocation":654},"/solutions/education/","education",{"text":812,"config":813},"Financial services",{"href":814,"dataGaName":815,"dataGaLocation":654},"/solutions/finance/","financial services",{"title":365,"links":817},[818,820,822,824,827,829,832,834,836,838,840,842,844,846],{"text":378,"config":819},{"href":380,"dataGaName":381,"dataGaLocation":654},{"text":383,"config":821},{"href":385,"dataGaName":386,"dataGaLocation":654},{"text":388,"config":823},{"href":390,"dataGaName":391,"dataGaLocation":654},{"text":393,"config":825},{"href":395,"dataGaName":826,"dataGaLocation":654},"docs",{"text":416,"config":828},{"href":418,"dataGaName":419,"dataGaLocation":654},{"text":830,"config":831},"What's new",{"href":476,"dataGaName":477,"dataGaLocation":654},{"text":411,"config":833},{"href":413,"dataGaName":414,"dataGaLocation":654},{"text":430,"config":835},{"href":432,"dataGaName":433,"dataGaLocation":654},{"text":438,"config":837},{"href":440,"dataGaName":441,"dataGaLocation":654},{"text":443,"config":839},{"href":445,"dataGaName":446,"dataGaLocation":654},{"text":448,"config":841},{"href":450,"dataGaName":451,"dataGaLocation":654},{"text":453,"config":843},{"href":455,"dataGaName":456,"dataGaLocation":654},{"text":458,"config":845},{"href":460,"dataGaName":461,"dataGaLocation":654},{"text":463,"config":847},{"href":465,"dataGaName":466,"dataGaLocation":654},{"title":479,"links":849},[850,852,854,856,858,860,864,869,871,873,875],{"text":487,"config":851},{"href":489,"dataGaName":481,"dataGaLocation":654},{"text":492,"config":853},{"href":494,"dataGaName":495,"dataGaLocation":654},{"text":500,"config":855},{"href":502,"dataGaName":503,"dataGaLocation":654},{"text":505,"config":857},{"href":507,"dataGaName":508,"dataGaLocation":654},{"text":510,"config":859},{"href":512,"dataGaName":513,"dataGaLocation":654},{"text":861,"config":862},"Sustainability",{"href":863,"dataGaName":861,"dataGaLocation":654},"/sustainability/",{"text":865,"config":866},"Diversity, inclusion and belonging (DIB)",{"href":867,"dataGaName":868,"dataGaLocation":654},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":515,"config":870},{"href":517,"dataGaName":518,"dataGaLocation":654},{"text":525,"config":872},{"href":527,"dataGaName":528,"dataGaLocation":654},{"text":530,"config":874},{"href":532,"dataGaName":533,"dataGaLocation":654},{"text":876,"config":877},"Modern Slavery Transparency Statement",{"href":878,"dataGaName":879,"dataGaLocation":654},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":881},[882,885,888],{"text":883,"config":884},"Terms",{"href":706,"dataGaName":707,"dataGaLocation":654},{"text":886,"config":887},"Cookies",{"dataGaName":716,"dataGaLocation":654,"id":717,"isOneTrustButton":195},{"text":889,"config":890},"Privacy",{"href":711,"dataGaName":712,"dataGaLocation":654},[892],{"id":893,"title":7,"body":191,"config":894,"content":896,"description":191,"extension":900,"meta":901,"navigation":195,"path":902,"seo":903,"stem":904,"__hash__":905},"blogAuthors/en-us/blog/authors/dov-hershkovitch.yml",{"template":895},"BlogAuthor",{"name":7,"config":897},{"headshot":898,"ctfId":899},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665628/Blog/Author%20Headshots/dhershkovitch-headshot.png","dhershkovitch","yml",{},"/en-us/blog/authors/dov-hershkovitch",{},"en-us/blog/authors/dov-hershkovitch","Iz4JuWpp9w9MyL2i-FC6CmJS1rnfmg76IL873W1AcMU",[907,916,924],{"title":908,"description":909,"heroImage":910,"category":187,"date":911,"authors":912,"slug":915,"externalUrl":191},"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",[913,914],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":917,"description":918,"heroImage":919,"category":187,"date":920,"authors":921,"slug":923,"externalUrl":191},"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",[922],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":925,"description":926,"heroImage":927,"category":187,"date":928,"authors":929,"slug":931,"externalUrl":191},"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",[930],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":933},[934,948,960,972],{"id":935,"categories":936,"header":938,"text":939,"button":940,"image":945},"ai-modernization",[937],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":941,"config":942},"Get your AI maturity score",{"href":943,"dataGaName":944,"dataGaLocation":419},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":946},{"src":947},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":949,"categories":950,"header":952,"text":939,"button":953,"image":957},"devops-modernization",[951,756],"product","Are you just managing tools or shipping innovation?",{"text":954,"config":955},"Get your DevOps maturity score",{"href":956,"dataGaName":944,"dataGaLocation":419},"/assessments/devops-modernization-assessment/",{"config":958},{"src":959},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":961,"categories":962,"header":964,"text":939,"button":965,"image":969},"security-modernization",[963],"security","Are you trading speed for security?",{"text":966,"config":967},"Get your security maturity score",{"href":968,"dataGaName":944,"dataGaLocation":419},"/assessments/security-modernization-assessment/",{"config":970},{"src":971},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":973,"paths":974,"header":977,"text":978,"button":979,"image":984},"github-azure-migration",[975,976],"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":980,"config":981},"See how GitLab compares to GitHub",{"href":982,"dataGaName":983,"dataGaLocation":419},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":985},{"src":959},{"header":987,"blurb":988,"button":989,"secondaryButton":994},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":990,"config":991},"Get your free trial",{"href":992,"dataGaName":218,"dataGaLocation":993},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":692,"config":995},{"href":544,"dataGaName":223,"dataGaLocation":993},1786803774876]