[{"data":1,"prerenderedAt":966},["ShallowReactive",2],{"/blog/categories/devsecops/page/2":3,"navigation-en-us":21,"banner-en-us":449,"footer-en-us":459,"devsecops-category-page-total-items-en-us":702,"devsecops-category-page-featured-en-us":703,"devsecops-category-page-2-en-us":910},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":11,"description":6,"extension":13,"meta":14,"navigation":15,"path":16,"seo":17,"slug":6,"stem":19,"testContent":6,"type":6,"__hash__":20},"blogCategories/en-us/blog/categories/devsecops.yml","Devsecops",null,{"template":8,"slug":9,"hide":10},"BlogCategory","devsecops",false,{"name":12},"DevSecOps","yml",{},true,"/en-us/blog/categories/devsecops",{"title":12,"description":18},"Browse articles related to DevSecOps on the GitLab Blog","en-us/blog/categories/devsecops","CMEA5RSEzkIxqsAQ42q3nyQxbB-scYg0tjsE5w5w19w",{"logo":22,"freeTrial":27,"sales":32,"login":37,"items":42,"search":369,"minimal":400,"duo":419,"switchNav":428,"pricingDeployment":439},{"config":23},{"href":24,"dataGaName":25,"dataGaLocation":26},"/","gitlab logo","header",{"text":28,"config":29},"Get free trial",{"href":30,"dataGaName":31,"dataGaLocation":26},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":33,"config":34},"Request a demo",{"href":35,"dataGaName":36,"dataGaLocation":26},"/sales/?contact-topic=request-demo","sales",{"text":38,"config":39},"Sign in",{"href":40,"dataGaName":41,"dataGaLocation":26},"https://gitlab.com/users/sign_in/","sign in",[43,72,172,177,291,347],{"text":44,"config":45,"menu":47},"Platform",{"dataNavLevelOne":46},"platform",{"type":48,"columns":49},"cards",[50,56,64],{"title":44,"description":51,"link":52},"The intelligent orchestration platform for DevSecOps",{"text":53,"config":54},"Explore our Platform",{"href":55,"dataGaName":46,"dataGaLocation":26},"/platform/",{"title":57,"description":58,"link":59},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":60,"config":61},"Meet GitLab Duo",{"href":62,"dataGaName":63,"dataGaLocation":26},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":65,"description":66,"link":67},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":68,"config":69},"Learn more",{"href":70,"dataGaName":71,"dataGaLocation":26},"/why-gitlab/","why gitlab",{"text":73,"left":15,"config":74,"menu":76},"Product",{"dataNavLevelOne":75},"solutions",{"type":77,"link":78,"columns":82,"feature":151},"lists",{"text":79,"config":80},"View all Solutions",{"href":81,"dataGaName":75,"dataGaLocation":26},"/solutions/",[83,107,130],{"title":84,"description":85,"link":86,"items":91},"Automation","CI/CD and automation to accelerate deployment",{"config":87},{"icon":88,"href":89,"dataGaName":90,"dataGaLocation":26},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[92,96,99,103],{"text":93,"config":94},"CI/CD",{"href":95,"dataGaLocation":26,"dataGaName":93},"/solutions/continuous-integration/",{"text":57,"config":97},{"href":62,"dataGaLocation":26,"dataGaName":98},"gitlab duo agent platform - product menu",{"text":100,"config":101},"Source Code Management",{"href":102,"dataGaLocation":26,"dataGaName":100},"/solutions/source-code-management/",{"text":104,"config":105},"Automated Software Delivery",{"href":89,"dataGaLocation":26,"dataGaName":106},"Automated software delivery",{"title":108,"description":109,"link":110,"items":115},"Security","Deliver code faster without compromising security",{"config":111},{"href":112,"dataGaName":113,"dataGaLocation":26,"icon":114},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[116,120,125],{"text":117,"config":118},"Application Security Testing",{"href":112,"dataGaName":119,"dataGaLocation":26},"Application security testing",{"text":121,"config":122},"Software Supply Chain Security",{"href":123,"dataGaLocation":26,"dataGaName":124},"/solutions/supply-chain/","Software supply chain security",{"text":126,"config":127},"Software Compliance",{"href":128,"dataGaName":129,"dataGaLocation":26},"/solutions/software-compliance/","software compliance",{"title":131,"link":132,"items":137},"Measurement",{"config":133},{"icon":134,"href":135,"dataGaName":136,"dataGaLocation":26},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[138,142,146],{"text":139,"config":140},"Visibility & Measurement",{"href":135,"dataGaLocation":26,"dataGaName":141},"Visibility and Measurement",{"text":143,"config":144},"Value Stream Management",{"href":145,"dataGaLocation":26,"dataGaName":143},"/solutions/value-stream-management/",{"text":147,"config":148},"Analytics & Insights",{"href":149,"dataGaLocation":26,"dataGaName":150},"/solutions/analytics-and-insights/","Analytics and insights",{"title":152,"type":77,"items":153},"GitLab for",[154,160,166],{"text":155,"config":156},"Enterprise",{"icon":157,"href":158,"dataGaLocation":26,"dataGaName":159},"Building","/enterprise/","enterprise",{"text":161,"config":162},"Small Business",{"icon":163,"href":164,"dataGaLocation":26,"dataGaName":165},"Work","/small-business/","small business",{"text":167,"config":168},"Public Sector",{"icon":169,"href":170,"dataGaLocation":26,"dataGaName":171},"Organization","/solutions/public-sector/","public sector",{"text":173,"config":174},"Pricing",{"href":175,"dataGaName":176,"dataGaLocation":26,"dataNavLevelOne":176},"/pricing/","pricing",{"text":178,"config":179,"menu":181},"Resources",{"dataNavLevelOne":180},"resources",{"type":77,"link":182,"columns":186,"feature":280},{"text":183,"config":184},"View all resources",{"href":185,"dataGaName":180,"dataGaLocation":26},"/resources/",[187,220,247],{"title":188,"items":189},"Getting started",[190,195,200,205,210,215],{"text":191,"config":192},"Install",{"href":193,"dataGaName":194,"dataGaLocation":26},"/install/","install",{"text":196,"config":197},"Quick start guides",{"href":198,"dataGaName":199,"dataGaLocation":26},"/get-started/","quick setup checklists",{"text":201,"config":202},"Learn",{"href":203,"dataGaLocation":26,"dataGaName":204},"https://university.gitlab.com/","learn",{"text":206,"config":207},"Product documentation",{"href":208,"dataGaName":209,"dataGaLocation":26},"https://docs.gitlab.com/","product documentation",{"text":211,"config":212},"Best practice videos",{"href":213,"dataGaName":214,"dataGaLocation":26},"/getting-started-videos/","best practice videos",{"text":216,"config":217},"Integrations",{"href":218,"dataGaName":219,"dataGaLocation":26},"/integrations/","integrations",{"title":221,"items":222},"Discover",[223,228,233,238,242],{"text":224,"config":225},"Customer success stories",{"href":226,"dataGaName":227,"dataGaLocation":26},"/customers/","customer success stories",{"text":229,"config":230},"Blog",{"href":231,"dataGaName":232,"dataGaLocation":26},"/blog/","blog",{"text":234,"config":235},"Demo Hub",{"href":236,"dataGaName":237,"dataGaLocation":26},"/demo-hub/","demo hub",{"text":239,"config":240},"The Source",{"href":241,"dataGaName":232,"dataGaLocation":26},"/the-source/",{"text":243,"config":244},"Remote",{"href":245,"dataGaName":246,"dataGaLocation":26},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":248,"items":249},"Connect",[250,255,260,265,270,275],{"text":251,"config":252},"GitLab Services",{"href":253,"dataGaName":254,"dataGaLocation":26},"/services/","services",{"text":256,"config":257},"Contribute",{"href":258,"dataGaName":259,"dataGaLocation":26},"https://contributors.gitlab.com","contribute",{"text":261,"config":262},"Community",{"href":263,"dataGaName":264,"dataGaLocation":26},"/community/","community",{"text":266,"config":267},"Forum",{"href":268,"dataGaName":269,"dataGaLocation":26},"https://forum.gitlab.com/","forum",{"text":271,"config":272},"Events",{"href":273,"dataGaName":274,"dataGaLocation":26},"/events/","events",{"text":276,"config":277},"Partners",{"href":278,"dataGaName":279,"dataGaLocation":26},"/partners/","partners",{"config":281,"title":284,"text":285,"link":286},{"background":282,"textColor":283},"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":287,"config":288},"Read the latest",{"href":289,"dataGaName":290,"dataGaLocation":26},"/whats-new/","whats new",{"text":292,"config":293,"menu":295},"Company",{"dataNavLevelOne":294},"company",{"type":77,"columns":296},[297],{"items":298},[299,304,310,312,317,322,327,332,337,342],{"text":300,"config":301},"About",{"href":302,"dataGaName":303,"dataGaLocation":26},"/company/","about",{"text":305,"config":306,"footerGa":309},"Jobs",{"href":307,"dataGaName":308,"dataGaLocation":26},"/jobs/","jobs",{"dataGaName":308},{"text":271,"config":311},{"href":273,"dataGaName":274,"dataGaLocation":26},{"text":313,"config":314},"Leadership",{"href":315,"dataGaName":316,"dataGaLocation":26},"/company/team/e-group/","leadership",{"text":318,"config":319},"Handbook",{"href":320,"dataGaName":321,"dataGaLocation":26},"https://handbook.gitlab.com/","handbook",{"text":323,"config":324},"Investor relations",{"href":325,"dataGaName":326,"dataGaLocation":26},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":328,"config":329},"Trust Center",{"href":330,"dataGaName":331,"dataGaLocation":26},"/security/","trust center",{"text":333,"config":334},"AI Transparency Center",{"href":335,"dataGaName":336,"dataGaLocation":26},"/ai-transparency-center/","ai transparency center",{"text":338,"config":339},"Newsletter",{"href":340,"dataGaName":341,"dataGaLocation":26},"/company/contact/#contact-forms","newsletter",{"text":343,"config":344},"Press",{"href":345,"dataGaName":346,"dataGaLocation":26},"/press/","press",{"text":348,"config":349,"menu":350},"Contact us",{"dataNavLevelOne":294},{"type":77,"columns":351},[352],{"items":353},[354,359,364],{"text":355,"config":356},"Talk to sales",{"href":357,"dataGaName":358,"dataGaLocation":26},"/sales/","talk to sales",{"text":360,"config":361},"Support portal",{"href":362,"dataGaName":363,"dataGaLocation":26},"https://support.gitlab.com/hc/en-us","support portal",{"text":365,"config":366},"Customer portal",{"href":367,"dataGaName":368,"dataGaLocation":26},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":370,"login":371,"suggestions":378},"Close",{"text":372,"link":373},"To search repositories and projects, login to",{"text":374,"config":375},"gitlab.com",{"href":40,"dataGaName":376,"dataGaLocation":377},"search login","search",{"text":379,"default":380},"Suggestions",[381,383,387,389,393,397],{"text":57,"config":382},{"href":62,"dataGaName":57,"dataGaLocation":377},{"text":384,"config":385},"Code Suggestions (AI)",{"href":386,"dataGaName":384,"dataGaLocation":377},"/solutions/code-suggestions/",{"text":93,"config":388},{"href":95,"dataGaName":93,"dataGaLocation":377},{"text":390,"config":391},"GitLab on AWS",{"href":392,"dataGaName":390,"dataGaLocation":377},"/partners/technology-partners/aws/",{"text":394,"config":395},"GitLab on Google Cloud",{"href":396,"dataGaName":394,"dataGaLocation":377},"/partners/technology-partners/google-cloud-platform/",{"text":398,"config":399},"Why GitLab?",{"href":70,"dataGaName":398,"dataGaLocation":377},{"freeTrial":401,"mobileIcon":406,"desktopIcon":411,"secondaryButton":414},{"text":402,"config":403},"Start free trial",{"href":404,"dataGaName":31,"dataGaLocation":405},"https://gitlab.com/-/trials/new/","nav",{"altText":407,"config":408},"Gitlab Icon",{"src":409,"dataGaName":410,"dataGaLocation":405},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":407,"config":412},{"src":413,"dataGaName":410,"dataGaLocation":405},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":415,"config":416},"Get Started",{"href":417,"dataGaName":418,"dataGaLocation":405},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":420,"mobileIcon":424,"desktopIcon":426},{"text":421,"config":422},"Learn more about GitLab Duo",{"href":62,"dataGaName":423,"dataGaLocation":405},"gitlab duo",{"altText":407,"config":425},{"src":409,"dataGaName":410,"dataGaLocation":405},{"altText":407,"config":427},{"src":413,"dataGaName":410,"dataGaLocation":405},{"button":429,"mobileIcon":434,"desktopIcon":436},{"text":430,"config":431},"/switch",{"href":432,"dataGaName":433,"dataGaLocation":405},"#contact","switch",{"altText":407,"config":435},{"src":409,"dataGaName":410,"dataGaLocation":405},{"altText":407,"config":437},{"src":438,"dataGaName":410,"dataGaLocation":405},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":440,"mobileIcon":445,"desktopIcon":447},{"text":441,"config":442},"Back to pricing",{"href":175,"dataGaName":443,"dataGaLocation":405,"icon":444},"back to pricing","GoBack",{"altText":407,"config":446},{"src":409,"dataGaName":410,"dataGaLocation":405},{"altText":407,"config":448},{"src":413,"dataGaName":410,"dataGaLocation":405},{"title":450,"titleMobile":451,"button":452,"config":457},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":68,"config":453},{"href":454,"dataGaName":455,"dataGaLocation":456},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":458,"disabled":10},"release",{"data":460},{"text":461,"source":462,"edit":468,"contribute":473,"config":478,"items":483,"minimal":691},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":463,"config":464},"View page source",{"href":465,"dataGaName":466,"dataGaLocation":467},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":469,"config":470},"Edit this page",{"href":471,"dataGaName":472,"dataGaLocation":467},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":474,"config":475},"Please contribute",{"href":476,"dataGaName":477,"dataGaLocation":467},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":479,"facebook":480,"youtube":481,"linkedin":482},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[484,531,583,627,659],{"title":173,"links":485,"subMenu":500},[486,490,495],{"text":487,"config":488},"View plans",{"href":175,"dataGaName":489,"dataGaLocation":467},"view plans",{"text":491,"config":492},"Why Premium?",{"href":493,"dataGaName":494,"dataGaLocation":467},"/pricing/premium/","why premium",{"text":496,"config":497},"Why Ultimate?",{"href":498,"dataGaName":499,"dataGaLocation":467},"/pricing/ultimate/","why ultimate",[501],{"title":502,"links":503},"Contact Us",[504,507,509,511,516,521,526],{"text":505,"config":506},"Contact sales",{"href":357,"dataGaName":36,"dataGaLocation":467},{"text":360,"config":508},{"href":362,"dataGaName":363,"dataGaLocation":467},{"text":365,"config":510},{"href":367,"dataGaName":368,"dataGaLocation":467},{"text":512,"config":513},"Status",{"href":514,"dataGaName":515,"dataGaLocation":467},"https://status.gitlab.com/","status",{"text":517,"config":518},"Terms of use",{"href":519,"dataGaName":520,"dataGaLocation":467},"/terms/","terms of use",{"text":522,"config":523},"Privacy statement",{"href":524,"dataGaName":525,"dataGaLocation":467},"/privacy/","privacy statement",{"text":527,"config":528},"Cookie preferences",{"dataGaName":529,"dataGaLocation":467,"id":530,"isOneTrustButton":15},"cookie preferences","ot-sdk-btn",{"title":73,"links":532,"subMenu":541},[533,537],{"text":534,"config":535},"DevSecOps platform",{"href":55,"dataGaName":536,"dataGaLocation":467},"devsecops platform",{"text":538,"config":539},"AI-Assisted Development",{"href":62,"dataGaName":540,"dataGaLocation":467},"ai-assisted development",[542],{"title":543,"links":544},"Topics",[545,550,555,560,565,568,573,578],{"text":546,"config":547},"CICD",{"href":548,"dataGaName":549,"dataGaLocation":467},"/topics/ci-cd/","cicd",{"text":551,"config":552},"GitOps",{"href":553,"dataGaName":554,"dataGaLocation":467},"/topics/gitops/","gitops",{"text":556,"config":557},"DevOps",{"href":558,"dataGaName":559,"dataGaLocation":467},"/topics/devops/","devops",{"text":561,"config":562},"Version Control",{"href":563,"dataGaName":564,"dataGaLocation":467},"/topics/version-control/","version control",{"text":12,"config":566},{"href":567,"dataGaName":9,"dataGaLocation":467},"/topics/devsecops/",{"text":569,"config":570},"Cloud Native",{"href":571,"dataGaName":572,"dataGaLocation":467},"/topics/cloud-native/","cloud native",{"text":574,"config":575},"AI for Coding",{"href":576,"dataGaName":577,"dataGaLocation":467},"/topics/devops/ai-for-coding/","ai for coding",{"text":579,"config":580},"Agentic AI",{"href":581,"dataGaName":582,"dataGaLocation":467},"/topics/agentic-ai/","agentic ai",{"title":584,"links":585},"Solutions",[586,588,590,595,599,602,606,609,611,614,617,622],{"text":117,"config":587},{"href":112,"dataGaName":117,"dataGaLocation":467},{"text":106,"config":589},{"href":89,"dataGaName":90,"dataGaLocation":467},{"text":591,"config":592},"Agile development",{"href":593,"dataGaName":594,"dataGaLocation":467},"/solutions/agile-delivery/","agile delivery",{"text":596,"config":597},"SCM",{"href":102,"dataGaName":598,"dataGaLocation":467},"source code management",{"text":546,"config":600},{"href":95,"dataGaName":601,"dataGaLocation":467},"continuous integration & delivery",{"text":603,"config":604},"Value stream management",{"href":145,"dataGaName":605,"dataGaLocation":467},"value stream management",{"text":551,"config":607},{"href":608,"dataGaName":554,"dataGaLocation":467},"/solutions/gitops/",{"text":155,"config":610},{"href":158,"dataGaName":159,"dataGaLocation":467},{"text":612,"config":613},"Small business",{"href":164,"dataGaName":165,"dataGaLocation":467},{"text":615,"config":616},"Public sector",{"href":170,"dataGaName":171,"dataGaLocation":467},{"text":618,"config":619},"Education",{"href":620,"dataGaName":621,"dataGaLocation":467},"/solutions/education/","education",{"text":623,"config":624},"Financial services",{"href":625,"dataGaName":626,"dataGaLocation":467},"/solutions/finance/","financial services",{"title":178,"links":628},[629,631,633,635,638,640,643,645,647,649,651,653,655,657],{"text":191,"config":630},{"href":193,"dataGaName":194,"dataGaLocation":467},{"text":196,"config":632},{"href":198,"dataGaName":199,"dataGaLocation":467},{"text":201,"config":634},{"href":203,"dataGaName":204,"dataGaLocation":467},{"text":206,"config":636},{"href":208,"dataGaName":637,"dataGaLocation":467},"docs",{"text":229,"config":639},{"href":231,"dataGaName":232,"dataGaLocation":467},{"text":641,"config":642},"What's new",{"href":289,"dataGaName":290,"dataGaLocation":467},{"text":224,"config":644},{"href":226,"dataGaName":227,"dataGaLocation":467},{"text":243,"config":646},{"href":245,"dataGaName":246,"dataGaLocation":467},{"text":251,"config":648},{"href":253,"dataGaName":254,"dataGaLocation":467},{"text":256,"config":650},{"href":258,"dataGaName":259,"dataGaLocation":467},{"text":261,"config":652},{"href":263,"dataGaName":264,"dataGaLocation":467},{"text":266,"config":654},{"href":268,"dataGaName":269,"dataGaLocation":467},{"text":271,"config":656},{"href":273,"dataGaName":274,"dataGaLocation":467},{"text":276,"config":658},{"href":278,"dataGaName":279,"dataGaLocation":467},{"title":292,"links":660},[661,663,665,667,669,671,675,680,682,684,686],{"text":300,"config":662},{"href":302,"dataGaName":294,"dataGaLocation":467},{"text":305,"config":664},{"href":307,"dataGaName":308,"dataGaLocation":467},{"text":313,"config":666},{"href":315,"dataGaName":316,"dataGaLocation":467},{"text":318,"config":668},{"href":320,"dataGaName":321,"dataGaLocation":467},{"text":323,"config":670},{"href":325,"dataGaName":326,"dataGaLocation":467},{"text":672,"config":673},"Sustainability",{"href":674,"dataGaName":672,"dataGaLocation":467},"/sustainability/",{"text":676,"config":677},"Diversity, inclusion and belonging (DIB)",{"href":678,"dataGaName":679,"dataGaLocation":467},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":328,"config":681},{"href":330,"dataGaName":331,"dataGaLocation":467},{"text":338,"config":683},{"href":340,"dataGaName":341,"dataGaLocation":467},{"text":343,"config":685},{"href":345,"dataGaName":346,"dataGaLocation":467},{"text":687,"config":688},"Modern Slavery Transparency Statement",{"href":689,"dataGaName":690,"dataGaLocation":467},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":692},[693,696,699],{"text":694,"config":695},"Terms",{"href":519,"dataGaName":520,"dataGaLocation":467},{"text":697,"config":698},"Cookies",{"dataGaName":529,"dataGaLocation":467,"id":530,"isOneTrustButton":15},{"text":700,"config":701},"Privacy",{"href":524,"dataGaName":525,"dataGaLocation":467},162,{"id":704,"title":705,"authors":706,"body":708,"category":9,"date":893,"description":894,"extension":895,"externalUrl":6,"faq":6,"featured":10,"heroImage":896,"meta":897,"navigation":15,"path":898,"seo":899,"slug":901,"stem":902,"tags":903,"template":908,"updatedDate":6,"__hash__":909},"blogPosts/en-us/blog/gitaly-on-kubernetes-generally-available.md","Consolidate your GitLab stack with Gitaly on Kubernetes",[707],"Olivier Campeau",{"type":709,"value":710,"toc":885},"minimark",[711,722,727,730,739,764,767,776,779,832,835,844,848,851,860,864,878],[712,713,714,715,721],"p",{},"With ",[716,717,720],"a",{"href":718,"rel":719},"https://about.gitlab.com/whats-new/",[],"GitLab 18.11"," came good news for teams running GitLab on Kubernetes: Gitaly on Kubernetes is now generally available. Teams hosting GitLab on Kubernetes previously faced the challenge of maintaining a hybrid setup — running most GitLab components in Kubernetes while keeping Gitaly on virtual machines. This hybrid architecture made day-to-day operations more complex for those teams. Those days are over; Gitaly on Kubernetes is now an officially supported deployment option.",[723,724,726],"h3",{"id":725},"the-road-to-kubernetes","The road to Kubernetes",[712,728,729],{},"Gitaly has some hard requirements that don't translate naturally into a Kubernetes environment.",[712,731,732,733,738],{},"Git operations can be memory-intensive and their usage patterns are difficult to predict. To shield the main Gitaly process from out-of-memory (OOM) events and avoid downtime, Gitaly ",[716,734,737],{"href":735,"rel":736},"https://docs.gitlab.com/administration/gitaly/cgroups/",[],"can be configured to run each Git process inside a dedicated cgroup",". In this setup, the Gitaly process lives in a separate cgroup from those used by Git processes. If a Git process exceeds its cgroup's memory limit and gets terminated, the main Gitaly process remains unaffected.",[712,740,741,742,746,747,752,753,755,756,759,760,763],{},"Making this setup work in a Kubernetes Pod required additional work. Most Kubernetes clusters use ",[743,744,745],"code",{},"containerd"," as their container runtime, and ",[716,748,751],{"href":749,"rel":750},"https://github.com/containerd/containerd/issues/10924",[],"until recently",", ",[743,754,745],{}," only allowed containers to write to ",[743,757,758],{},"cgroupfs"," if they were running in privileged mode. The solution was to mount ",[743,761,762],{},"/sys/fs/cgroup"," via an init container and make the path writable.",[712,765,766],{},"Pod restarts also required additional work. On a virtual machine, Omnibus can upgrade the Gitaly binary in place and reload gracefully by keeping the socket open while swapping out the process. On Kubernetes though, when a StatefulSet pod is replaced — whether due to a Helm upgrade, a node drain, or a configuration change — the Gitaly Pods are stopped and restarted. It's a hard stop, not a graceful reload. For Gitaly sharded for example, which does not offer high-availability, that means downtime which might not be acceptable for some customers.",[712,768,769,770,775],{},"Our solution was to make ",[716,771,774],{"href":772,"rel":773},"https://docs.gitlab.com/administration/settings/gitaly_timeouts/#gitaly-client-retries",[],"client retries configurable",". By configuring Gitaly clients — such as Rails — to retry requests long enough for Gitaly to restart and become available again, users may notice slightly higher latency during that brief window, but requests will ultimately succeed and downtime is avoided.",[712,777,778],{},"To confirm that client retries effectively eliminated downtime during upgrades, we ran a series of benchmarks. We executed common Git operations against two GitLab instances — one with Gitaly on VMs, and another on Kubernetes — then triggered an upgrade mid-test and tracked request success rates. The results:",[780,781,782,798],"table",{},[783,784,785],"thead",{},[786,787,788,792,795],"tr",{},[789,790,791],"th",{},"Operation",[789,793,794],{},"VM Success Rate",[789,796,797],{},"Kubernetes Success Rate",[799,800,801,812,822],"tbody",{},[786,802,803,807,810],{},[804,805,806],"td",{},"git clone",[804,808,809],{},"100%",[804,811,809],{},[786,813,814,817,819],{},[804,815,816],{},"git pull",[804,818,809],{},[804,820,821],{},"99.16%",[786,823,824,827,830],{},[804,825,826],{},"git push",[804,828,829],{},"99.66%",[804,831,809],{},[833,834],"br",{},[712,836,837,838,843],{},"The numbers are nearly identical across both environments. What makes these results especially encouraging is the nature of Kubernetes itself — a Pod restart means an abrupt process termination and immediate socket closure, yet success rates remained this high. Full 100% success across every operation would require our high-availability solution, ",[716,839,842],{"href":840,"rel":841},"https://docs.gitlab.com/administration/gitaly/praefect/",[],"Gitaly Cluster (Praefect)",", which doesn't yet support Kubernetes — though that's actively being worked on, with general availability status on the horizon.",[723,845,847],{"id":846},"what-gitaly-on-kubernetes-means-for-you","What Gitaly on Kubernetes means for you",[712,849,850],{},"If you're running GitLab in hybrid mode — with some components on Kubernetes and Gitaly on VMs — you can now consolidate your infrastructure by moving Gitaly into the cluster. This eliminates the need to maintain and monitor a separate VM fleet alongside your Kubernetes nodes, bringing your entire GitLab stack under a single Kubernetes-managed environment.",[712,852,853,854,859],{},"If you're adopting GitLab for the first time and you already operate software on Kubernetes, you now benefit from a fully Kubernetes-native GitLab deployment provided with our ",[716,855,858],{"href":856,"rel":857},"https://gitlab.com/gitlab-org/charts/gitlab",[],"Helm chart",".",[723,861,863],{"id":862},"installing-gitaly-on-kubernetes","Installing Gitaly on Kubernetes",[712,865,866,867,871,872,877],{},"The recommended way to deploy Gitaly on Kubernetes is through the ",[716,868,870],{"href":856,"rel":869},[],"GitLab Helm chart",". Before getting started, it's worth reading through the ",[716,873,876],{"href":874,"rel":875},"https://docs.gitlab.com/administration/gitaly/kubernetes/",[],"Gitaly on Kubernetes documentation",", which covers key configuration guidance and helps you avoid common pitfalls.",[712,879,880,881,884],{},"Gitaly can be deployed either as part of a full GitLab installation, or as an external component. The ",[716,882,876],{"href":874,"rel":883},[]," covers both scenarios.",{"title":886,"searchDepth":887,"depth":887,"links":888},"",2,[889,891,892],{"id":725,"depth":890,"text":726},3,{"id":846,"depth":890,"text":847},{"id":862,"depth":890,"text":863},"2026-05-07","Discover how to install Gitaly on Kubernetes, which is now generally available.","md","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756500636/wmey6kqzzuhirk88w2de.png",{},"/en-us/blog/gitaly-on-kubernetes-generally-available",{"config":900,"title":705,"description":894},{"noIndex":10},"gitaly-on-kubernetes-generally-available","en-us/blog/gitaly-on-kubernetes-generally-available",[904,905,551,906,907],"kubernetes","git","features","product","BlogPost","l7vAzJZMKt-gTSP40nARjDkmPBiDV_J9MtxErIaTO1A",[911,918,925,930,937,942,947,952,959],{"title":912,"heroImage":913,"category":9,"description":914,"authors":915,"slug":917,"externalUrl":6},"Develop C++ unit testing with Catch2, JUnit, and GitLab CI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659684/Blog/Hero%20Images/AdobeStock_479904468__1_.jpg","Learn how to set up, write, and automate C++ unit tests using Catch2 with GitLab CI/CD. See examples from a working air quality app project and AI-powered help from GitLab Duo.",[916],"Fatima Sarah Khalid","develop-c-unit-testing-with-catch2-junit-and-gitlab-ci",{"title":919,"heroImage":920,"category":9,"description":921,"authors":922,"slug":924,"externalUrl":6},"New Scheduled Reports Generation tool simplifies value stream management","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669134/Blog/Hero%20Images/blog-image-template-1800x945__17_.png","Proactively receive the most recent metrics from the GitLab Value Streams Dashboard, streamlining the reporting process. This walkthrough shows you how.",[923],"Haim Snir","new-scheduled-reports-generation-tool-simplifies-value-stream-management",{"title":926,"heroImage":927,"category":9,"description":928,"authors":6,"slug":6,"externalUrl":929},"GitLab 17.1 Release","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669047/Blog/Hero%20Images/product-gl17-blog-release-cover-17-1-0093-1800x945-fy25.png","GitLab 17.1 released with Model registry available in beta and multiple GitLab Duo Code Suggestions in VS Code.","https://docs.gitlab.com/releases/17/gitlab-17-1-released/",{"title":931,"heroImage":932,"category":9,"description":933,"authors":934,"slug":936,"externalUrl":6},"Combine GitLab webhooks and Twilio for SMS alerts on DevSecOps platform","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099013/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2814%29_6VTUA8mUhOZNDaRVNPeKwl_1750099012960.png","Configure GitLab webhooks with SMS alerts to instantly get feedback on new and existing issues within a project and enable teams to react quickly to project- and group-level changes.",[935],"Ted Gieschen","combine-gitlab-webhooks-and-twilio-for-sms-alerts-on-devsecops-platform",{"title":938,"heroImage":939,"category":9,"description":940,"authors":6,"slug":6,"externalUrl":941},"GitLab 17.0 Release","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665762/Blog/Hero%20Images/blog-gl17-release-hero-17-0-93-1800x945-fy25__1_.png","GitLab 17.0 released with generally available CI/CD Catalog and AI Impact analytics dashboard.","https://docs.gitlab.com/releases/17/gitlab-17-0-released/",{"title":943,"heroImage":944,"category":9,"description":945,"authors":6,"slug":6,"externalUrl":946},"GitLab Patch Release: 16.11.1, 16.10.4, 16.9.6","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662877/Blog/Hero%20Images/security-cover-new.png","Learn more about GitLab Patch Release: 16.11.1, 16.10.4, 16.9.6 for GitLab Community Edition (CE) and Enterprise Edition (EE).","https://docs.gitlab.com/releases/patches/patch-release-gitlab-16-11-1-released/",{"title":948,"heroImage":949,"category":9,"description":950,"authors":6,"slug":6,"externalUrl":951},"GitLab 16.11 Release","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099004/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%284%29_1od9f5DGEA0ntKLVnJbA2p_1750099004258.png","GitLab 16.11 released with GitLab Duo Chat general availability","https://docs.gitlab.com/releases/16/gitlab-16-11-released/",{"title":953,"heroImage":954,"category":9,"description":955,"authors":956,"slug":958,"externalUrl":6},"Interactive: Take a guided tour of the DevSecOps workflow","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668969/Blog/Hero%20Images/blog-image-template-1800x945__1800_x_945_px_.png","Explore GitLab's recommended best practices for DevSecOps with a detailed visual depiction of the main steps in the development lifecycle.",[957],"Itzik Gan Baruch","interactive-take-a-guided-tour-of-the-devsecops-workflow",{"title":960,"heroImage":961,"category":9,"description":962,"authors":963,"slug":965,"externalUrl":6},"Top 10 GitLab workflow hacks you need to know","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099361/Blog/Hero%20Images/Blog/Hero%20Images/lightvisibility_lightvisibility.png_1750099361252.png","A GitLab product manager shares her favorite tricks to navigate quickly and efficiently around the GitLab DevSecOps Platform and to boost team collaboration.",[964],"Amanda Rueda","top-10-gitlab-workflow-hacks-you-need-to-know",1786803779520]