[{"data":1,"prerenderedAt":1011},["ShallowReactive",2],{"/blog/gitlab-without-gitolite":3,"navigation-en-us":223,"banner-en-us":651,"footer-en-us":661,"blog-post-authors-en-us-GitLab":906,"blog-related-posts-en-us-gitlab-without-gitolite":921,"blog-promotions-en-us":947,"next-steps-en-us":1001},{"id":4,"title":5,"authors":6,"body":8,"category":183,"date":184,"description":185,"extension":186,"externalUrl":187,"faq":187,"featured":188,"heroImage":189,"meta":190,"navigation":213,"path":214,"seo":215,"slug":219,"stem":220,"tags":187,"template":221,"updatedDate":187,"__hash__":222},"blogPosts/en-us/blog/gitlab-without-gitolite.md","GitLab without gitolite",[7],"GitLab",{"type":9,"value":10,"toc":176},"minimark",[11,16,20,23,28,47,51,54,65,74,78,81,88,92,95,105,109,114,117,120,124,132,136,139,142,146,152,155,158,162,166,168],[12,13,15],"h3",{"id":14},"yeap-gitlab-50-will-be-without-gitolite","Yeap GitLab 5.0 will be without gitolite",[17,18,19],"p",{},"Gitolite was a real help when we started with GitLab.\nIt saves us a lot of work and provide a pretty functional solution.",[17,21,22],{},"But after time we understood - keep gitlab and gitolite synced is harder than build own solution.",[24,25,27],"h4",{"id":26},"problems","Problems:",[29,30,31,35,38,41,44],"ul",{},[32,33,34],"li",{},"out of sync between gitlab and gitolite",[32,36,37],{},"gitolite becomes slower on bigger count of repos",[32,39,40],{},"2 system users increased complexity of setup",[32,42,43],{},"code complexity, easy to make a mistake",[32,45,46],{},"gitolite does not allow to create repositories, keys in simultaneously",[24,48,50],{"id":49},"gitlab-shell","GitLab Shell",[17,52,53],{},"GitLab Shell is my replacement for gitolite.",[17,55,56,57,61,62],{},"Basically it's a few scripts on ruby and shell for managing ",[58,59,60],"code",{},"/home/git/.ssh/authorized_keys"," and ",[58,63,64],{},"/home/git/repositories",[17,66,67,68],{},"You can find ",[69,70,73],"a",{"href":71,"rel":72},"https://github.com/gitlabhq/gitlab-shell.git",[],"source code on github",[24,75,77],{"id":76},"_2-users-1-user","2 users -> 1 user",[17,79,80],{},"Earlier we have 2 users for GitLab. gitlab for GitLab and git for gitolite.",[17,82,83,84,87],{},"Now its only one ",[58,85,86],{},"git"," user for GitLab and GitLab Shell",[24,89,91],{"id":90},"new-gitlab-directory-structure","New GitLab directory structure",[17,93,94],{},"This is the directory structure you will end up with following the instructions in the Installation Guide.",[96,97,102],"pre",{"className":98,"code":100,"language":101},[99],"language-text","|-- home\n|   |-- git\n|       |-- .ssh\n|       |-- gitlab\n|       |-- gitlab-satellites\n|       |-- gitlab-shell\n|       |-- repositories\n","text",[58,103,100],{"__ignoreMap":104},"",[24,106,108],{"id":107},"profit","PROFIT",[110,111,113],"h5",{"id":112},"_1-amount-of-code","1. Amount of code",[17,115,116],{},"Its was ~ 1000 lines of code related to gitolite inside of GitLab. And one library for parsing gitolite config.",[17,118,119],{},"Now it is only 150 lines of pretty simple code related to gitlab shell.",[110,121,123],{"id":122},"_2-performance","2. Performance",[17,125,126,127,131],{},"For ",[69,128,129],{"href":129,"rel":130},"https://gitlab.com",[]," we decreased project creation time in 10 times.",[110,133,135],{"id":134},"_3-stability","3. Stability",[17,137,138],{},"GitLab Shell does not store Access Control List. It asks GitLab for permissions via api.",[17,140,141],{},"No out of sync between GitLab and GitLab Shell == much stable backend solution.",[110,143,145],{"id":144},"_4-simplicity-of-update","4. Simplicity of update",[17,147,148,149],{},"You can update gitlab-shell just by ",[58,150,151],{},"git pull",[17,153,154],{},"You dont even need to restart gitlab service",[156,157],"hr",{},[12,159,161],{"id":160},"feb-22-gitlab-42-last-release-with-gitolite","Feb 22: GitLab 4.2 - last release with gitolite",[12,163,165],{"id":164},"mar-22-gitlab-50-requires-gitlab-shell","Mar 22: GitLab 5.0 - requires gitlab-shell",[156,167],{},[17,169,170,171],{},"Currently I'm working on migration docs to GitLab 5.0.0pre. You can find a ",[69,172,175],{"href":173,"rel":174},"https://github.com/gitlabhq/gitlabhq/wiki/From-4.2-to-5.0",[],"draft here",{"title":104,"searchDepth":177,"depth":177,"links":178},2,[179,181,182],{"id":14,"depth":180,"text":15},3,{"id":160,"depth":180,"text":161},{"id":164,"depth":180,"text":165},"engineering","2013-02-12","Yeap GitLab 5.0 will be without gitolite. Read this artlicle to learn more.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664472/Blog/Hero%20Images/gitlabflatlogomap.png",{"excerpt":191},{"type":9,"value":192},[193,195,197,199,201],[12,194,15],{"id":14},[17,196,19],{},[17,198,22],{},[24,200,27],{"id":26},[29,202,203,205,207,209,211],{},[32,204,34],{},[32,206,37],{},[32,208,40],{},[32,210,43],{},[32,212,46],{},true,"/en-us/blog/gitlab-without-gitolite",{"title":5,"description":185,"ogTitle":5,"ogDescription":185,"noIndex":188,"ogImage":189,"ogUrl":216,"ogSiteName":217,"ogType":218,"canonicalUrls":216},"https://about.gitlab.com/blog/gitlab-without-gitolite","https://about.gitlab.com","article","gitlab-without-gitolite","en-us/blog/gitlab-without-gitolite","BlogPost","3SBcICOXux1pmmnXmOP--PePROVI57KfwuKshB7dcCc",{"logo":224,"freeTrial":229,"sales":234,"login":239,"items":244,"search":571,"minimal":602,"duo":621,"switchNav":630,"pricingDeployment":641},{"config":225},{"href":226,"dataGaName":227,"dataGaLocation":228},"/","gitlab logo","header",{"text":230,"config":231},"Get free trial",{"href":232,"dataGaName":233,"dataGaLocation":228},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":235,"config":236},"Request a demo",{"href":237,"dataGaName":238,"dataGaLocation":228},"/sales/?contact-topic=request-demo","sales",{"text":240,"config":241},"Sign in",{"href":242,"dataGaName":243,"dataGaLocation":228},"https://gitlab.com/users/sign_in/","sign in",[245,274,374,379,493,549],{"text":246,"config":247,"menu":249},"Platform",{"dataNavLevelOne":248},"platform",{"type":250,"columns":251},"cards",[252,258,266],{"title":246,"description":253,"link":254},"The intelligent orchestration platform for DevSecOps",{"text":255,"config":256},"Explore our Platform",{"href":257,"dataGaName":248,"dataGaLocation":228},"/platform/",{"title":259,"description":260,"link":261},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":262,"config":263},"Meet GitLab Duo",{"href":264,"dataGaName":265,"dataGaLocation":228},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":267,"description":268,"link":269},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":270,"config":271},"Learn more",{"href":272,"dataGaName":273,"dataGaLocation":228},"/why-gitlab/","why gitlab",{"text":275,"left":213,"config":276,"menu":278},"Product",{"dataNavLevelOne":277},"solutions",{"type":279,"link":280,"columns":284,"feature":353},"lists",{"text":281,"config":282},"View all Solutions",{"href":283,"dataGaName":277,"dataGaLocation":228},"/solutions/",[285,309,332],{"title":286,"description":287,"link":288,"items":293},"Automation","CI/CD and automation to accelerate deployment",{"config":289},{"icon":290,"href":291,"dataGaName":292,"dataGaLocation":228},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[294,298,301,305],{"text":295,"config":296},"CI/CD",{"href":297,"dataGaLocation":228,"dataGaName":295},"/solutions/continuous-integration/",{"text":259,"config":299},{"href":264,"dataGaLocation":228,"dataGaName":300},"gitlab duo agent platform - product menu",{"text":302,"config":303},"Source Code Management",{"href":304,"dataGaLocation":228,"dataGaName":302},"/solutions/source-code-management/",{"text":306,"config":307},"Automated Software Delivery",{"href":291,"dataGaLocation":228,"dataGaName":308},"Automated software delivery",{"title":310,"description":311,"link":312,"items":317},"Security","Deliver code faster without compromising security",{"config":313},{"href":314,"dataGaName":315,"dataGaLocation":228,"icon":316},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[318,322,327],{"text":319,"config":320},"Application Security Testing",{"href":314,"dataGaName":321,"dataGaLocation":228},"Application security testing",{"text":323,"config":324},"Software Supply Chain Security",{"href":325,"dataGaLocation":228,"dataGaName":326},"/solutions/supply-chain/","Software supply chain security",{"text":328,"config":329},"Software Compliance",{"href":330,"dataGaName":331,"dataGaLocation":228},"/solutions/software-compliance/","software compliance",{"title":333,"link":334,"items":339},"Measurement",{"config":335},{"icon":336,"href":337,"dataGaName":338,"dataGaLocation":228},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[340,344,348],{"text":341,"config":342},"Visibility & Measurement",{"href":337,"dataGaLocation":228,"dataGaName":343},"Visibility and Measurement",{"text":345,"config":346},"Value Stream Management",{"href":347,"dataGaLocation":228,"dataGaName":345},"/solutions/value-stream-management/",{"text":349,"config":350},"Analytics & Insights",{"href":351,"dataGaLocation":228,"dataGaName":352},"/solutions/analytics-and-insights/","Analytics and insights",{"title":354,"type":279,"items":355},"GitLab for",[356,362,368],{"text":357,"config":358},"Enterprise",{"icon":359,"href":360,"dataGaLocation":228,"dataGaName":361},"Building","/enterprise/","enterprise",{"text":363,"config":364},"Small Business",{"icon":365,"href":366,"dataGaLocation":228,"dataGaName":367},"Work","/small-business/","small business",{"text":369,"config":370},"Public Sector",{"icon":371,"href":372,"dataGaLocation":228,"dataGaName":373},"Organization","/solutions/public-sector/","public sector",{"text":375,"config":376},"Pricing",{"href":377,"dataGaName":378,"dataGaLocation":228,"dataNavLevelOne":378},"/pricing/","pricing",{"text":380,"config":381,"menu":383},"Resources",{"dataNavLevelOne":382},"resources",{"type":279,"link":384,"columns":388,"feature":482},{"text":385,"config":386},"View all resources",{"href":387,"dataGaName":382,"dataGaLocation":228},"/resources/",[389,422,449],{"title":390,"items":391},"Getting started",[392,397,402,407,412,417],{"text":393,"config":394},"Install",{"href":395,"dataGaName":396,"dataGaLocation":228},"/install/","install",{"text":398,"config":399},"Quick start guides",{"href":400,"dataGaName":401,"dataGaLocation":228},"/get-started/","quick setup checklists",{"text":403,"config":404},"Learn",{"href":405,"dataGaLocation":228,"dataGaName":406},"https://university.gitlab.com/","learn",{"text":408,"config":409},"Product documentation",{"href":410,"dataGaName":411,"dataGaLocation":228},"https://docs.gitlab.com/","product documentation",{"text":413,"config":414},"Best practice videos",{"href":415,"dataGaName":416,"dataGaLocation":228},"/getting-started-videos/","best practice videos",{"text":418,"config":419},"Integrations",{"href":420,"dataGaName":421,"dataGaLocation":228},"/integrations/","integrations",{"title":423,"items":424},"Discover",[425,430,435,440,444],{"text":426,"config":427},"Customer success stories",{"href":428,"dataGaName":429,"dataGaLocation":228},"/customers/","customer success stories",{"text":431,"config":432},"Blog",{"href":433,"dataGaName":434,"dataGaLocation":228},"/blog/","blog",{"text":436,"config":437},"Demo Hub",{"href":438,"dataGaName":439,"dataGaLocation":228},"/demo-hub/","demo hub",{"text":441,"config":442},"The Source",{"href":443,"dataGaName":434,"dataGaLocation":228},"/the-source/",{"text":445,"config":446},"Remote",{"href":447,"dataGaName":448,"dataGaLocation":228},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":450,"items":451},"Connect",[452,457,462,467,472,477],{"text":453,"config":454},"GitLab Services",{"href":455,"dataGaName":456,"dataGaLocation":228},"/services/","services",{"text":458,"config":459},"Contribute",{"href":460,"dataGaName":461,"dataGaLocation":228},"https://contributors.gitlab.com","contribute",{"text":463,"config":464},"Community",{"href":465,"dataGaName":466,"dataGaLocation":228},"/community/","community",{"text":468,"config":469},"Forum",{"href":470,"dataGaName":471,"dataGaLocation":228},"https://forum.gitlab.com/","forum",{"text":473,"config":474},"Events",{"href":475,"dataGaName":476,"dataGaLocation":228},"/events/","events",{"text":478,"config":479},"Partners",{"href":480,"dataGaName":481,"dataGaLocation":228},"/partners/","partners",{"config":483,"title":486,"text":487,"link":488},{"background":484,"textColor":485},"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":489,"config":490},"Read the latest",{"href":491,"dataGaName":492,"dataGaLocation":228},"/whats-new/","whats new",{"text":494,"config":495,"menu":497},"Company",{"dataNavLevelOne":496},"company",{"type":279,"columns":498},[499],{"items":500},[501,506,512,514,519,524,529,534,539,544],{"text":502,"config":503},"About",{"href":504,"dataGaName":505,"dataGaLocation":228},"/company/","about",{"text":507,"config":508,"footerGa":511},"Jobs",{"href":509,"dataGaName":510,"dataGaLocation":228},"/jobs/","jobs",{"dataGaName":510},{"text":473,"config":513},{"href":475,"dataGaName":476,"dataGaLocation":228},{"text":515,"config":516},"Leadership",{"href":517,"dataGaName":518,"dataGaLocation":228},"/company/team/e-group/","leadership",{"text":520,"config":521},"Handbook",{"href":522,"dataGaName":523,"dataGaLocation":228},"https://handbook.gitlab.com/","handbook",{"text":525,"config":526},"Investor relations",{"href":527,"dataGaName":528,"dataGaLocation":228},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":530,"config":531},"Trust Center",{"href":532,"dataGaName":533,"dataGaLocation":228},"/security/","trust center",{"text":535,"config":536},"AI Transparency Center",{"href":537,"dataGaName":538,"dataGaLocation":228},"/ai-transparency-center/","ai transparency center",{"text":540,"config":541},"Newsletter",{"href":542,"dataGaName":543,"dataGaLocation":228},"/company/contact/#contact-forms","newsletter",{"text":545,"config":546},"Press",{"href":547,"dataGaName":548,"dataGaLocation":228},"/press/","press",{"text":550,"config":551,"menu":552},"Contact us",{"dataNavLevelOne":496},{"type":279,"columns":553},[554],{"items":555},[556,561,566],{"text":557,"config":558},"Talk to sales",{"href":559,"dataGaName":560,"dataGaLocation":228},"/sales/","talk to sales",{"text":562,"config":563},"Support portal",{"href":564,"dataGaName":565,"dataGaLocation":228},"https://support.gitlab.com/hc/en-us","support portal",{"text":567,"config":568},"Customer portal",{"href":569,"dataGaName":570,"dataGaLocation":228},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":572,"login":573,"suggestions":580},"Close",{"text":574,"link":575},"To search repositories and projects, login to",{"text":576,"config":577},"gitlab.com",{"href":242,"dataGaName":578,"dataGaLocation":579},"search login","search",{"text":581,"default":582},"Suggestions",[583,585,589,591,595,599],{"text":259,"config":584},{"href":264,"dataGaName":259,"dataGaLocation":579},{"text":586,"config":587},"Code Suggestions (AI)",{"href":588,"dataGaName":586,"dataGaLocation":579},"/solutions/code-suggestions/",{"text":295,"config":590},{"href":297,"dataGaName":295,"dataGaLocation":579},{"text":592,"config":593},"GitLab on AWS",{"href":594,"dataGaName":592,"dataGaLocation":579},"/partners/technology-partners/aws/",{"text":596,"config":597},"GitLab on Google Cloud",{"href":598,"dataGaName":596,"dataGaLocation":579},"/partners/technology-partners/google-cloud-platform/",{"text":600,"config":601},"Why GitLab?",{"href":272,"dataGaName":600,"dataGaLocation":579},{"freeTrial":603,"mobileIcon":608,"desktopIcon":613,"secondaryButton":616},{"text":604,"config":605},"Start free trial",{"href":606,"dataGaName":233,"dataGaLocation":607},"https://gitlab.com/-/trials/new/","nav",{"altText":609,"config":610},"Gitlab Icon",{"src":611,"dataGaName":612,"dataGaLocation":607},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":609,"config":614},{"src":615,"dataGaName":612,"dataGaLocation":607},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":617,"config":618},"Get Started",{"href":619,"dataGaName":620,"dataGaLocation":607},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":622,"mobileIcon":626,"desktopIcon":628},{"text":623,"config":624},"Learn more about GitLab Duo",{"href":264,"dataGaName":625,"dataGaLocation":607},"gitlab duo",{"altText":609,"config":627},{"src":611,"dataGaName":612,"dataGaLocation":607},{"altText":609,"config":629},{"src":615,"dataGaName":612,"dataGaLocation":607},{"button":631,"mobileIcon":636,"desktopIcon":638},{"text":632,"config":633},"/switch",{"href":634,"dataGaName":635,"dataGaLocation":607},"#contact","switch",{"altText":609,"config":637},{"src":611,"dataGaName":612,"dataGaLocation":607},{"altText":609,"config":639},{"src":640,"dataGaName":612,"dataGaLocation":607},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":642,"mobileIcon":647,"desktopIcon":649},{"text":643,"config":644},"Back to pricing",{"href":377,"dataGaName":645,"dataGaLocation":607,"icon":646},"back to pricing","GoBack",{"altText":609,"config":648},{"src":611,"dataGaName":612,"dataGaLocation":607},{"altText":609,"config":650},{"src":615,"dataGaName":612,"dataGaLocation":607},{"title":652,"titleMobile":653,"button":654,"config":659},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":270,"config":655},{"href":656,"dataGaName":657,"dataGaLocation":658},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":660,"disabled":188},"release",{"data":662},{"text":663,"source":664,"edit":670,"contribute":675,"config":680,"items":685,"minimal":895},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":665,"config":666},"View page source",{"href":667,"dataGaName":668,"dataGaLocation":669},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":671,"config":672},"Edit this page",{"href":673,"dataGaName":674,"dataGaLocation":669},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":676,"config":677},"Please contribute",{"href":678,"dataGaName":679,"dataGaLocation":669},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":681,"facebook":682,"youtube":683,"linkedin":684},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[686,733,787,831,863],{"title":375,"links":687,"subMenu":702},[688,692,697],{"text":689,"config":690},"View plans",{"href":377,"dataGaName":691,"dataGaLocation":669},"view plans",{"text":693,"config":694},"Why Premium?",{"href":695,"dataGaName":696,"dataGaLocation":669},"/pricing/premium/","why premium",{"text":698,"config":699},"Why Ultimate?",{"href":700,"dataGaName":701,"dataGaLocation":669},"/pricing/ultimate/","why ultimate",[703],{"title":704,"links":705},"Contact Us",[706,709,711,713,718,723,728],{"text":707,"config":708},"Contact sales",{"href":559,"dataGaName":238,"dataGaLocation":669},{"text":562,"config":710},{"href":564,"dataGaName":565,"dataGaLocation":669},{"text":567,"config":712},{"href":569,"dataGaName":570,"dataGaLocation":669},{"text":714,"config":715},"Status",{"href":716,"dataGaName":717,"dataGaLocation":669},"https://status.gitlab.com/","status",{"text":719,"config":720},"Terms of use",{"href":721,"dataGaName":722,"dataGaLocation":669},"/terms/","terms of use",{"text":724,"config":725},"Privacy statement",{"href":726,"dataGaName":727,"dataGaLocation":669},"/privacy/","privacy statement",{"text":729,"config":730},"Cookie preferences",{"dataGaName":731,"dataGaLocation":669,"id":732,"isOneTrustButton":213},"cookie preferences","ot-sdk-btn",{"title":275,"links":734,"subMenu":743},[735,739],{"text":736,"config":737},"DevSecOps platform",{"href":257,"dataGaName":738,"dataGaLocation":669},"devsecops platform",{"text":740,"config":741},"AI-Assisted Development",{"href":264,"dataGaName":742,"dataGaLocation":669},"ai-assisted development",[744],{"title":745,"links":746},"Topics",[747,752,757,762,767,772,777,782],{"text":748,"config":749},"CICD",{"href":750,"dataGaName":751,"dataGaLocation":669},"/topics/ci-cd/","cicd",{"text":753,"config":754},"GitOps",{"href":755,"dataGaName":756,"dataGaLocation":669},"/topics/gitops/","gitops",{"text":758,"config":759},"DevOps",{"href":760,"dataGaName":761,"dataGaLocation":669},"/topics/devops/","devops",{"text":763,"config":764},"Version Control",{"href":765,"dataGaName":766,"dataGaLocation":669},"/topics/version-control/","version control",{"text":768,"config":769},"DevSecOps",{"href":770,"dataGaName":771,"dataGaLocation":669},"/topics/devsecops/","devsecops",{"text":773,"config":774},"Cloud Native",{"href":775,"dataGaName":776,"dataGaLocation":669},"/topics/cloud-native/","cloud native",{"text":778,"config":779},"AI for Coding",{"href":780,"dataGaName":781,"dataGaLocation":669},"/topics/devops/ai-for-coding/","ai for coding",{"text":783,"config":784},"Agentic AI",{"href":785,"dataGaName":786,"dataGaLocation":669},"/topics/agentic-ai/","agentic ai",{"title":788,"links":789},"Solutions",[790,792,794,799,803,806,810,813,815,818,821,826],{"text":319,"config":791},{"href":314,"dataGaName":319,"dataGaLocation":669},{"text":308,"config":793},{"href":291,"dataGaName":292,"dataGaLocation":669},{"text":795,"config":796},"Agile development",{"href":797,"dataGaName":798,"dataGaLocation":669},"/solutions/agile-delivery/","agile delivery",{"text":800,"config":801},"SCM",{"href":304,"dataGaName":802,"dataGaLocation":669},"source code management",{"text":748,"config":804},{"href":297,"dataGaName":805,"dataGaLocation":669},"continuous integration & delivery",{"text":807,"config":808},"Value stream management",{"href":347,"dataGaName":809,"dataGaLocation":669},"value stream management",{"text":753,"config":811},{"href":812,"dataGaName":756,"dataGaLocation":669},"/solutions/gitops/",{"text":357,"config":814},{"href":360,"dataGaName":361,"dataGaLocation":669},{"text":816,"config":817},"Small business",{"href":366,"dataGaName":367,"dataGaLocation":669},{"text":819,"config":820},"Public sector",{"href":372,"dataGaName":373,"dataGaLocation":669},{"text":822,"config":823},"Education",{"href":824,"dataGaName":825,"dataGaLocation":669},"/solutions/education/","education",{"text":827,"config":828},"Financial services",{"href":829,"dataGaName":830,"dataGaLocation":669},"/solutions/finance/","financial services",{"title":380,"links":832},[833,835,837,839,842,844,847,849,851,853,855,857,859,861],{"text":393,"config":834},{"href":395,"dataGaName":396,"dataGaLocation":669},{"text":398,"config":836},{"href":400,"dataGaName":401,"dataGaLocation":669},{"text":403,"config":838},{"href":405,"dataGaName":406,"dataGaLocation":669},{"text":408,"config":840},{"href":410,"dataGaName":841,"dataGaLocation":669},"docs",{"text":431,"config":843},{"href":433,"dataGaName":434,"dataGaLocation":669},{"text":845,"config":846},"What's new",{"href":491,"dataGaName":492,"dataGaLocation":669},{"text":426,"config":848},{"href":428,"dataGaName":429,"dataGaLocation":669},{"text":445,"config":850},{"href":447,"dataGaName":448,"dataGaLocation":669},{"text":453,"config":852},{"href":455,"dataGaName":456,"dataGaLocation":669},{"text":458,"config":854},{"href":460,"dataGaName":461,"dataGaLocation":669},{"text":463,"config":856},{"href":465,"dataGaName":466,"dataGaLocation":669},{"text":468,"config":858},{"href":470,"dataGaName":471,"dataGaLocation":669},{"text":473,"config":860},{"href":475,"dataGaName":476,"dataGaLocation":669},{"text":478,"config":862},{"href":480,"dataGaName":481,"dataGaLocation":669},{"title":494,"links":864},[865,867,869,871,873,875,879,884,886,888,890],{"text":502,"config":866},{"href":504,"dataGaName":496,"dataGaLocation":669},{"text":507,"config":868},{"href":509,"dataGaName":510,"dataGaLocation":669},{"text":515,"config":870},{"href":517,"dataGaName":518,"dataGaLocation":669},{"text":520,"config":872},{"href":522,"dataGaName":523,"dataGaLocation":669},{"text":525,"config":874},{"href":527,"dataGaName":528,"dataGaLocation":669},{"text":876,"config":877},"Sustainability",{"href":878,"dataGaName":876,"dataGaLocation":669},"/sustainability/",{"text":880,"config":881},"Diversity, inclusion and belonging (DIB)",{"href":882,"dataGaName":883,"dataGaLocation":669},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":530,"config":885},{"href":532,"dataGaName":533,"dataGaLocation":669},{"text":540,"config":887},{"href":542,"dataGaName":543,"dataGaLocation":669},{"text":545,"config":889},{"href":547,"dataGaName":548,"dataGaLocation":669},{"text":891,"config":892},"Modern Slavery Transparency Statement",{"href":893,"dataGaName":894,"dataGaLocation":669},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":896},[897,900,903],{"text":898,"config":899},"Terms",{"href":721,"dataGaName":722,"dataGaLocation":669},{"text":901,"config":902},"Cookies",{"dataGaName":731,"dataGaLocation":669,"id":732,"isOneTrustButton":213},{"text":904,"config":905},"Privacy",{"href":726,"dataGaName":727,"dataGaLocation":669},[907],{"id":908,"title":909,"body":187,"config":910,"content":912,"description":187,"extension":915,"meta":916,"navigation":213,"path":917,"seo":918,"stem":919,"__hash__":920},"blogAuthors/en-us/blog/authors/gitlab.yml","Gitlab",{"template":911},"BlogAuthor",{"name":7,"config":913},{"headshot":914,"ctfId":7},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","yml",{},"/en-us/blog/authors/gitlab",{},"en-us/blog/authors/gitlab","XCBKIcPoCs6zi2oHG7o-bAp52Jhaw8_zGhIJ2jNrEjU",[922,931,939],{"title":923,"description":924,"heroImage":925,"category":183,"date":926,"authors":927,"slug":930,"externalUrl":187},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[928,929],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":932,"description":933,"heroImage":934,"category":183,"date":935,"authors":936,"slug":938,"externalUrl":187},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[937],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":940,"description":941,"heroImage":942,"category":183,"date":943,"authors":944,"slug":946,"externalUrl":187},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[945],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":948},[949,963,975,987],{"id":950,"categories":951,"header":953,"text":954,"button":955,"image":960},"ai-modernization",[952],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":956,"config":957},"Get your AI maturity score",{"href":958,"dataGaName":959,"dataGaLocation":434},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":961},{"src":962},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":964,"categories":965,"header":967,"text":954,"button":968,"image":972},"devops-modernization",[966,771],"product","Are you just managing tools or shipping innovation?",{"text":969,"config":970},"Get your DevOps maturity score",{"href":971,"dataGaName":959,"dataGaLocation":434},"/assessments/devops-modernization-assessment/",{"config":973},{"src":974},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":976,"categories":977,"header":979,"text":954,"button":980,"image":984},"security-modernization",[978],"security","Are you trading speed for security?",{"text":981,"config":982},"Get your security maturity score",{"href":983,"dataGaName":959,"dataGaLocation":434},"/assessments/security-modernization-assessment/",{"config":985},{"src":986},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":988,"paths":989,"header":992,"text":993,"button":994,"image":999},"github-azure-migration",[990,991],"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":995,"config":996},"See how GitLab compares to GitHub",{"href":997,"dataGaName":998,"dataGaLocation":434},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1000},{"src":974},{"header":1002,"blurb":1003,"button":1004,"secondaryButton":1009},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1005,"config":1006},"Get your free trial",{"href":1007,"dataGaName":233,"dataGaLocation":1008},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":707,"config":1010},{"href":559,"dataGaName":238,"dataGaLocation":1008},1786803750978]