[{"data":1,"prerenderedAt":983},["ShallowReactive",2],{"/en-us/blog/gitaly-on-kubernetes-generally-available":3,"navigation-en-us":215,"banner-en-us":631,"footer-en-us":639,"blog-post-authors-en-us-Olivier Campeau":880,"blog-related-posts-en-us-gitaly-on-kubernetes-generally-available":895,"blog-promotions-en-us":920,"next-steps-en-us":973},{"id":4,"title":5,"authors":6,"body":8,"category":193,"date":194,"description":195,"extension":196,"externalUrl":197,"featured":198,"heroImage":199,"meta":200,"navigation":201,"path":202,"seo":203,"slug":205,"stem":206,"tags":207,"template":213,"updatedDate":197,"__hash__":214},"blogPosts/en-us/blog/gitaly-on-kubernetes-generally-available.md","Consolidate your GitLab stack with Gitaly on Kubernetes",[7],"Olivier Campeau",{"type":9,"value":10,"toc":185},"minimark",[11,22,27,30,39,64,67,76,79,132,135,144,148,151,160,164,178],[12,13,14,15,21],"p",{},"With ",[16,17,20],"a",{"href":18,"rel":19},"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.",[23,24,26],"h3",{"id":25},"the-road-to-kubernetes","The road to Kubernetes",[12,28,29],{},"Gitaly has some hard requirements that don't translate naturally into a Kubernetes environment.",[12,31,32,33,38],{},"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 ",[16,34,37],{"href":35,"rel":36},"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.",[12,40,41,42,46,47,52,53,55,56,59,60,63],{},"Making this setup work in a Kubernetes Pod required additional work. Most Kubernetes clusters use ",[43,44,45],"code",{},"containerd"," as their container runtime, and ",[16,48,51],{"href":49,"rel":50},"https://github.com/containerd/containerd/issues/10924",[],"until recently",", ",[43,54,45],{}," only allowed containers to write to ",[43,57,58],{},"cgroupfs"," if they were running in privileged mode. The solution was to mount ",[43,61,62],{},"/sys/fs/cgroup"," via an init container and make the path writable.",[12,65,66],{},"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.",[12,68,69,70,75],{},"Our solution was to make ",[16,71,74],{"href":72,"rel":73},"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.",[12,77,78],{},"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:",[80,81,82,98],"table",{},[83,84,85],"thead",{},[86,87,88,92,95],"tr",{},[89,90,91],"th",{},"Operation",[89,93,94],{},"VM Success Rate",[89,96,97],{},"Kubernetes Success Rate",[99,100,101,112,122],"tbody",{},[86,102,103,107,110],{},[104,105,106],"td",{},"git clone",[104,108,109],{},"100%",[104,111,109],{},[86,113,114,117,119],{},[104,115,116],{},"git pull",[104,118,109],{},[104,120,121],{},"99.16%",[86,123,124,127,130],{},[104,125,126],{},"git push",[104,128,129],{},"99.66%",[104,131,109],{},[133,134],"br",{},[12,136,137,138,143],{},"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, ",[16,139,142],{"href":140,"rel":141},"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.",[23,145,147],{"id":146},"what-gitaly-on-kubernetes-means-for-you","What Gitaly on Kubernetes means for you",[12,149,150],{},"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.",[12,152,153,154,159],{},"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 ",[16,155,158],{"href":156,"rel":157},"https://gitlab.com/gitlab-org/charts/gitlab",[],"Helm chart",".",[23,161,163],{"id":162},"installing-gitaly-on-kubernetes","Installing Gitaly on Kubernetes",[12,165,166,167,171,172,177],{},"The recommended way to deploy Gitaly on Kubernetes is through the ",[16,168,170],{"href":156,"rel":169},[],"GitLab Helm chart",". Before getting started, it's worth reading through the ",[16,173,176],{"href":174,"rel":175},"https://docs.gitlab.com/administration/gitaly/kubernetes/",[],"Gitaly on Kubernetes documentation",", which covers key configuration guidance and helps you avoid common pitfalls.",[12,179,180,181,184],{},"Gitaly can be deployed either as part of a full GitLab installation, or as an external component. The ",[16,182,176],{"href":174,"rel":183},[]," covers both scenarios.",{"title":186,"searchDepth":187,"depth":187,"links":188},"",2,[189,191,192],{"id":25,"depth":190,"text":26},3,{"id":146,"depth":190,"text":147},{"id":162,"depth":190,"text":163},"devsecops","2026-05-07","Discover how to install Gitaly on Kubernetes, which is now generally available.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1756500636/wmey6kqzzuhirk88w2de.png",{},true,"/en-us/blog/gitaly-on-kubernetes-generally-available",{"config":204,"title":5,"description":195},{"noIndex":198},"gitaly-on-kubernetes-generally-available","en-us/blog/gitaly-on-kubernetes-generally-available",[208,209,210,211,212],"kubernetes","git","GitOps","features","product","BlogPost","h8Mde6sfBLdBvD8tzBgm3MX_e2Q6LYcg_tvxOuF3jFA",{"logo":216,"freeTrial":221,"sales":226,"login":231,"items":236,"search":551,"minimal":582,"duo":601,"switchNav":610,"pricingDeployment":621},{"config":217},{"href":218,"dataGaName":219,"dataGaLocation":220},"/","gitlab logo","header",{"text":222,"config":223},"Get free trial",{"href":224,"dataGaName":225,"dataGaLocation":220},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":227,"config":228},"Talk to sales",{"href":229,"dataGaName":230,"dataGaLocation":220},"/sales/","sales",{"text":232,"config":233},"Sign in",{"href":234,"dataGaName":235,"dataGaLocation":220},"https://gitlab.com/users/sign_in/","sign in",[237,266,366,371,475,531],{"text":238,"config":239,"menu":241},"Platform",{"dataNavLevelOne":240},"platform",{"type":242,"columns":243},"cards",[244,250,258],{"title":238,"description":245,"link":246},"The intelligent orchestration platform for DevSecOps",{"text":247,"config":248},"Explore our Platform",{"href":249,"dataGaName":240,"dataGaLocation":220},"/platform/",{"title":251,"description":252,"link":253},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":254,"config":255},"Meet GitLab Duo",{"href":256,"dataGaName":257,"dataGaLocation":220},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":259,"description":260,"link":261},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":262,"config":263},"Learn more",{"href":264,"dataGaName":265,"dataGaLocation":220},"/why-gitlab/","why gitlab",{"text":267,"left":201,"config":268,"menu":270},"Product",{"dataNavLevelOne":269},"solutions",{"type":271,"link":272,"columns":276,"feature":345},"lists",{"text":273,"config":274},"View all Solutions",{"href":275,"dataGaName":269,"dataGaLocation":220},"/solutions/",[277,301,324],{"title":278,"description":279,"link":280,"items":285},"Automation","CI/CD and automation to accelerate deployment",{"config":281},{"icon":282,"href":283,"dataGaName":284,"dataGaLocation":220},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[286,290,293,297],{"text":287,"config":288},"CI/CD",{"href":289,"dataGaLocation":220,"dataGaName":287},"/solutions/continuous-integration/",{"text":251,"config":291},{"href":256,"dataGaLocation":220,"dataGaName":292},"gitlab duo agent platform - product menu",{"text":294,"config":295},"Source Code Management",{"href":296,"dataGaLocation":220,"dataGaName":294},"/solutions/source-code-management/",{"text":298,"config":299},"Automated Software Delivery",{"href":283,"dataGaLocation":220,"dataGaName":300},"Automated software delivery",{"title":302,"description":303,"link":304,"items":309},"Security","Deliver code faster without compromising security",{"config":305},{"href":306,"dataGaName":307,"dataGaLocation":220,"icon":308},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[310,314,319],{"text":311,"config":312},"Application Security Testing",{"href":306,"dataGaName":313,"dataGaLocation":220},"Application security testing",{"text":315,"config":316},"Software Supply Chain Security",{"href":317,"dataGaLocation":220,"dataGaName":318},"/solutions/supply-chain/","Software supply chain security",{"text":320,"config":321},"Software Compliance",{"href":322,"dataGaName":323,"dataGaLocation":220},"/solutions/software-compliance/","software compliance",{"title":325,"link":326,"items":331},"Measurement",{"config":327},{"icon":328,"href":329,"dataGaName":330,"dataGaLocation":220},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[332,336,340],{"text":333,"config":334},"Visibility & Measurement",{"href":329,"dataGaLocation":220,"dataGaName":335},"Visibility and Measurement",{"text":337,"config":338},"Value Stream Management",{"href":339,"dataGaLocation":220,"dataGaName":337},"/solutions/value-stream-management/",{"text":341,"config":342},"Analytics & Insights",{"href":343,"dataGaLocation":220,"dataGaName":344},"/solutions/analytics-and-insights/","Analytics and insights",{"title":346,"type":271,"items":347},"GitLab for",[348,354,360],{"text":349,"config":350},"Enterprise",{"icon":351,"href":352,"dataGaLocation":220,"dataGaName":353},"Building","/enterprise/","enterprise",{"text":355,"config":356},"Small Business",{"icon":357,"href":358,"dataGaLocation":220,"dataGaName":359},"Work","/small-business/","small business",{"text":361,"config":362},"Public Sector",{"icon":363,"href":364,"dataGaLocation":220,"dataGaName":365},"Organization","/solutions/public-sector/","public sector",{"text":367,"config":368},"Pricing",{"href":369,"dataGaName":370,"dataGaLocation":220,"dataNavLevelOne":370},"/pricing/","pricing",{"text":372,"config":373,"menu":375},"Resources",{"dataNavLevelOne":374},"resources",{"type":271,"link":376,"columns":380,"feature":464},{"text":377,"config":378},"View all resources",{"href":379,"dataGaName":374,"dataGaLocation":220},"/resources/",[381,414,436],{"title":382,"items":383},"Getting started",[384,389,394,399,404,409],{"text":385,"config":386},"Install",{"href":387,"dataGaName":388,"dataGaLocation":220},"/install/","install",{"text":390,"config":391},"Quick start guides",{"href":392,"dataGaName":393,"dataGaLocation":220},"/get-started/","quick setup checklists",{"text":395,"config":396},"Learn",{"href":397,"dataGaLocation":220,"dataGaName":398},"https://university.gitlab.com/","learn",{"text":400,"config":401},"Product documentation",{"href":402,"dataGaName":403,"dataGaLocation":220},"https://docs.gitlab.com/","product documentation",{"text":405,"config":406},"Best practice videos",{"href":407,"dataGaName":408,"dataGaLocation":220},"/getting-started-videos/","best practice videos",{"text":410,"config":411},"Integrations",{"href":412,"dataGaName":413,"dataGaLocation":220},"/integrations/","integrations",{"title":415,"items":416},"Discover",[417,422,427,431],{"text":418,"config":419},"Customer success stories",{"href":420,"dataGaName":421,"dataGaLocation":220},"/customers/","customer success stories",{"text":423,"config":424},"Blog",{"href":425,"dataGaName":426,"dataGaLocation":220},"/blog/","blog",{"text":428,"config":429},"The Source",{"href":430,"dataGaName":426,"dataGaLocation":220},"/the-source/",{"text":432,"config":433},"Remote",{"href":434,"dataGaName":435,"dataGaLocation":220},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":437,"items":438},"Connect",[439,444,449,454,459],{"text":440,"config":441},"GitLab Services",{"href":442,"dataGaName":443,"dataGaLocation":220},"/services/","services",{"text":445,"config":446},"Community",{"href":447,"dataGaName":448,"dataGaLocation":220},"/community/","community",{"text":450,"config":451},"Forum",{"href":452,"dataGaName":453,"dataGaLocation":220},"https://forum.gitlab.com/","forum",{"text":455,"config":456},"Events",{"href":457,"dataGaName":458,"dataGaLocation":220},"/events/","events",{"text":460,"config":461},"Partners",{"href":462,"dataGaName":463,"dataGaLocation":220},"/partners/","partners",{"config":465,"title":468,"text":469,"link":470},{"background":466,"textColor":467},"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":471,"config":472},"Read the latest",{"href":473,"dataGaName":474,"dataGaLocation":220},"/whats-new/","whats new",{"text":476,"config":477,"menu":479},"Company",{"dataNavLevelOne":478},"company",{"type":271,"columns":480},[481],{"items":482},[483,488,494,496,501,506,511,516,521,526],{"text":484,"config":485},"About",{"href":486,"dataGaName":487,"dataGaLocation":220},"/company/","about",{"text":489,"config":490,"footerGa":493},"Jobs",{"href":491,"dataGaName":492,"dataGaLocation":220},"/jobs/","jobs",{"dataGaName":492},{"text":455,"config":495},{"href":457,"dataGaName":458,"dataGaLocation":220},{"text":497,"config":498},"Leadership",{"href":499,"dataGaName":500,"dataGaLocation":220},"/company/team/e-group/","leadership",{"text":502,"config":503},"Handbook",{"href":504,"dataGaName":505,"dataGaLocation":220},"https://handbook.gitlab.com/","handbook",{"text":507,"config":508},"Investor relations",{"href":509,"dataGaName":510,"dataGaLocation":220},"https://ir.gitlab.com/","investor relations",{"text":512,"config":513},"Trust Center",{"href":514,"dataGaName":515,"dataGaLocation":220},"/security/","trust center",{"text":517,"config":518},"AI Transparency Center",{"href":519,"dataGaName":520,"dataGaLocation":220},"/ai-transparency-center/","ai transparency center",{"text":522,"config":523},"Newsletter",{"href":524,"dataGaName":525,"dataGaLocation":220},"/company/contact/#contact-forms","newsletter",{"text":527,"config":528},"Press",{"href":529,"dataGaName":530,"dataGaLocation":220},"/press/","press",{"text":532,"config":533,"menu":534},"Contact us",{"dataNavLevelOne":478},{"type":271,"columns":535},[536],{"items":537},[538,541,546],{"text":227,"config":539},{"href":229,"dataGaName":540,"dataGaLocation":220},"talk to sales",{"text":542,"config":543},"Support portal",{"href":544,"dataGaName":545,"dataGaLocation":220},"https://support.gitlab.com","support portal",{"text":547,"config":548},"Customer portal",{"href":549,"dataGaName":550,"dataGaLocation":220},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":552,"login":553,"suggestions":560},"Close",{"text":554,"link":555},"To search repositories and projects, login to",{"text":556,"config":557},"gitlab.com",{"href":234,"dataGaName":558,"dataGaLocation":559},"search login","search",{"text":561,"default":562},"Suggestions",[563,565,569,571,575,579],{"text":251,"config":564},{"href":256,"dataGaName":251,"dataGaLocation":559},{"text":566,"config":567},"Code Suggestions (AI)",{"href":568,"dataGaName":566,"dataGaLocation":559},"/solutions/code-suggestions/",{"text":287,"config":570},{"href":289,"dataGaName":287,"dataGaLocation":559},{"text":572,"config":573},"GitLab on AWS",{"href":574,"dataGaName":572,"dataGaLocation":559},"/partners/technology-partners/aws/",{"text":576,"config":577},"GitLab on Google Cloud",{"href":578,"dataGaName":576,"dataGaLocation":559},"/partners/technology-partners/google-cloud-platform/",{"text":580,"config":581},"Why GitLab?",{"href":264,"dataGaName":580,"dataGaLocation":559},{"freeTrial":583,"mobileIcon":588,"desktopIcon":593,"secondaryButton":596},{"text":584,"config":585},"Start free trial",{"href":586,"dataGaName":225,"dataGaLocation":587},"https://gitlab.com/-/trials/new/","nav",{"altText":589,"config":590},"Gitlab Icon",{"src":591,"dataGaName":592,"dataGaLocation":587},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":589,"config":594},{"src":595,"dataGaName":592,"dataGaLocation":587},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":597,"config":598},"Get Started",{"href":599,"dataGaName":600,"dataGaLocation":587},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":602,"mobileIcon":606,"desktopIcon":608},{"text":603,"config":604},"Learn more about GitLab Duo",{"href":256,"dataGaName":605,"dataGaLocation":587},"gitlab duo",{"altText":589,"config":607},{"src":591,"dataGaName":592,"dataGaLocation":587},{"altText":589,"config":609},{"src":595,"dataGaName":592,"dataGaLocation":587},{"button":611,"mobileIcon":616,"desktopIcon":618},{"text":612,"config":613},"/switch",{"href":614,"dataGaName":615,"dataGaLocation":587},"#contact","switch",{"altText":589,"config":617},{"src":591,"dataGaName":592,"dataGaLocation":587},{"altText":589,"config":619},{"src":620,"dataGaName":592,"dataGaLocation":587},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":622,"mobileIcon":627,"desktopIcon":629},{"text":623,"config":624},"Back to pricing",{"href":369,"dataGaName":625,"dataGaLocation":587,"icon":626},"back to pricing","GoBack",{"altText":589,"config":628},{"src":591,"dataGaName":592,"dataGaLocation":587},{"altText":589,"config":630},{"src":595,"dataGaName":592,"dataGaLocation":587},{"title":632,"button":633,"config":637},"GitLab Orbit is here: The context layer for AI agents.",{"text":262,"config":634},{"href":635,"dataGaName":636,"dataGaLocation":220},"/gitlab-orbit/","orbit",{"layout":638,"disabled":198},"release",{"data":640},{"text":641,"source":642,"edit":648,"contribute":653,"config":658,"items":663,"minimal":869},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":643,"config":644},"View page source",{"href":645,"dataGaName":646,"dataGaLocation":647},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":649,"config":650},"Edit this page",{"href":651,"dataGaName":652,"dataGaLocation":647},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":654,"config":655},"Please contribute",{"href":656,"dataGaName":657,"dataGaLocation":647},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":659,"facebook":660,"youtube":661,"linkedin":662},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[664,711,763,807,837],{"title":367,"links":665,"subMenu":680},[666,670,675],{"text":667,"config":668},"View plans",{"href":369,"dataGaName":669,"dataGaLocation":647},"view plans",{"text":671,"config":672},"Why Premium?",{"href":673,"dataGaName":674,"dataGaLocation":647},"/pricing/premium/","why premium",{"text":676,"config":677},"Why Ultimate?",{"href":678,"dataGaName":679,"dataGaLocation":647},"/pricing/ultimate/","why ultimate",[681],{"title":682,"links":683},"Contact Us",[684,687,689,691,696,701,706],{"text":685,"config":686},"Contact sales",{"href":229,"dataGaName":230,"dataGaLocation":647},{"text":542,"config":688},{"href":544,"dataGaName":545,"dataGaLocation":647},{"text":547,"config":690},{"href":549,"dataGaName":550,"dataGaLocation":647},{"text":692,"config":693},"Status",{"href":694,"dataGaName":695,"dataGaLocation":647},"https://status.gitlab.com/","status",{"text":697,"config":698},"Terms of use",{"href":699,"dataGaName":700,"dataGaLocation":647},"/terms/","terms of use",{"text":702,"config":703},"Privacy statement",{"href":704,"dataGaName":705,"dataGaLocation":647},"/privacy/","privacy statement",{"text":707,"config":708},"Cookie preferences",{"dataGaName":709,"dataGaLocation":647,"id":710,"isOneTrustButton":201},"cookie preferences","ot-sdk-btn",{"title":267,"links":712,"subMenu":721},[713,717],{"text":714,"config":715},"DevSecOps platform",{"href":249,"dataGaName":716,"dataGaLocation":647},"devsecops platform",{"text":718,"config":719},"AI-Assisted Development",{"href":256,"dataGaName":720,"dataGaLocation":647},"ai-assisted development",[722],{"title":723,"links":724},"Topics",[725,730,734,739,744,748,753,758],{"text":726,"config":727},"CICD",{"href":728,"dataGaName":729,"dataGaLocation":647},"/topics/ci-cd/","cicd",{"text":210,"config":731},{"href":732,"dataGaName":733,"dataGaLocation":647},"/topics/gitops/","gitops",{"text":735,"config":736},"DevOps",{"href":737,"dataGaName":738,"dataGaLocation":647},"/topics/devops/","devops",{"text":740,"config":741},"Version Control",{"href":742,"dataGaName":743,"dataGaLocation":647},"/topics/version-control/","version control",{"text":745,"config":746},"DevSecOps",{"href":747,"dataGaName":193,"dataGaLocation":647},"/topics/devsecops/",{"text":749,"config":750},"Cloud Native",{"href":751,"dataGaName":752,"dataGaLocation":647},"/topics/cloud-native/","cloud native",{"text":754,"config":755},"AI for Coding",{"href":756,"dataGaName":757,"dataGaLocation":647},"/topics/devops/ai-for-coding/","ai for coding",{"text":759,"config":760},"Agentic AI",{"href":761,"dataGaName":762,"dataGaLocation":647},"/topics/agentic-ai/","agentic ai",{"title":764,"links":765},"Solutions",[766,768,770,775,779,782,786,789,791,794,797,802],{"text":311,"config":767},{"href":306,"dataGaName":311,"dataGaLocation":647},{"text":300,"config":769},{"href":283,"dataGaName":284,"dataGaLocation":647},{"text":771,"config":772},"Agile development",{"href":773,"dataGaName":774,"dataGaLocation":647},"/solutions/agile-delivery/","agile delivery",{"text":776,"config":777},"SCM",{"href":296,"dataGaName":778,"dataGaLocation":647},"source code management",{"text":726,"config":780},{"href":289,"dataGaName":781,"dataGaLocation":647},"continuous integration & delivery",{"text":783,"config":784},"Value stream management",{"href":339,"dataGaName":785,"dataGaLocation":647},"value stream management",{"text":210,"config":787},{"href":788,"dataGaName":733,"dataGaLocation":647},"/solutions/gitops/",{"text":349,"config":790},{"href":352,"dataGaName":353,"dataGaLocation":647},{"text":792,"config":793},"Small business",{"href":358,"dataGaName":359,"dataGaLocation":647},{"text":795,"config":796},"Public sector",{"href":364,"dataGaName":365,"dataGaLocation":647},{"text":798,"config":799},"Education",{"href":800,"dataGaName":801,"dataGaLocation":647},"/solutions/education/","education",{"text":803,"config":804},"Financial services",{"href":805,"dataGaName":806,"dataGaLocation":647},"/solutions/finance/","financial services",{"title":372,"links":808},[809,811,813,815,818,820,823,825,827,829,831,833,835],{"text":385,"config":810},{"href":387,"dataGaName":388,"dataGaLocation":647},{"text":390,"config":812},{"href":392,"dataGaName":393,"dataGaLocation":647},{"text":395,"config":814},{"href":397,"dataGaName":398,"dataGaLocation":647},{"text":400,"config":816},{"href":402,"dataGaName":817,"dataGaLocation":647},"docs",{"text":423,"config":819},{"href":425,"dataGaName":426,"dataGaLocation":647},{"text":821,"config":822},"What's new",{"href":473,"dataGaName":474,"dataGaLocation":647},{"text":418,"config":824},{"href":420,"dataGaName":421,"dataGaLocation":647},{"text":432,"config":826},{"href":434,"dataGaName":435,"dataGaLocation":647},{"text":440,"config":828},{"href":442,"dataGaName":443,"dataGaLocation":647},{"text":445,"config":830},{"href":447,"dataGaName":448,"dataGaLocation":647},{"text":450,"config":832},{"href":452,"dataGaName":453,"dataGaLocation":647},{"text":455,"config":834},{"href":457,"dataGaName":458,"dataGaLocation":647},{"text":460,"config":836},{"href":462,"dataGaName":463,"dataGaLocation":647},{"title":476,"links":838},[839,841,843,845,847,849,853,858,860,862,864],{"text":484,"config":840},{"href":486,"dataGaName":478,"dataGaLocation":647},{"text":489,"config":842},{"href":491,"dataGaName":492,"dataGaLocation":647},{"text":497,"config":844},{"href":499,"dataGaName":500,"dataGaLocation":647},{"text":502,"config":846},{"href":504,"dataGaName":505,"dataGaLocation":647},{"text":507,"config":848},{"href":509,"dataGaName":510,"dataGaLocation":647},{"text":850,"config":851},"Sustainability",{"href":852,"dataGaName":850,"dataGaLocation":647},"/sustainability/",{"text":854,"config":855},"Diversity, inclusion and belonging (DIB)",{"href":856,"dataGaName":857,"dataGaLocation":647},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":512,"config":859},{"href":514,"dataGaName":515,"dataGaLocation":647},{"text":522,"config":861},{"href":524,"dataGaName":525,"dataGaLocation":647},{"text":527,"config":863},{"href":529,"dataGaName":530,"dataGaLocation":647},{"text":865,"config":866},"Modern Slavery Transparency Statement",{"href":867,"dataGaName":868,"dataGaLocation":647},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":870},[871,874,877],{"text":872,"config":873},"Terms",{"href":699,"dataGaName":700,"dataGaLocation":647},{"text":875,"config":876},"Cookies",{"dataGaName":709,"dataGaLocation":647,"id":710,"isOneTrustButton":201},{"text":878,"config":879},"Privacy",{"href":704,"dataGaName":705,"dataGaLocation":647},[881],{"id":882,"title":7,"body":197,"config":883,"content":886,"description":197,"extension":889,"meta":890,"navigation":201,"path":891,"seo":892,"stem":893,"__hash__":894},"blogAuthors/en-us/blog/authors/olivier-campeau.yml",{"template":884,"gitlabHandle":885},"BlogAuthor","oli.campeau",{"name":7,"config":887},{"headshot":888},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750704785/kyqz7c4ctjvo4qpj8ldf.png","yml",{},"/en-us/blog/authors/olivier-campeau",{},"en-us/blog/authors/olivier-campeau","QnQqFsgf6SJs5gPP9waa3s-YIi2JoRAKo6At53-Urfw",[896,904,912],{"title":897,"description":898,"heroImage":899,"category":193,"date":900,"authors":901,"slug":903,"externalUrl":197},"Teaching software development the easy way using GitLab","Learn how University of Washington lecturer Stephen G. Dame uses GitLab for Education to manage student assignments, distribute course materials, and provide inline code feedback at scale.\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659537/Blog/Hero%20Images/display-article-image-0679-1800x945-fy26.png","2026-04-29",[902],"Rod Burns","teaching-software-development-the-easy-way-using-gitlab",{"title":905,"description":906,"heroImage":907,"category":193,"date":908,"authors":909,"slug":911,"externalUrl":197},"AI is reshaping DevSecOps: Attend GitLab Transcend to see what’s next","AI-generated code is 34% of development work. Discover how to balance productivity gains with quality, reliability, and security.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1767982271/e9ogyosmuummq7j65zqg.png","2026-01-08",[910],"Manav Khurana","ai-is-reshaping-devsecops-attend-gitlab-transcend-to-see-whats-next",{"title":913,"description":914,"heroImage":915,"category":193,"date":916,"authors":917,"slug":919,"externalUrl":197},"Atlassian ending Data Center as GitLab maintains deployment choice","As Atlassian transitions Data Center customers to cloud-only, GitLab presents a menu of deployment choices that map to business needs.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098354/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%281%29_5XrohmuWBNuqL89BxVUzWm_1750098354056.png","2025-10-07",[918],"Emilio Salvador","atlassian-ending-data-center-as-gitlab-maintains-deployment-choice",{"promotions":921},[922,936,947,959],{"id":923,"categories":924,"header":926,"text":927,"button":928,"image":933},"ai-modernization",[925],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":929,"config":930},"Get your AI maturity score",{"href":931,"dataGaName":932,"dataGaLocation":426},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":934},{"src":935},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":937,"categories":938,"header":939,"text":927,"button":940,"image":944},"devops-modernization",[212,193],"Are you just managing tools or shipping innovation?",{"text":941,"config":942},"Get your DevOps maturity score",{"href":943,"dataGaName":932,"dataGaLocation":426},"/assessments/devops-modernization-assessment/",{"config":945},{"src":946},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":948,"categories":949,"header":951,"text":927,"button":952,"image":956},"security-modernization",[950],"security","Are you trading speed for security?",{"text":953,"config":954},"Get your security maturity score",{"href":955,"dataGaName":932,"dataGaLocation":426},"/assessments/security-modernization-assessment/",{"config":957},{"src":958},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":960,"paths":961,"header":964,"text":965,"button":966,"image":971},"github-azure-migration",[962,963],"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":967,"config":968},"See how GitLab compares to GitHub",{"href":969,"dataGaName":970,"dataGaLocation":426},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":972},{"src":946},{"header":974,"blurb":975,"button":976,"secondaryButton":981},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":977,"config":978},"Get your free trial",{"href":979,"dataGaName":225,"dataGaLocation":980},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":685,"config":982},{"href":229,"dataGaName":230,"dataGaLocation":980},1781392755181]