[{"data":1,"prerenderedAt":967},["ShallowReactive",2],{"/blog/why-choose-bare-metal":3,"navigation-en-us":179,"banner-en-us":607,"footer-en-us":617,"blog-post-authors-en-us-Pablo Carranza":862,"blog-related-posts-en-us-why-choose-bare-metal":877,"blog-promotions-en-us":903,"next-steps-en-us":957},{"id":4,"title":5,"authors":6,"body":8,"category":161,"date":162,"description":163,"extension":164,"externalUrl":165,"faq":165,"featured":166,"heroImage":167,"meta":168,"navigation":169,"path":170,"seo":171,"slug":175,"stem":176,"tags":165,"template":177,"updatedDate":165,"__hash__":178},"blogPosts/en-us/blog/why-choose-bare-metal.md","How we knew it was time to leave the cloud",[7],"Pablo Carranza",{"type":9,"value":10,"toc":150},"minimark",[11,21,24,31,34,39,42,51,54,57,61,64,68,71,74,77,83,89,94,97,103,106,115,118,121,125],[12,13,14,15,20],"p",{},"In my last ",[16,17,19],"a",{"href":18},"/blog/infrastructure-update/","infrastructure update",", I documented our challenges with\nstorage as GitLab scales. We built a CephFS cluster to tackle both the capacity\nand performance issues of NFS and decided to replace PostgreSQL standard Vacuum\nwith the pg_repack extension. Now, we're feeling the pain of running a high\nperformance distributed filesystem on the cloud.",[12,22,23],{},"Over the past month, we loaded a lot of projects, users, and CI artifacts onto\nCephFS. We chose CephFS because it's a reliable distributed file system that can\ngrow capacity to the petabyte, making it virtually infinite, and we needed\nstorage. By going with CephFS, we could push the solution into the infrastructure\ninstead of creating a complicated application. The problem with CephFS is that\nin order to work, it needs to have a really performant underlaying infrastructure\nbecause it needs to read and write a lot of things really fast.\nIf one of the hosts delays writing to the journal, then the rest of the fleet is\nwaiting for that operation alone, and the whole file system is blocked. When this happens,\nall of the hosts halt, and you have a locked file system; no one can read or\nwrite anything and that basically takes everything down.",[12,25,26],{},[27,28],"img",{"alt":29,"src":30},"osd-journal-latency","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398783/blog/Content%20Images/osd-journal-latency.png",[12,32,33],{},"What we learned is that when you get into the consistency, accessibility, and\npartition tolerance (CAP) of CephFS, it will just give away availability in\nexchange for consistency. We also learned that when you put a lot of pressure on\nthe system, it will generate hot spots. For example, in specific places in the\ncluster of machines hosting the GitLab CE repo, all the reads and\nwrites end up being on the same spot during high load times. This problem is\namplified because we hosted the system in the cloud where there is not a minimum\nSLA for IO latency.",[35,36,38],"h2",{"id":37},"performance-issues-on-the-cloud","Performance Issues on the Cloud",[12,40,41],{},"By choosing to use the cloud, we are by default sharing infrastructure with a\nlot of other people. The cloud is timesharing, i.e. you share the\nmachine with others on the providers resources. As such, the provider has to\nensure that everyone gets a fair slice of the time share. To do this, providers\nplace performance limits and thresholds on the services they provide.",[12,43,44,45,50],{},"On our server, GitLab can only perform 20,000 IOPS but the low limit is 0.\nWith this performance capacity, we became the \"noisy neighbors\" on the shared\nmachines, using all of the resources. We became the neighbor who plays their\nmusic loud and really late. So, we were punished with latencies. Providers don't\nprovide a minimum IOPS, so they can just drop you. If we wanted to make the disk\nreach something, we would have to wait 100 ms latency.\n",[16,46,49],{"href":47,"rel":48},"https://blog.codinghorror.com/the-infinite-space-between-words/",[],"That's basically telling us to wait 8 years",". What we found\nis that the cloud was not meant to provide the level of IOPS performance we needed\nto run an aggressive system like CephFS.",[12,52,53],{},"At a small scale, the cloud is cheaper and sufficient for many projects.\nHowever, if you need to scale, it's not so easy. It's often sold as, \"If you\nneed to scale and add more machines, you can spawn them because the cloud is\n'infinite'\". What we discovered is that yes, you can keep spawning more\nmachines but there is a threshold in time, particularly when you're adding heavy\nIOPS, where it becomes less effective and very expensive. You'll still have to\npay for bigger machines. The nature of the cloud is time sharing so you still\nwill not get the best performance. When it comes down to it, you're paying a lot\nof money to get a subpar level of service while still needing more performance.",[12,55,56],{},"So, what happens when the cloud is just not enough?",[35,58,60],{"id":59},"moving-to-bare-metal","Moving to Bare Metal",[12,62,63],{},"At this point, moving to dedicated hardware makes sense for us. From a cost\nperspective, it is more economical and reliable because of how the culture of\nthe cloud works and the level of performance we need. Of course hardware comes\nwith it's upfront costs: components will fail and need to be replaced. This\nrequires services and support that we currently don't have today. You have to\nknow the hardware you are getting into and put a lot more effort into keeping it\nalive. But in the long run, it will make GitLab more efficient, consistent,\nand reliable as we will have more ownership of the entire infrastructure.",[35,65,67],{"id":66},"how-we-proactively-uncover-issues","How We Proactively Uncover Issues",[12,69,70],{},"At GitLab, we are able to proactively uncover issues like this because we are\nbuilding an observable system as a way to understand how\nour system behaves. The machine is doing a lot of things, most of which we are\nnot even aware of. To get a deeper look at what's happening, we gather data and\nmetrics into Prometheus to build dashboards and observe trends.",[12,72,73],{},"These metrics are in the depth of the kernel and not readily visible to humans.\nTo see it, you need to build a system that allows you to pull, aggregate, and\ngraph this data in a way you can see it. Graphs are great because you can get a\nlot of data in one screen and read it with a simple glance.",[12,75,76],{},"For example, our fleet overview dashboard shows how many different workers are\nperforming in one view:",[12,78,79],{},[27,80],{"alt":81,"src":82},"workers-load","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399327/blog/Content%20Images/workers-load.png",[12,84,85],{},[27,86],{"alt":87,"src":88},"workers-wait","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399327/blog/Content%20Images/workers-wait.png",[90,91,93],"h3",{"id":92},"how-we-used-our-dashboard-to-understand-cephfs-in-the-cloud","How we used our dashboard to understand CephFS in the cloud",[12,95,96],{},"Below, you can see OSD Journal Latency. You can see how, over the last 7 days shown, we had a spike.",[12,98,99],{},[27,100],{"alt":101,"src":102},"osd-journal-latency-one-week","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398782/blog/Content%20Images/osd-journal-latency-one-week.png",[12,104,105],{},"This is how much time we spent trying to write to this journal disk. In general,\nwe roughly perform commit data to this journal within 2 to 12 seconds. You can\nsee where it jumps to 42 seconds to complete -- that delay is where we are being\npunished. The high spikes show GitLab.com is down.",[12,107,108,109,114],{},"What's great about having this dashboard is that there is a lot of data available\nquickly, in one place. Non-technical people can understand this. This is the\nlevel of insight into your system you want to aim for. You can build on your own\nwith ",[16,110,113],{"href":111,"rel":112},"https://prometheus.io/",[],"Prometheus",". We have been building this for the last month, it's close to the\nend state. We're still working on it but to add more things.",[12,116,117],{},"This is how we make informed decisions to understand as best as we can what is\ngoing on with our infrastructure. What we tend to do is whenever we see\na service failing or performing in a way that is unexpected, we pull together a\ndashboard to highlight the underlaying data to help us understand what's happening,\nand how things are being impacted on a larger scale. Usually monitoring is an afterthought\nbut we are changing this by shipping more and more detailed and comprehensive\nmonitoring with GitLab. Without detailed monitoring you are just guessing at\nwhat is going on within your environment and systems.",[12,119,120],{},"The bottom line is that once you have moved beyond a handful of systems it is no\nlonger feasible to run one-off commands to try and understand what is happening\nwithin your infrastructure. True insight can only be gained by having enough\ndata to make informed decisions with.",[35,122,124],{"id":123},"recap-what-we-learned","Recap: What We Learned",[126,127,128,132,135,138,141],"ol",{},[129,130,131],"li",{},"CephFS gives us more scalability and ostensibly performance but did not work well in the cloud on shared resources, despite tweaking and tuning it to try to make it work.",[129,133,134],{},"There is a threshold of performance on the cloud and if you need more, you will have to pay a lot more, be punished with latencies, or leave the cloud.",[129,136,137],{},"Moving to dedicated hardware is more economical and reliable for the scale and performance of our application.",[129,139,140],{},"Building an observable system by pulling and aggregating performance data into understandable dashboards helps us spot non-obvious trends and correlations, leading to addressing issues faster.",[129,142,143,144,149],{},"Monitoring some things can be really application specific which is why we are ",[16,145,148],{"href":146,"rel":147},"https://gitlab.com/gitlab-org/omnibus-gitlab/issues/1481",[],"building our own gitlab-monitor Prometheus exporter",". We plan to ship this with GitLab CE soon.",{"title":151,"searchDepth":152,"depth":152,"links":153},"",2,[154,155,156,160],{"id":37,"depth":152,"text":38},{"id":59,"depth":152,"text":60},{"id":66,"depth":152,"text":67,"children":157},[158],{"id":92,"depth":159,"text":93},3,{"id":123,"depth":152,"text":124},"engineering","2016-11-10","How we're solving storage and performance issues as we scale.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683600/Blog/Hero%20Images/data.png",{},true,"/en-us/blog/why-choose-bare-metal",{"title":5,"description":163,"ogTitle":5,"ogDescription":163,"noIndex":166,"ogImage":167,"ogUrl":172,"ogSiteName":173,"ogType":174,"canonicalUrls":172},"https://about.gitlab.com/blog/why-choose-bare-metal","https://about.gitlab.com","article","why-choose-bare-metal","en-us/blog/why-choose-bare-metal","BlogPost","dkqcy7mOeQCQTbYg-hpxHZ5K49WTo-HaQrkS7XyNZ3U",{"logo":180,"freeTrial":185,"sales":190,"login":195,"items":200,"search":527,"minimal":558,"duo":577,"switchNav":586,"pricingDeployment":597},{"config":181},{"href":182,"dataGaName":183,"dataGaLocation":184},"/","gitlab logo","header",{"text":186,"config":187},"Get free trial",{"href":188,"dataGaName":189,"dataGaLocation":184},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":191,"config":192},"Request a demo",{"href":193,"dataGaName":194,"dataGaLocation":184},"/sales/?contact-topic=request-demo","sales",{"text":196,"config":197},"Sign in",{"href":198,"dataGaName":199,"dataGaLocation":184},"https://gitlab.com/users/sign_in/","sign in",[201,230,330,335,449,505],{"text":202,"config":203,"menu":205},"Platform",{"dataNavLevelOne":204},"platform",{"type":206,"columns":207},"cards",[208,214,222],{"title":202,"description":209,"link":210},"The intelligent orchestration platform for DevSecOps",{"text":211,"config":212},"Explore our Platform",{"href":213,"dataGaName":204,"dataGaLocation":184},"/platform/",{"title":215,"description":216,"link":217},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":218,"config":219},"Meet GitLab Duo",{"href":220,"dataGaName":221,"dataGaLocation":184},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":223,"description":224,"link":225},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":226,"config":227},"Learn more",{"href":228,"dataGaName":229,"dataGaLocation":184},"/why-gitlab/","why gitlab",{"text":231,"left":169,"config":232,"menu":234},"Product",{"dataNavLevelOne":233},"solutions",{"type":235,"link":236,"columns":240,"feature":309},"lists",{"text":237,"config":238},"View all Solutions",{"href":239,"dataGaName":233,"dataGaLocation":184},"/solutions/",[241,265,288],{"title":242,"description":243,"link":244,"items":249},"Automation","CI/CD and automation to accelerate deployment",{"config":245},{"icon":246,"href":247,"dataGaName":248,"dataGaLocation":184},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[250,254,257,261],{"text":251,"config":252},"CI/CD",{"href":253,"dataGaLocation":184,"dataGaName":251},"/solutions/continuous-integration/",{"text":215,"config":255},{"href":220,"dataGaLocation":184,"dataGaName":256},"gitlab duo agent platform - product menu",{"text":258,"config":259},"Source Code Management",{"href":260,"dataGaLocation":184,"dataGaName":258},"/solutions/source-code-management/",{"text":262,"config":263},"Automated Software Delivery",{"href":247,"dataGaLocation":184,"dataGaName":264},"Automated software delivery",{"title":266,"description":267,"link":268,"items":273},"Security","Deliver code faster without compromising security",{"config":269},{"href":270,"dataGaName":271,"dataGaLocation":184,"icon":272},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[274,278,283],{"text":275,"config":276},"Application Security Testing",{"href":270,"dataGaName":277,"dataGaLocation":184},"Application security testing",{"text":279,"config":280},"Software Supply Chain Security",{"href":281,"dataGaLocation":184,"dataGaName":282},"/solutions/supply-chain/","Software supply chain security",{"text":284,"config":285},"Software Compliance",{"href":286,"dataGaName":287,"dataGaLocation":184},"/solutions/software-compliance/","software compliance",{"title":289,"link":290,"items":295},"Measurement",{"config":291},{"icon":292,"href":293,"dataGaName":294,"dataGaLocation":184},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[296,300,304],{"text":297,"config":298},"Visibility & Measurement",{"href":293,"dataGaLocation":184,"dataGaName":299},"Visibility and Measurement",{"text":301,"config":302},"Value Stream Management",{"href":303,"dataGaLocation":184,"dataGaName":301},"/solutions/value-stream-management/",{"text":305,"config":306},"Analytics & Insights",{"href":307,"dataGaLocation":184,"dataGaName":308},"/solutions/analytics-and-insights/","Analytics and insights",{"title":310,"type":235,"items":311},"GitLab for",[312,318,324],{"text":313,"config":314},"Enterprise",{"icon":315,"href":316,"dataGaLocation":184,"dataGaName":317},"Building","/enterprise/","enterprise",{"text":319,"config":320},"Small Business",{"icon":321,"href":322,"dataGaLocation":184,"dataGaName":323},"Work","/small-business/","small business",{"text":325,"config":326},"Public Sector",{"icon":327,"href":328,"dataGaLocation":184,"dataGaName":329},"Organization","/solutions/public-sector/","public sector",{"text":331,"config":332},"Pricing",{"href":333,"dataGaName":334,"dataGaLocation":184,"dataNavLevelOne":334},"/pricing/","pricing",{"text":336,"config":337,"menu":339},"Resources",{"dataNavLevelOne":338},"resources",{"type":235,"link":340,"columns":344,"feature":438},{"text":341,"config":342},"View all resources",{"href":343,"dataGaName":338,"dataGaLocation":184},"/resources/",[345,378,405],{"title":346,"items":347},"Getting started",[348,353,358,363,368,373],{"text":349,"config":350},"Install",{"href":351,"dataGaName":352,"dataGaLocation":184},"/install/","install",{"text":354,"config":355},"Quick start guides",{"href":356,"dataGaName":357,"dataGaLocation":184},"/get-started/","quick setup checklists",{"text":359,"config":360},"Learn",{"href":361,"dataGaLocation":184,"dataGaName":362},"https://university.gitlab.com/","learn",{"text":364,"config":365},"Product documentation",{"href":366,"dataGaName":367,"dataGaLocation":184},"https://docs.gitlab.com/","product documentation",{"text":369,"config":370},"Best practice videos",{"href":371,"dataGaName":372,"dataGaLocation":184},"/getting-started-videos/","best practice videos",{"text":374,"config":375},"Integrations",{"href":376,"dataGaName":377,"dataGaLocation":184},"/integrations/","integrations",{"title":379,"items":380},"Discover",[381,386,391,396,400],{"text":382,"config":383},"Customer success stories",{"href":384,"dataGaName":385,"dataGaLocation":184},"/customers/","customer success stories",{"text":387,"config":388},"Blog",{"href":389,"dataGaName":390,"dataGaLocation":184},"/blog/","blog",{"text":392,"config":393},"Demo Hub",{"href":394,"dataGaName":395,"dataGaLocation":184},"/demo-hub/","demo hub",{"text":397,"config":398},"The Source",{"href":399,"dataGaName":390,"dataGaLocation":184},"/the-source/",{"text":401,"config":402},"Remote",{"href":403,"dataGaName":404,"dataGaLocation":184},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":406,"items":407},"Connect",[408,413,418,423,428,433],{"text":409,"config":410},"GitLab Services",{"href":411,"dataGaName":412,"dataGaLocation":184},"/services/","services",{"text":414,"config":415},"Contribute",{"href":416,"dataGaName":417,"dataGaLocation":184},"https://contributors.gitlab.com","contribute",{"text":419,"config":420},"Community",{"href":421,"dataGaName":422,"dataGaLocation":184},"/community/","community",{"text":424,"config":425},"Forum",{"href":426,"dataGaName":427,"dataGaLocation":184},"https://forum.gitlab.com/","forum",{"text":429,"config":430},"Events",{"href":431,"dataGaName":432,"dataGaLocation":184},"/events/","events",{"text":434,"config":435},"Partners",{"href":436,"dataGaName":437,"dataGaLocation":184},"/partners/","partners",{"config":439,"title":442,"text":443,"link":444},{"background":440,"textColor":441},"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":445,"config":446},"Read the latest",{"href":447,"dataGaName":448,"dataGaLocation":184},"/whats-new/","whats new",{"text":450,"config":451,"menu":453},"Company",{"dataNavLevelOne":452},"company",{"type":235,"columns":454},[455],{"items":456},[457,462,468,470,475,480,485,490,495,500],{"text":458,"config":459},"About",{"href":460,"dataGaName":461,"dataGaLocation":184},"/company/","about",{"text":463,"config":464,"footerGa":467},"Jobs",{"href":465,"dataGaName":466,"dataGaLocation":184},"/jobs/","jobs",{"dataGaName":466},{"text":429,"config":469},{"href":431,"dataGaName":432,"dataGaLocation":184},{"text":471,"config":472},"Leadership",{"href":473,"dataGaName":474,"dataGaLocation":184},"/company/team/e-group/","leadership",{"text":476,"config":477},"Handbook",{"href":478,"dataGaName":479,"dataGaLocation":184},"https://handbook.gitlab.com/","handbook",{"text":481,"config":482},"Investor relations",{"href":483,"dataGaName":484,"dataGaLocation":184},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":486,"config":487},"Trust Center",{"href":488,"dataGaName":489,"dataGaLocation":184},"/security/","trust center",{"text":491,"config":492},"AI Transparency Center",{"href":493,"dataGaName":494,"dataGaLocation":184},"/ai-transparency-center/","ai transparency center",{"text":496,"config":497},"Newsletter",{"href":498,"dataGaName":499,"dataGaLocation":184},"/company/contact/#contact-forms","newsletter",{"text":501,"config":502},"Press",{"href":503,"dataGaName":504,"dataGaLocation":184},"/press/","press",{"text":506,"config":507,"menu":508},"Contact us",{"dataNavLevelOne":452},{"type":235,"columns":509},[510],{"items":511},[512,517,522],{"text":513,"config":514},"Talk to sales",{"href":515,"dataGaName":516,"dataGaLocation":184},"/sales/","talk to sales",{"text":518,"config":519},"Support portal",{"href":520,"dataGaName":521,"dataGaLocation":184},"https://support.gitlab.com/hc/en-us","support portal",{"text":523,"config":524},"Customer portal",{"href":525,"dataGaName":526,"dataGaLocation":184},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":528,"login":529,"suggestions":536},"Close",{"text":530,"link":531},"To search repositories and projects, login to",{"text":532,"config":533},"gitlab.com",{"href":198,"dataGaName":534,"dataGaLocation":535},"search login","search",{"text":537,"default":538},"Suggestions",[539,541,545,547,551,555],{"text":215,"config":540},{"href":220,"dataGaName":215,"dataGaLocation":535},{"text":542,"config":543},"Code Suggestions (AI)",{"href":544,"dataGaName":542,"dataGaLocation":535},"/solutions/code-suggestions/",{"text":251,"config":546},{"href":253,"dataGaName":251,"dataGaLocation":535},{"text":548,"config":549},"GitLab on AWS",{"href":550,"dataGaName":548,"dataGaLocation":535},"/partners/technology-partners/aws/",{"text":552,"config":553},"GitLab on Google Cloud",{"href":554,"dataGaName":552,"dataGaLocation":535},"/partners/technology-partners/google-cloud-platform/",{"text":556,"config":557},"Why GitLab?",{"href":228,"dataGaName":556,"dataGaLocation":535},{"freeTrial":559,"mobileIcon":564,"desktopIcon":569,"secondaryButton":572},{"text":560,"config":561},"Start free trial",{"href":562,"dataGaName":189,"dataGaLocation":563},"https://gitlab.com/-/trials/new/","nav",{"altText":565,"config":566},"Gitlab Icon",{"src":567,"dataGaName":568,"dataGaLocation":563},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":565,"config":570},{"src":571,"dataGaName":568,"dataGaLocation":563},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":573,"config":574},"Get Started",{"href":575,"dataGaName":576,"dataGaLocation":563},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":578,"mobileIcon":582,"desktopIcon":584},{"text":579,"config":580},"Learn more about GitLab Duo",{"href":220,"dataGaName":581,"dataGaLocation":563},"gitlab duo",{"altText":565,"config":583},{"src":567,"dataGaName":568,"dataGaLocation":563},{"altText":565,"config":585},{"src":571,"dataGaName":568,"dataGaLocation":563},{"button":587,"mobileIcon":592,"desktopIcon":594},{"text":588,"config":589},"/switch",{"href":590,"dataGaName":591,"dataGaLocation":563},"#contact","switch",{"altText":565,"config":593},{"src":567,"dataGaName":568,"dataGaLocation":563},{"altText":565,"config":595},{"src":596,"dataGaName":568,"dataGaLocation":563},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":598,"mobileIcon":603,"desktopIcon":605},{"text":599,"config":600},"Back to pricing",{"href":333,"dataGaName":601,"dataGaLocation":563,"icon":602},"back to pricing","GoBack",{"altText":565,"config":604},{"src":567,"dataGaName":568,"dataGaLocation":563},{"altText":565,"config":606},{"src":571,"dataGaName":568,"dataGaLocation":563},{"title":608,"titleMobile":609,"button":610,"config":615},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":226,"config":611},{"href":612,"dataGaName":613,"dataGaLocation":614},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":616,"disabled":166},"release",{"data":618},{"text":619,"source":620,"edit":626,"contribute":631,"config":636,"items":641,"minimal":851},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":621,"config":622},"View page source",{"href":623,"dataGaName":624,"dataGaLocation":625},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":627,"config":628},"Edit this page",{"href":629,"dataGaName":630,"dataGaLocation":625},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":632,"config":633},"Please contribute",{"href":634,"dataGaName":635,"dataGaLocation":625},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":637,"facebook":638,"youtube":639,"linkedin":640},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[642,689,743,787,819],{"title":331,"links":643,"subMenu":658},[644,648,653],{"text":645,"config":646},"View plans",{"href":333,"dataGaName":647,"dataGaLocation":625},"view plans",{"text":649,"config":650},"Why Premium?",{"href":651,"dataGaName":652,"dataGaLocation":625},"/pricing/premium/","why premium",{"text":654,"config":655},"Why Ultimate?",{"href":656,"dataGaName":657,"dataGaLocation":625},"/pricing/ultimate/","why ultimate",[659],{"title":660,"links":661},"Contact Us",[662,665,667,669,674,679,684],{"text":663,"config":664},"Contact sales",{"href":515,"dataGaName":194,"dataGaLocation":625},{"text":518,"config":666},{"href":520,"dataGaName":521,"dataGaLocation":625},{"text":523,"config":668},{"href":525,"dataGaName":526,"dataGaLocation":625},{"text":670,"config":671},"Status",{"href":672,"dataGaName":673,"dataGaLocation":625},"https://status.gitlab.com/","status",{"text":675,"config":676},"Terms of use",{"href":677,"dataGaName":678,"dataGaLocation":625},"/terms/","terms of use",{"text":680,"config":681},"Privacy statement",{"href":682,"dataGaName":683,"dataGaLocation":625},"/privacy/","privacy statement",{"text":685,"config":686},"Cookie preferences",{"dataGaName":687,"dataGaLocation":625,"id":688,"isOneTrustButton":169},"cookie preferences","ot-sdk-btn",{"title":231,"links":690,"subMenu":699},[691,695],{"text":692,"config":693},"DevSecOps platform",{"href":213,"dataGaName":694,"dataGaLocation":625},"devsecops platform",{"text":696,"config":697},"AI-Assisted Development",{"href":220,"dataGaName":698,"dataGaLocation":625},"ai-assisted development",[700],{"title":701,"links":702},"Topics",[703,708,713,718,723,728,733,738],{"text":704,"config":705},"CICD",{"href":706,"dataGaName":707,"dataGaLocation":625},"/topics/ci-cd/","cicd",{"text":709,"config":710},"GitOps",{"href":711,"dataGaName":712,"dataGaLocation":625},"/topics/gitops/","gitops",{"text":714,"config":715},"DevOps",{"href":716,"dataGaName":717,"dataGaLocation":625},"/topics/devops/","devops",{"text":719,"config":720},"Version Control",{"href":721,"dataGaName":722,"dataGaLocation":625},"/topics/version-control/","version control",{"text":724,"config":725},"DevSecOps",{"href":726,"dataGaName":727,"dataGaLocation":625},"/topics/devsecops/","devsecops",{"text":729,"config":730},"Cloud Native",{"href":731,"dataGaName":732,"dataGaLocation":625},"/topics/cloud-native/","cloud native",{"text":734,"config":735},"AI for Coding",{"href":736,"dataGaName":737,"dataGaLocation":625},"/topics/devops/ai-for-coding/","ai for coding",{"text":739,"config":740},"Agentic AI",{"href":741,"dataGaName":742,"dataGaLocation":625},"/topics/agentic-ai/","agentic ai",{"title":744,"links":745},"Solutions",[746,748,750,755,759,762,766,769,771,774,777,782],{"text":275,"config":747},{"href":270,"dataGaName":275,"dataGaLocation":625},{"text":264,"config":749},{"href":247,"dataGaName":248,"dataGaLocation":625},{"text":751,"config":752},"Agile development",{"href":753,"dataGaName":754,"dataGaLocation":625},"/solutions/agile-delivery/","agile delivery",{"text":756,"config":757},"SCM",{"href":260,"dataGaName":758,"dataGaLocation":625},"source code management",{"text":704,"config":760},{"href":253,"dataGaName":761,"dataGaLocation":625},"continuous integration & delivery",{"text":763,"config":764},"Value stream management",{"href":303,"dataGaName":765,"dataGaLocation":625},"value stream management",{"text":709,"config":767},{"href":768,"dataGaName":712,"dataGaLocation":625},"/solutions/gitops/",{"text":313,"config":770},{"href":316,"dataGaName":317,"dataGaLocation":625},{"text":772,"config":773},"Small business",{"href":322,"dataGaName":323,"dataGaLocation":625},{"text":775,"config":776},"Public sector",{"href":328,"dataGaName":329,"dataGaLocation":625},{"text":778,"config":779},"Education",{"href":780,"dataGaName":781,"dataGaLocation":625},"/solutions/education/","education",{"text":783,"config":784},"Financial services",{"href":785,"dataGaName":786,"dataGaLocation":625},"/solutions/finance/","financial services",{"title":336,"links":788},[789,791,793,795,798,800,803,805,807,809,811,813,815,817],{"text":349,"config":790},{"href":351,"dataGaName":352,"dataGaLocation":625},{"text":354,"config":792},{"href":356,"dataGaName":357,"dataGaLocation":625},{"text":359,"config":794},{"href":361,"dataGaName":362,"dataGaLocation":625},{"text":364,"config":796},{"href":366,"dataGaName":797,"dataGaLocation":625},"docs",{"text":387,"config":799},{"href":389,"dataGaName":390,"dataGaLocation":625},{"text":801,"config":802},"What's new",{"href":447,"dataGaName":448,"dataGaLocation":625},{"text":382,"config":804},{"href":384,"dataGaName":385,"dataGaLocation":625},{"text":401,"config":806},{"href":403,"dataGaName":404,"dataGaLocation":625},{"text":409,"config":808},{"href":411,"dataGaName":412,"dataGaLocation":625},{"text":414,"config":810},{"href":416,"dataGaName":417,"dataGaLocation":625},{"text":419,"config":812},{"href":421,"dataGaName":422,"dataGaLocation":625},{"text":424,"config":814},{"href":426,"dataGaName":427,"dataGaLocation":625},{"text":429,"config":816},{"href":431,"dataGaName":432,"dataGaLocation":625},{"text":434,"config":818},{"href":436,"dataGaName":437,"dataGaLocation":625},{"title":450,"links":820},[821,823,825,827,829,831,835,840,842,844,846],{"text":458,"config":822},{"href":460,"dataGaName":452,"dataGaLocation":625},{"text":463,"config":824},{"href":465,"dataGaName":466,"dataGaLocation":625},{"text":471,"config":826},{"href":473,"dataGaName":474,"dataGaLocation":625},{"text":476,"config":828},{"href":478,"dataGaName":479,"dataGaLocation":625},{"text":481,"config":830},{"href":483,"dataGaName":484,"dataGaLocation":625},{"text":832,"config":833},"Sustainability",{"href":834,"dataGaName":832,"dataGaLocation":625},"/sustainability/",{"text":836,"config":837},"Diversity, inclusion and belonging (DIB)",{"href":838,"dataGaName":839,"dataGaLocation":625},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":486,"config":841},{"href":488,"dataGaName":489,"dataGaLocation":625},{"text":496,"config":843},{"href":498,"dataGaName":499,"dataGaLocation":625},{"text":501,"config":845},{"href":503,"dataGaName":504,"dataGaLocation":625},{"text":847,"config":848},"Modern Slavery Transparency Statement",{"href":849,"dataGaName":850,"dataGaLocation":625},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":852},[853,856,859],{"text":854,"config":855},"Terms",{"href":677,"dataGaName":678,"dataGaLocation":625},{"text":857,"config":858},"Cookies",{"dataGaName":687,"dataGaLocation":625,"id":688,"isOneTrustButton":169},{"text":860,"config":861},"Privacy",{"href":682,"dataGaName":683,"dataGaLocation":625},[863],{"id":864,"title":7,"body":165,"config":865,"content":867,"description":165,"extension":871,"meta":872,"navigation":169,"path":873,"seo":874,"stem":875,"__hash__":876},"blogAuthors/en-us/blog/authors/pablo-carranza.yml",{"template":866},"BlogAuthor",{"name":7,"config":868},{"headshot":869,"ctfId":870},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Pablo-Carranza","yml",{},"/en-us/blog/authors/pablo-carranza",{},"en-us/blog/authors/pablo-carranza","CSXEB1tj-U7HH0__znUYl6QtFcPuLGeiJIkP6GENedA",[878,887,895],{"title":879,"description":880,"heroImage":881,"category":161,"date":882,"authors":883,"slug":886,"externalUrl":165},"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",[884,885],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":888,"description":889,"heroImage":890,"category":161,"date":891,"authors":892,"slug":894,"externalUrl":165},"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",[893],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":896,"description":897,"heroImage":898,"category":161,"date":899,"authors":900,"slug":902,"externalUrl":165},"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",[901],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":904},[905,919,931,943],{"id":906,"categories":907,"header":909,"text":910,"button":911,"image":916},"ai-modernization",[908],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":912,"config":913},"Get your AI maturity score",{"href":914,"dataGaName":915,"dataGaLocation":390},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":917},{"src":918},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":920,"categories":921,"header":923,"text":910,"button":924,"image":928},"devops-modernization",[922,727],"product","Are you just managing tools or shipping innovation?",{"text":925,"config":926},"Get your DevOps maturity score",{"href":927,"dataGaName":915,"dataGaLocation":390},"/assessments/devops-modernization-assessment/",{"config":929},{"src":930},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":932,"categories":933,"header":935,"text":910,"button":936,"image":940},"security-modernization",[934],"security","Are you trading speed for security?",{"text":937,"config":938},"Get your security maturity score",{"href":939,"dataGaName":915,"dataGaLocation":390},"/assessments/security-modernization-assessment/",{"config":941},{"src":942},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":944,"paths":945,"header":948,"text":949,"button":950,"image":955},"github-azure-migration",[946,947],"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":951,"config":952},"See how GitLab compares to GitHub",{"href":953,"dataGaName":954,"dataGaLocation":390},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":956},{"src":930},{"header":958,"blurb":959,"button":960,"secondaryButton":965},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":961,"config":962},"Get your free trial",{"href":963,"dataGaName":189,"dataGaLocation":964},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":663,"config":966},{"href":515,"dataGaName":194,"dataGaLocation":964},1786803756612]