[{"data":1,"prerenderedAt":971},["ShallowReactive",2],{"/blog/categories/devsecops/page/17":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-17-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,931,936,943,950,957,964],{"title":912,"heroImage":913,"category":9,"description":914,"authors":915,"slug":917,"externalUrl":6},"GitLab's Kubernetes Operator with support for Red Hat OpenShift is now generally available","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667835/Blog/Hero%20Images/generic-bot-bg.png","GitLab Operator will allow teams to run production instances of GitLab on Kubernetes platforms.",[916],"William Chia","open-shift-ga",{"title":919,"heroImage":920,"category":9,"description":921,"authors":922,"slug":924,"externalUrl":6},"DevOps salaries in 2021: where do you rank?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663397/Blog/Hero%20Images/logoforblogpost.jpg","Another surprise benefit of working on a DevOps platform? A higher salary! Here's why DevOps salaries are going up, and where to find the biggest paychecks.",[923],"Sharon Gaudin","a-look-at-devops-salaries",{"title":926,"heroImage":920,"category":9,"description":927,"authors":928,"slug":930,"externalUrl":6},"Want faster releases? Your answer lies in automated software testing","The trouble with testing? Nearly everything! Here's why automated software testing is so hard to get right, and how a DevOps platform can help.",[929],"Valerie Silverthorne","want-faster-releases-your-answer-lies-in-automated-software-testing",{"title":932,"heroImage":920,"category":9,"description":933,"authors":934,"slug":935,"externalUrl":6},"Have DevOps jobs to fill? Try these 3 strategies to hire and retain","So many DevOps jobs posted, so few options to fill them. Here's why hiring and retaining developers is tricky, and how 3 thoughtful strategies, including a DevOps platform, can help.",[929],"have-devops-jobs-to-fill-try-these-3-strategies-to-hire-and-retain",{"title":937,"heroImage":938,"category":9,"description":939,"authors":940,"slug":942,"externalUrl":6},"It's time to build more accessible software. A DevOps platform can help","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667281/Blog/Hero%20Images/accessibility.jpg","Shifting accessibility left can make building accessible products simpler and more efficient. A DevOps platform makes it easier to customize and adjust priorities to suit your business needs.",[941],"Sara Kassabian","how-the-devops-platform-makes-building-accessible-software-easier",{"title":944,"heroImage":945,"category":9,"description":946,"authors":947,"slug":949,"externalUrl":6},"How QPage achieved automatic deployment and efficiency using the GitLab DevOps Platform","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664472/Blog/Hero%20Images/gitlabflatlogomap.png","QPage went from a homegrown CI/CD solution to the GitLab DevOps Platform and found more benefits than expected.",[948],"GitLab","qpage-on-the-devops-platform",{"title":951,"heroImage":952,"category":9,"description":953,"authors":954,"slug":956,"externalUrl":6},"How Weet integrates localization into the GitLab pipeline with Lokalise","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668543/Blog/Hero%20Images/lokalise_cover.png","Localization is an increasingly important option for users. Here's how to integrate localization in your GitLab pipeline.",[955],"Alexander Pereverzevs","lessons-weet-learned-lokalise",{"title":958,"heroImage":959,"category":9,"description":960,"authors":961,"slug":963,"externalUrl":6},"How to deploy the GitLab Agent for Kubernetes with limited permissions","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668655/Blog/Hero%20Images/seabass-creatives-U3m4_cKbUfc-unsplash.jpg"," Learn how to deploy the GitLab Agent for Kubernetes with Limited Permissions.",[962],"Fernando Diaz","setting-up-the-k-agent",{"title":965,"heroImage":966,"category":9,"description":967,"authors":968,"slug":970,"externalUrl":6},"How GitLab's 5 new code review features will make life easier","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667400/Blog/Hero%20Images/lagos-techie-unsplash.jpg","Code reviews are hard to get right. Here are five new features in our DevOps Platform designed to streamline code reviews and provide vital context.",[969],"Brendan O'Leary","5-code-review-features",1786803780117]