[{"data":1,"prerenderedAt":1196},["ShallowReactive",2],{"/blog/using-omnibus-gitlab-to-ship-gitlab":3,"navigation-en-us":408,"banner-en-us":836,"footer-en-us":846,"blog-post-authors-en-us-Marin Jankovski":1091,"blog-related-posts-en-us-using-omnibus-gitlab-to-ship-gitlab":1106,"blog-promotions-en-us":1132,"next-steps-en-us":1186},{"id":4,"title":5,"authors":6,"body":8,"category":370,"date":371,"description":372,"extension":373,"externalUrl":374,"faq":374,"featured":375,"heroImage":376,"meta":377,"navigation":398,"path":399,"seo":400,"slug":404,"stem":405,"tags":374,"template":406,"updatedDate":374,"__hash__":407},"blogPosts/en-us/blog/using-omnibus-gitlab-to-ship-gitlab.md","Using the Omnibus GitLab package to ship GitLab",[7],"Marin Jankovski",{"type":9,"value":10,"toc":358},"minimark",[11,42,45,50,73,76,89,93,105,108,111,115,118,121,124,127,130,145,148,168,171,174,179,182,185,188,192,195,200,203,206,213,217,220,223,237,240,243,250,253,256,260,267,275,279,282,289,293,296,299,336,339,345,351],[12,13,14,15,19,20,26,31,32,37,41],"p",{},"Two years ago we announced that ",[16,17,18],"span",{},"GitLab is now simple to install"," to great\ntriumph. Since then, GitLab has grown to become an irreplaceable tool for\nmany professionals. Part of this success can certainly be credited to an easier\ninstallation process using the omnibus-gitlab packages. The packages, however,\nseem to have polarized people to either\n",[21,22,25],"a",{"href":23,"rel":24},"https://twitter.com/invalidusrname/status/673862628125614080",[],"love",[21,27,30],{"href":28,"rel":29},"https://twitter.com/Merenon/status/692027386272047104",[],"them",", or\n",[21,33,36],{"href":34,"rel":35},"https://twitter.com/phessler/status/672747920635109376",[],"hate",[21,38,30],{"href":39,"rel":40},"https://twitter.com/jiphex/status/672746104103051265",[],".",[12,43,44],{},"Let's take a look at what kind of decisions we need to make on\nevery release of GitLab and how omnibus-gitlab package fits into this process.",[46,47,49],"h2",{"id":48},"omnibus-concept","Omnibus concept",[12,51,52,53,56,57,60,61,64,65,68,69,72],{},"The ",[16,54,55],{},"Omnibus project"," is the brainchild of Chef Inc.\nTheir product, Chef Server, was notoriously hard to install and configure. To\ntackle this issue the Omnibus project was created. The idea behind it was to\nhave one binary package for the supported OS that would install all required\ndependencies and allow configuration of each required component.\nThis meant that the end binary package will not be lean like the packages\nthat people usually encounter. In fact, they will be \"fat\" and\nhence ",[16,58,59],{},"the name Omnibus",".\nThis also meant going against ",[16,62,63],{},"the Unix design principles"," which favor\n",[16,66,67],{},"composable components"," as opposed to ",[16,70,71],{},"monolithic software"," (which reminds Unix\nusers too much of Windows software).",[12,74,75],{},"The concept is simple:",[77,78,79,83,86],"ul",{},[80,81,82],"li",{},"Have one binary package that contains all required components.",[80,84,85],{},"Make sure that a specific version of the package has all required components.",[80,87,88],{},"Make sure that the supplied components have the version that is known to work\nin a predictable manner with other components.",[46,90,92],{"id":91},"installing-gitlab-from-source","Installing GitLab from source",[12,94,95,96,99,100,104],{},"GitLab is facing similar challenges.\n",[16,97,98],{},"Installation and upgrade guides"," for what we call ",[101,102,103],"em",{},"installation from source","\nare available but they are at least 10 pages long.",[12,106,107],{},"They show how to install and configure multiple dependencies,\nsystem users, which directories and files need to exist, and user permissions\nthey need to have and so on. Installing a wrong version of a dependency\nmeans that things might not work as expected, so it is imperative to follow the\nguide strictly to the letter.",[12,109,110],{},"Upgrading can sometimes be challenging. The update guide is shorter but there are time constraints that can make the upgrade stressful. Having everyone breathing down\nyour neck and expecting everything to go smoothly makes upgrading very stressful.",[46,112,114],{"id":113},"omnibus-gitlab","Omnibus-gitlab",[12,116,117],{},"Enter the omnibus-gitlab package.",[12,119,120],{},"Anyone should be able to install and configure GitLab with minimum knowledge.\nGitLab should be available on the most widely-used Linux distributions.",[12,122,123],{},"We want the focus to be on GitLab and its features.\nInstallation and upgrades should be easy and almost enjoyable!",[12,125,126],{},"This is how omnibus-gitlab was born.",[12,128,129],{},"Benefits for everyone:",[131,132,133,136,139,142],"ol",{},[80,134,135],{},"Users need only to apply minimal effort to install GitLab.",[80,137,138],{},"Users need only to provide minimum configuration to get GitLab up and running.",[80,140,141],{},"Users can easily upgrade between GitLab versions.",[80,143,144],{},"Users are encouraged to upgrade to the latest version of GitLab which is\nalways better than the previous one.",[12,146,147],{},"Benefits for the maintainers of GitLab:",[131,149,150,153,156,159,162,165],{},[80,151,152],{},"We provide our users with only one binary package they would need to\ninstall.",[80,154,155],{},"We ship packages for multiple platforms at the same time.",[80,157,158],{},"We make sure that the components that GitLab requires for a specific\nversion are shipped.",[80,160,161],{},"We know that the components are running on versions that are compatible.",[80,163,164],{},"It becomes easier to support any issues users have because we have a more\nconsistent environment.",[80,166,167],{},"We maintain one project that covers all of the above.",[12,169,170],{},"The last point is very important for a project like GitLab.",[12,172,173],{},"GitLab has a monthly release cycle. Every month on the 22nd we need to release\na new version. We usually follow up the release with a couple of patch releases\nto address any regressions that might have been introduced previously.\nGiven how important GitLab is to the development infrastructure, we need to be\nable to react quickly to any vulnerabilities in GitLab or any of its components.",[175,176,178],"h3",{"id":177},"a-silver-bullet","A Silver Bullet?",[12,180,181],{},"Not quite.",[12,183,184],{},"The omnibus-gitlab package does a lot for the end user but because of that it\nmakes a lot of choices for the user. It will create the directories and files\non the file system and assume that it can do so.\nIt will create the system users. It will occupy the ports it needs.\nIt ships with its own UNIX init supervision system, runit.\nIt ships with libraries that may already exist on the system\n(albeit maybe of a different version).",[12,186,187],{},"For a very large portion of users all of the above won't matter but there are\nenvironments which are highly restrictive.\nThe package has a lot of configuration to make it easier to adjust to the\nenvironment but this can be a lot of work to get right.\nWe are always working on making the package even more customizable while\nassuming the best possible defaults for users who don't need to customize.\nHowever, it is a marathon rather than a sprint.",[175,189,191],{"id":190},"alternatives-to-omnibus-weve-considered","Alternatives to Omnibus we've considered",[12,193,194],{},"We are always evaluating the new options that become available.\nLet's take a look at a few of the options that we've already considered.",[196,197,199],"h4",{"id":198},"docker-images","Docker images",[12,201,202],{},"Two years ago Docker was still a very new project. It had problems like any new\nproject (like us!) The number of users using it in production is growing but\nwe could not and cannot count on everyone supporting Docker in their\nenvironments. Introducing Docker into your environment adds another piece of\nsoftware that needs support and not everyone can add this layer.",[12,204,205],{},"The packages in .deb and .rpm archive format are usually allowed in most if not\nall systems.",[12,207,208,209,212],{},"We do release new ",[16,210,211],{},"Docker"," images on every release as an additional method of\ninstalling GitLab.",[196,214,216],{"id":215},"native-debian-packages","Native Debian Packages",[12,218,219],{},"Users encouraging us to ship GitLab as a native Debian package usually say that\nthis would keep us in line with the Unix design principles and we can leverage\npackages that already exist on the system instead of reinventing the wheel! You\nmost likely already have openssl installed on your system, why do you want to\nship another one?",[12,221,222],{},"Let's take a look at what that would entail:",[131,224,225,228,231,234],{},[80,226,227],{},"Packaging over 300 Ruby gems as separate packages. (This is Spartaaa!)",[80,229,230],{},"If a component version we require does not exist in the system package\nrepository, tell the user to compile it.",[80,232,233],{},"Do this at least once a month to be able to follow the monthly release.",[80,235,236],{},"Make sure that any change that was created in GitLab by us or any of the\ncontributors does not break the package.",[12,238,239],{},"Native packages are more suited for the slower release cycles and this clashes\nwith the way GitLab does releases.",[12,241,242],{},"We also don't have enough expertise and big enough team to do native packaging.\nIt is a lot of work and we would need a dedicated team only for the packaging\nfor this specific platform.",[12,244,245,246,249],{},"There is some good news though!\nPirate Praveen has been working for the past 6-8 months on\n",[16,247,248],{},"native Debian packages",".\nThe packages are almost ready to be included in the Debian package\nrepository.",[12,251,252],{},"This will allow all users who do not want the omnibus-gitlab package to touch\ntheir system to easily install GitLab.",[12,254,255],{},"We have yet to see how much of an effort will it be to release new\nversions but this is something that will be announced once the packages are\nready.",[196,257,259],{"id":258},"native-fedora-packages","Native Fedora Packages",[12,261,262,263,266],{},"This case is pretty much the same as the native Debian packages.\nThere was an attempt to package GitLab for Fedora as a part of the\n",[16,264,265],{},"Google Summer of Code project"," by Achilleas Pipinellis, who has since become\na GitLab team-member. Through that effort, we learned it is a multi-person\njob and packaging alone is a lot of work. So, the project was never completed.",[12,268,269,270],{},"If you are interested in helping to create the native Fedora packages,\nyou can leave your comment in\n",[21,271,274],{"href":272,"rel":273},"https://gitlab.com/gitlab-org/gitlab-ce/issues/14043",[],"this issue on GitLab CE issue tracker.",[196,276,278],{"id":277},"anything-else","Anything else",[12,280,281],{},"We've been asked a few times why we don't just let Chef, Puppet, or Ansible to\nbe configured by the developer.",[12,283,284,285,288],{},"You can still use your favourite configuration management tool to do this work.\nHowever, be advised that it is ",[101,286,287],{},"still"," a lot of work. That also means that for\nevery GitLab update, the administrator needs to go through a list of changes\nand see if they need to upgrade the software. If they don't, GitLab might not\nwork as expected.\nThe end user most likely won't care how the setup is done, they might just see\nsomething not working as they would expect. That is a risk we want to remove if\nwe can.",[46,290,292],{"id":291},"conclusion","Conclusion",[12,294,295],{},"One of GitLab's strengths is that we are able to have a very short release\ncycle, getting the updates to all our users very quickly.\nThe omnibus-gitlab packages aren't perfect but they are currently the best\noption currently for frequent GitLab updates.",[12,297,298],{},"If you consider the amount of time required to maintain eight packages\n(four platforms, one package each for CE and EE, two docker images,\ntwo Raspberry Pi 2 packages),\nthe monthly release cycle, and making upgrades between versions and\ninstallations as simple as possible,\nthen omnibus-gitlab is doing a very good job.",[12,300,301,306,311,316,317,321,326,331,41],{},[21,302,305],{"href":303,"rel":304},"https://twitter.com/choyer/status/670273120566120449",[],"A lot",[21,307,310],{"href":308,"rel":309},"https://twitter.com/jrblier/status/613077041219399681",[],"of users",[21,312,315],{"href":313,"rel":314},"https://twitter.com/mickael_andrieu/status/646278424936480768",[],"that have been using","\nthe omnibus-gitlab packages\n",[21,318,320],{"href":23,"rel":319},[],"to maintain",[21,322,325],{"href":323,"rel":324},"https://twitter.com/J_Salamin/status/687884326629937152",[],"their GitLab installation",[21,327,330],{"href":328,"rel":329},"https://twitter.com/alexzeitler_/status/692812151296282625",[],"seem to",[21,332,335],{"href":333,"rel":334},"https://twitter.com/berkeleynerd/status/692093491149582339",[],"agree with this",[12,337,338],{},"With the omnibus-gitlab packages available for everyone, we can work in parallel\nto create more ways to install GitLab.",[12,340,341,342,41],{},"Want to help improve omnibus-gitlab package? Contribute to omnibus-gitlab at the\n",[16,343,344],{},"omnibus-gitlab repository",[12,346,347,348,41],{},"Want to work on making GitLab available on your favourite platform but need\nsome feedback? Get in touch through the ",[16,349,350],{},"GitLab CE issue tracker",[12,352,353,354,357],{},"Are you in New York on April 12th, 2016?\nAsk me a question at the ",[16,355,356],{},"Software Architecture Conference"," where I'll be\nspeaking about Shipping a Ruby on Rails stack to thousands of companies every\nmonth.",{"title":359,"searchDepth":360,"depth":360,"links":361},"",2,[362,363,364,369],{"id":48,"depth":360,"text":49},{"id":91,"depth":360,"text":92},{"id":113,"depth":360,"text":114,"children":365},[366,368],{"id":177,"depth":367,"text":178},3,{"id":190,"depth":367,"text":191},{"id":291,"depth":360,"text":292},"engineering","2016-03-21","Take a look at what kind of decisions we need to make on every release of GitLab and how omnibus-gitlab package fits into this process.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684635/Blog/Hero%20Images/cat-in-the-box.jpg",{"excerpt":378},{"type":9,"value":379},[380,396],[12,381,14,382,19,384,387,31,390,393,41],{},[16,383,18],{},[21,385,25],{"href":23,"rel":386},[],[21,388,30],{"href":28,"rel":389},[],[21,391,36],{"href":34,"rel":392},[],[21,394,30],{"href":39,"rel":395},[],[12,397,44],{},true,"/en-us/blog/using-omnibus-gitlab-to-ship-gitlab",{"title":5,"description":372,"ogTitle":5,"ogDescription":372,"noIndex":375,"ogImage":376,"ogUrl":401,"ogSiteName":402,"ogType":403,"canonicalUrls":401},"https://about.gitlab.com/blog/using-omnibus-gitlab-to-ship-gitlab","https://about.gitlab.com","article","using-omnibus-gitlab-to-ship-gitlab","en-us/blog/using-omnibus-gitlab-to-ship-gitlab","BlogPost","qNNKqUVcOhThN8AhT3fYK7x6SwXl84UOSbugAz4bqGc",{"logo":409,"freeTrial":414,"sales":419,"login":424,"items":429,"search":756,"minimal":787,"duo":806,"switchNav":815,"pricingDeployment":826},{"config":410},{"href":411,"dataGaName":412,"dataGaLocation":413},"/","gitlab logo","header",{"text":415,"config":416},"Get free trial",{"href":417,"dataGaName":418,"dataGaLocation":413},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":420,"config":421},"Request a demo",{"href":422,"dataGaName":423,"dataGaLocation":413},"/sales/?contact-topic=request-demo","sales",{"text":425,"config":426},"Sign in",{"href":427,"dataGaName":428,"dataGaLocation":413},"https://gitlab.com/users/sign_in/","sign in",[430,459,559,564,678,734],{"text":431,"config":432,"menu":434},"Platform",{"dataNavLevelOne":433},"platform",{"type":435,"columns":436},"cards",[437,443,451],{"title":431,"description":438,"link":439},"The intelligent orchestration platform for DevSecOps",{"text":440,"config":441},"Explore our Platform",{"href":442,"dataGaName":433,"dataGaLocation":413},"/platform/",{"title":444,"description":445,"link":446},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":447,"config":448},"Meet GitLab Duo",{"href":449,"dataGaName":450,"dataGaLocation":413},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":452,"description":453,"link":454},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":455,"config":456},"Learn more",{"href":457,"dataGaName":458,"dataGaLocation":413},"/why-gitlab/","why gitlab",{"text":460,"left":398,"config":461,"menu":463},"Product",{"dataNavLevelOne":462},"solutions",{"type":464,"link":465,"columns":469,"feature":538},"lists",{"text":466,"config":467},"View all Solutions",{"href":468,"dataGaName":462,"dataGaLocation":413},"/solutions/",[470,494,517],{"title":471,"description":472,"link":473,"items":478},"Automation","CI/CD and automation to accelerate deployment",{"config":474},{"icon":475,"href":476,"dataGaName":477,"dataGaLocation":413},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[479,483,486,490],{"text":480,"config":481},"CI/CD",{"href":482,"dataGaLocation":413,"dataGaName":480},"/solutions/continuous-integration/",{"text":444,"config":484},{"href":449,"dataGaLocation":413,"dataGaName":485},"gitlab duo agent platform - product menu",{"text":487,"config":488},"Source Code Management",{"href":489,"dataGaLocation":413,"dataGaName":487},"/solutions/source-code-management/",{"text":491,"config":492},"Automated Software Delivery",{"href":476,"dataGaLocation":413,"dataGaName":493},"Automated software delivery",{"title":495,"description":496,"link":497,"items":502},"Security","Deliver code faster without compromising security",{"config":498},{"href":499,"dataGaName":500,"dataGaLocation":413,"icon":501},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[503,507,512],{"text":504,"config":505},"Application Security Testing",{"href":499,"dataGaName":506,"dataGaLocation":413},"Application security testing",{"text":508,"config":509},"Software Supply Chain Security",{"href":510,"dataGaLocation":413,"dataGaName":511},"/solutions/supply-chain/","Software supply chain security",{"text":513,"config":514},"Software Compliance",{"href":515,"dataGaName":516,"dataGaLocation":413},"/solutions/software-compliance/","software compliance",{"title":518,"link":519,"items":524},"Measurement",{"config":520},{"icon":521,"href":522,"dataGaName":523,"dataGaLocation":413},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[525,529,533],{"text":526,"config":527},"Visibility & Measurement",{"href":522,"dataGaLocation":413,"dataGaName":528},"Visibility and Measurement",{"text":530,"config":531},"Value Stream Management",{"href":532,"dataGaLocation":413,"dataGaName":530},"/solutions/value-stream-management/",{"text":534,"config":535},"Analytics & Insights",{"href":536,"dataGaLocation":413,"dataGaName":537},"/solutions/analytics-and-insights/","Analytics and insights",{"title":539,"type":464,"items":540},"GitLab for",[541,547,553],{"text":542,"config":543},"Enterprise",{"icon":544,"href":545,"dataGaLocation":413,"dataGaName":546},"Building","/enterprise/","enterprise",{"text":548,"config":549},"Small Business",{"icon":550,"href":551,"dataGaLocation":413,"dataGaName":552},"Work","/small-business/","small business",{"text":554,"config":555},"Public Sector",{"icon":556,"href":557,"dataGaLocation":413,"dataGaName":558},"Organization","/solutions/public-sector/","public sector",{"text":560,"config":561},"Pricing",{"href":562,"dataGaName":563,"dataGaLocation":413,"dataNavLevelOne":563},"/pricing/","pricing",{"text":565,"config":566,"menu":568},"Resources",{"dataNavLevelOne":567},"resources",{"type":464,"link":569,"columns":573,"feature":667},{"text":570,"config":571},"View all resources",{"href":572,"dataGaName":567,"dataGaLocation":413},"/resources/",[574,607,634],{"title":575,"items":576},"Getting started",[577,582,587,592,597,602],{"text":578,"config":579},"Install",{"href":580,"dataGaName":581,"dataGaLocation":413},"/install/","install",{"text":583,"config":584},"Quick start guides",{"href":585,"dataGaName":586,"dataGaLocation":413},"/get-started/","quick setup checklists",{"text":588,"config":589},"Learn",{"href":590,"dataGaLocation":413,"dataGaName":591},"https://university.gitlab.com/","learn",{"text":593,"config":594},"Product documentation",{"href":595,"dataGaName":596,"dataGaLocation":413},"https://docs.gitlab.com/","product documentation",{"text":598,"config":599},"Best practice videos",{"href":600,"dataGaName":601,"dataGaLocation":413},"/getting-started-videos/","best practice videos",{"text":603,"config":604},"Integrations",{"href":605,"dataGaName":606,"dataGaLocation":413},"/integrations/","integrations",{"title":608,"items":609},"Discover",[610,615,620,625,629],{"text":611,"config":612},"Customer success stories",{"href":613,"dataGaName":614,"dataGaLocation":413},"/customers/","customer success stories",{"text":616,"config":617},"Blog",{"href":618,"dataGaName":619,"dataGaLocation":413},"/blog/","blog",{"text":621,"config":622},"Demo Hub",{"href":623,"dataGaName":624,"dataGaLocation":413},"/demo-hub/","demo hub",{"text":626,"config":627},"The Source",{"href":628,"dataGaName":619,"dataGaLocation":413},"/the-source/",{"text":630,"config":631},"Remote",{"href":632,"dataGaName":633,"dataGaLocation":413},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":635,"items":636},"Connect",[637,642,647,652,657,662],{"text":638,"config":639},"GitLab Services",{"href":640,"dataGaName":641,"dataGaLocation":413},"/services/","services",{"text":643,"config":644},"Contribute",{"href":645,"dataGaName":646,"dataGaLocation":413},"https://contributors.gitlab.com","contribute",{"text":648,"config":649},"Community",{"href":650,"dataGaName":651,"dataGaLocation":413},"/community/","community",{"text":653,"config":654},"Forum",{"href":655,"dataGaName":656,"dataGaLocation":413},"https://forum.gitlab.com/","forum",{"text":658,"config":659},"Events",{"href":660,"dataGaName":661,"dataGaLocation":413},"/events/","events",{"text":663,"config":664},"Partners",{"href":665,"dataGaName":666,"dataGaLocation":413},"/partners/","partners",{"config":668,"title":671,"text":672,"link":673},{"background":669,"textColor":670},"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":674,"config":675},"Read the latest",{"href":676,"dataGaName":677,"dataGaLocation":413},"/whats-new/","whats new",{"text":679,"config":680,"menu":682},"Company",{"dataNavLevelOne":681},"company",{"type":464,"columns":683},[684],{"items":685},[686,691,697,699,704,709,714,719,724,729],{"text":687,"config":688},"About",{"href":689,"dataGaName":690,"dataGaLocation":413},"/company/","about",{"text":692,"config":693,"footerGa":696},"Jobs",{"href":694,"dataGaName":695,"dataGaLocation":413},"/jobs/","jobs",{"dataGaName":695},{"text":658,"config":698},{"href":660,"dataGaName":661,"dataGaLocation":413},{"text":700,"config":701},"Leadership",{"href":702,"dataGaName":703,"dataGaLocation":413},"/company/team/e-group/","leadership",{"text":705,"config":706},"Handbook",{"href":707,"dataGaName":708,"dataGaLocation":413},"https://handbook.gitlab.com/","handbook",{"text":710,"config":711},"Investor relations",{"href":712,"dataGaName":713,"dataGaLocation":413},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":715,"config":716},"Trust Center",{"href":717,"dataGaName":718,"dataGaLocation":413},"/security/","trust center",{"text":720,"config":721},"AI Transparency Center",{"href":722,"dataGaName":723,"dataGaLocation":413},"/ai-transparency-center/","ai transparency center",{"text":725,"config":726},"Newsletter",{"href":727,"dataGaName":728,"dataGaLocation":413},"/company/contact/#contact-forms","newsletter",{"text":730,"config":731},"Press",{"href":732,"dataGaName":733,"dataGaLocation":413},"/press/","press",{"text":735,"config":736,"menu":737},"Contact us",{"dataNavLevelOne":681},{"type":464,"columns":738},[739],{"items":740},[741,746,751],{"text":742,"config":743},"Talk to sales",{"href":744,"dataGaName":745,"dataGaLocation":413},"/sales/","talk to sales",{"text":747,"config":748},"Support portal",{"href":749,"dataGaName":750,"dataGaLocation":413},"https://support.gitlab.com/hc/en-us","support portal",{"text":752,"config":753},"Customer portal",{"href":754,"dataGaName":755,"dataGaLocation":413},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":757,"login":758,"suggestions":765},"Close",{"text":759,"link":760},"To search repositories and projects, login to",{"text":761,"config":762},"gitlab.com",{"href":427,"dataGaName":763,"dataGaLocation":764},"search login","search",{"text":766,"default":767},"Suggestions",[768,770,774,776,780,784],{"text":444,"config":769},{"href":449,"dataGaName":444,"dataGaLocation":764},{"text":771,"config":772},"Code Suggestions (AI)",{"href":773,"dataGaName":771,"dataGaLocation":764},"/solutions/code-suggestions/",{"text":480,"config":775},{"href":482,"dataGaName":480,"dataGaLocation":764},{"text":777,"config":778},"GitLab on AWS",{"href":779,"dataGaName":777,"dataGaLocation":764},"/partners/technology-partners/aws/",{"text":781,"config":782},"GitLab on Google Cloud",{"href":783,"dataGaName":781,"dataGaLocation":764},"/partners/technology-partners/google-cloud-platform/",{"text":785,"config":786},"Why GitLab?",{"href":457,"dataGaName":785,"dataGaLocation":764},{"freeTrial":788,"mobileIcon":793,"desktopIcon":798,"secondaryButton":801},{"text":789,"config":790},"Start free trial",{"href":791,"dataGaName":418,"dataGaLocation":792},"https://gitlab.com/-/trials/new/","nav",{"altText":794,"config":795},"Gitlab Icon",{"src":796,"dataGaName":797,"dataGaLocation":792},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":794,"config":799},{"src":800,"dataGaName":797,"dataGaLocation":792},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":802,"config":803},"Get Started",{"href":804,"dataGaName":805,"dataGaLocation":792},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":807,"mobileIcon":811,"desktopIcon":813},{"text":808,"config":809},"Learn more about GitLab Duo",{"href":449,"dataGaName":810,"dataGaLocation":792},"gitlab duo",{"altText":794,"config":812},{"src":796,"dataGaName":797,"dataGaLocation":792},{"altText":794,"config":814},{"src":800,"dataGaName":797,"dataGaLocation":792},{"button":816,"mobileIcon":821,"desktopIcon":823},{"text":817,"config":818},"/switch",{"href":819,"dataGaName":820,"dataGaLocation":792},"#contact","switch",{"altText":794,"config":822},{"src":796,"dataGaName":797,"dataGaLocation":792},{"altText":794,"config":824},{"src":825,"dataGaName":797,"dataGaLocation":792},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":827,"mobileIcon":832,"desktopIcon":834},{"text":828,"config":829},"Back to pricing",{"href":562,"dataGaName":830,"dataGaLocation":792,"icon":831},"back to pricing","GoBack",{"altText":794,"config":833},{"src":796,"dataGaName":797,"dataGaLocation":792},{"altText":794,"config":835},{"src":800,"dataGaName":797,"dataGaLocation":792},{"title":837,"titleMobile":838,"button":839,"config":844},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":455,"config":840},{"href":841,"dataGaName":842,"dataGaLocation":843},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":845,"disabled":375},"release",{"data":847},{"text":848,"source":849,"edit":855,"contribute":860,"config":865,"items":870,"minimal":1080},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":850,"config":851},"View page source",{"href":852,"dataGaName":853,"dataGaLocation":854},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":856,"config":857},"Edit this page",{"href":858,"dataGaName":859,"dataGaLocation":854},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":861,"config":862},"Please contribute",{"href":863,"dataGaName":864,"dataGaLocation":854},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":866,"facebook":867,"youtube":868,"linkedin":869},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[871,918,972,1016,1048],{"title":560,"links":872,"subMenu":887},[873,877,882],{"text":874,"config":875},"View plans",{"href":562,"dataGaName":876,"dataGaLocation":854},"view plans",{"text":878,"config":879},"Why Premium?",{"href":880,"dataGaName":881,"dataGaLocation":854},"/pricing/premium/","why premium",{"text":883,"config":884},"Why Ultimate?",{"href":885,"dataGaName":886,"dataGaLocation":854},"/pricing/ultimate/","why ultimate",[888],{"title":889,"links":890},"Contact Us",[891,894,896,898,903,908,913],{"text":892,"config":893},"Contact sales",{"href":744,"dataGaName":423,"dataGaLocation":854},{"text":747,"config":895},{"href":749,"dataGaName":750,"dataGaLocation":854},{"text":752,"config":897},{"href":754,"dataGaName":755,"dataGaLocation":854},{"text":899,"config":900},"Status",{"href":901,"dataGaName":902,"dataGaLocation":854},"https://status.gitlab.com/","status",{"text":904,"config":905},"Terms of use",{"href":906,"dataGaName":907,"dataGaLocation":854},"/terms/","terms of use",{"text":909,"config":910},"Privacy statement",{"href":911,"dataGaName":912,"dataGaLocation":854},"/privacy/","privacy statement",{"text":914,"config":915},"Cookie preferences",{"dataGaName":916,"dataGaLocation":854,"id":917,"isOneTrustButton":398},"cookie preferences","ot-sdk-btn",{"title":460,"links":919,"subMenu":928},[920,924],{"text":921,"config":922},"DevSecOps platform",{"href":442,"dataGaName":923,"dataGaLocation":854},"devsecops platform",{"text":925,"config":926},"AI-Assisted Development",{"href":449,"dataGaName":927,"dataGaLocation":854},"ai-assisted development",[929],{"title":930,"links":931},"Topics",[932,937,942,947,952,957,962,967],{"text":933,"config":934},"CICD",{"href":935,"dataGaName":936,"dataGaLocation":854},"/topics/ci-cd/","cicd",{"text":938,"config":939},"GitOps",{"href":940,"dataGaName":941,"dataGaLocation":854},"/topics/gitops/","gitops",{"text":943,"config":944},"DevOps",{"href":945,"dataGaName":946,"dataGaLocation":854},"/topics/devops/","devops",{"text":948,"config":949},"Version Control",{"href":950,"dataGaName":951,"dataGaLocation":854},"/topics/version-control/","version control",{"text":953,"config":954},"DevSecOps",{"href":955,"dataGaName":956,"dataGaLocation":854},"/topics/devsecops/","devsecops",{"text":958,"config":959},"Cloud Native",{"href":960,"dataGaName":961,"dataGaLocation":854},"/topics/cloud-native/","cloud native",{"text":963,"config":964},"AI for Coding",{"href":965,"dataGaName":966,"dataGaLocation":854},"/topics/devops/ai-for-coding/","ai for coding",{"text":968,"config":969},"Agentic AI",{"href":970,"dataGaName":971,"dataGaLocation":854},"/topics/agentic-ai/","agentic ai",{"title":973,"links":974},"Solutions",[975,977,979,984,988,991,995,998,1000,1003,1006,1011],{"text":504,"config":976},{"href":499,"dataGaName":504,"dataGaLocation":854},{"text":493,"config":978},{"href":476,"dataGaName":477,"dataGaLocation":854},{"text":980,"config":981},"Agile development",{"href":982,"dataGaName":983,"dataGaLocation":854},"/solutions/agile-delivery/","agile delivery",{"text":985,"config":986},"SCM",{"href":489,"dataGaName":987,"dataGaLocation":854},"source code management",{"text":933,"config":989},{"href":482,"dataGaName":990,"dataGaLocation":854},"continuous integration & delivery",{"text":992,"config":993},"Value stream management",{"href":532,"dataGaName":994,"dataGaLocation":854},"value stream management",{"text":938,"config":996},{"href":997,"dataGaName":941,"dataGaLocation":854},"/solutions/gitops/",{"text":542,"config":999},{"href":545,"dataGaName":546,"dataGaLocation":854},{"text":1001,"config":1002},"Small business",{"href":551,"dataGaName":552,"dataGaLocation":854},{"text":1004,"config":1005},"Public sector",{"href":557,"dataGaName":558,"dataGaLocation":854},{"text":1007,"config":1008},"Education",{"href":1009,"dataGaName":1010,"dataGaLocation":854},"/solutions/education/","education",{"text":1012,"config":1013},"Financial services",{"href":1014,"dataGaName":1015,"dataGaLocation":854},"/solutions/finance/","financial services",{"title":565,"links":1017},[1018,1020,1022,1024,1027,1029,1032,1034,1036,1038,1040,1042,1044,1046],{"text":578,"config":1019},{"href":580,"dataGaName":581,"dataGaLocation":854},{"text":583,"config":1021},{"href":585,"dataGaName":586,"dataGaLocation":854},{"text":588,"config":1023},{"href":590,"dataGaName":591,"dataGaLocation":854},{"text":593,"config":1025},{"href":595,"dataGaName":1026,"dataGaLocation":854},"docs",{"text":616,"config":1028},{"href":618,"dataGaName":619,"dataGaLocation":854},{"text":1030,"config":1031},"What's new",{"href":676,"dataGaName":677,"dataGaLocation":854},{"text":611,"config":1033},{"href":613,"dataGaName":614,"dataGaLocation":854},{"text":630,"config":1035},{"href":632,"dataGaName":633,"dataGaLocation":854},{"text":638,"config":1037},{"href":640,"dataGaName":641,"dataGaLocation":854},{"text":643,"config":1039},{"href":645,"dataGaName":646,"dataGaLocation":854},{"text":648,"config":1041},{"href":650,"dataGaName":651,"dataGaLocation":854},{"text":653,"config":1043},{"href":655,"dataGaName":656,"dataGaLocation":854},{"text":658,"config":1045},{"href":660,"dataGaName":661,"dataGaLocation":854},{"text":663,"config":1047},{"href":665,"dataGaName":666,"dataGaLocation":854},{"title":679,"links":1049},[1050,1052,1054,1056,1058,1060,1064,1069,1071,1073,1075],{"text":687,"config":1051},{"href":689,"dataGaName":681,"dataGaLocation":854},{"text":692,"config":1053},{"href":694,"dataGaName":695,"dataGaLocation":854},{"text":700,"config":1055},{"href":702,"dataGaName":703,"dataGaLocation":854},{"text":705,"config":1057},{"href":707,"dataGaName":708,"dataGaLocation":854},{"text":710,"config":1059},{"href":712,"dataGaName":713,"dataGaLocation":854},{"text":1061,"config":1062},"Sustainability",{"href":1063,"dataGaName":1061,"dataGaLocation":854},"/sustainability/",{"text":1065,"config":1066},"Diversity, inclusion and belonging (DIB)",{"href":1067,"dataGaName":1068,"dataGaLocation":854},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":715,"config":1070},{"href":717,"dataGaName":718,"dataGaLocation":854},{"text":725,"config":1072},{"href":727,"dataGaName":728,"dataGaLocation":854},{"text":730,"config":1074},{"href":732,"dataGaName":733,"dataGaLocation":854},{"text":1076,"config":1077},"Modern Slavery Transparency Statement",{"href":1078,"dataGaName":1079,"dataGaLocation":854},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1081},[1082,1085,1088],{"text":1083,"config":1084},"Terms",{"href":906,"dataGaName":907,"dataGaLocation":854},{"text":1086,"config":1087},"Cookies",{"dataGaName":916,"dataGaLocation":854,"id":917,"isOneTrustButton":398},{"text":1089,"config":1090},"Privacy",{"href":911,"dataGaName":912,"dataGaLocation":854},[1092],{"id":1093,"title":7,"body":374,"config":1094,"content":1096,"description":374,"extension":1100,"meta":1101,"navigation":398,"path":1102,"seo":1103,"stem":1104,"__hash__":1105},"blogAuthors/en-us/blog/authors/marin-jankovski.yml",{"template":1095},"BlogAuthor",{"name":7,"config":1097},{"headshot":1098,"ctfId":1099},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671628/Blog/Author%20Headshots/marin-headshot.jpg","Marin-Jankovski","yml",{},"/en-us/blog/authors/marin-jankovski",{},"en-us/blog/authors/marin-jankovski","xUlu3cnotMGILqHu8SuDcXi7ks2Gu9IQQ8fA82jQqJU",[1107,1116,1124],{"title":1108,"description":1109,"heroImage":1110,"category":370,"date":1111,"authors":1112,"slug":1115,"externalUrl":374},"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",[1113,1114],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1117,"description":1118,"heroImage":1119,"category":370,"date":1120,"authors":1121,"slug":1123,"externalUrl":374},"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",[1122],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1125,"description":1126,"heroImage":1127,"category":370,"date":1128,"authors":1129,"slug":1131,"externalUrl":374},"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",[1130],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1133},[1134,1148,1160,1172],{"id":1135,"categories":1136,"header":1138,"text":1139,"button":1140,"image":1145},"ai-modernization",[1137],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1141,"config":1142},"Get your AI maturity score",{"href":1143,"dataGaName":1144,"dataGaLocation":619},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1146},{"src":1147},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1149,"categories":1150,"header":1152,"text":1139,"button":1153,"image":1157},"devops-modernization",[1151,956],"product","Are you just managing tools or shipping innovation?",{"text":1154,"config":1155},"Get your DevOps maturity score",{"href":1156,"dataGaName":1144,"dataGaLocation":619},"/assessments/devops-modernization-assessment/",{"config":1158},{"src":1159},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1161,"categories":1162,"header":1164,"text":1139,"button":1165,"image":1169},"security-modernization",[1163],"security","Are you trading speed for security?",{"text":1166,"config":1167},"Get your security maturity score",{"href":1168,"dataGaName":1144,"dataGaLocation":619},"/assessments/security-modernization-assessment/",{"config":1170},{"src":1171},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1173,"paths":1174,"header":1177,"text":1178,"button":1179,"image":1184},"github-azure-migration",[1175,1176],"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":1180,"config":1181},"See how GitLab compares to GitHub",{"href":1182,"dataGaName":1183,"dataGaLocation":619},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1185},{"src":1159},{"header":1187,"blurb":1188,"button":1189,"secondaryButton":1194},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1190,"config":1191},"Get your free trial",{"href":1192,"dataGaName":418,"dataGaLocation":1193},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":892,"config":1195},{"href":744,"dataGaName":423,"dataGaLocation":1193},1786803756215]