[{"data":1,"prerenderedAt":1305},["ShallowReactive",2],{"/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure":3,"navigation-en-us":545,"banner-en-us":975,"footer-en-us":985,"blog-post-authors-en-us-Dave Wentzel":1245,"blog-related-posts-en-us-how-to-setup-a-gitlab-instance-on-microsoft-azure":1260,"blog-share-wrapper-en-us":1285,"next-steps-en-us":1295},{"id":4,"title":5,"authors":6,"body":8,"category":527,"date":528,"description":529,"extension":530,"externalUrl":531,"faq":531,"featured":532,"heroImage":533,"meta":534,"navigation":535,"path":536,"seo":537,"slug":541,"stem":542,"tags":531,"template":543,"updatedDate":531,"__hash__":544},"blogPosts/en-us/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure.md","How to Set Up a GitLab Instance on Microsoft Azure",[7],"Dave Wentzel",{"type":9,"value":10,"toc":506},"minimark",[11,30,47,55,62,67,76,80,83,108,112,119,126,139,145,149,160,165,172,177,180,186,190,197,200,206,210,213,219,223,226,232,236,243,248,252,255,261,264,270,274,281,287,299,306,310,313,316,322,329,335,338,342,348,354,357,363,366,372,375,378,382,385,388,394,406,409,430,433,441,444,474,477,483,487,495,499,502],[12,13,14],"blockquote",{},[15,16,17,18,24,25,29],"p",{},"Note: This article has been moved to ",[19,20,23],"a",{"href":21,"rel":22},"https://docs.gitlab.com/install/azure/",[],"our documentation"," so it can be more easily updated. We recommend using ",[19,26,28],{"href":21,"rel":27},[],"the Azure installation documentation",".",[15,31,32,33,37,38,42,43,29],{},"GitLab is a scalable, self-managed Git repository \"ecosystem\". It is available as\na free ",[19,34,36],{"href":35},"/install/","Community Edition"," and as a subscription-based\n",[19,39,41],{"href":40},"/pricing/","Enterprise Edition",". If you want to host your own full-featured source\ncontrol system, under your control, then you should consider GitLab. Spinning up\nyour own instance can be done in just a few hours using the\n",[19,44,46],{"href":45},"/blog/using-omnibus-gitlab-to-ship-gitlab/","Omnibus packages",[15,48,49,50,54],{},"But what if you don't want to invest that much time to see if GitLab is\nfor you? Does Linux scare you? Do you want to try GitLab quickly without\na big up-front investment? Need someone else to handle your GitLab\nadministration? ",[51,52,53],"span",{},"Microsoft Azure"," may be the answer.",[15,56,57,61],{},[58,59,60],"strong",{},"Note:"," we assume you are familiar with GitLab and you wish to have your own\nGitLab instance on-premises, working in a Virtual Machine.",[63,64,66],"h2",{"id":65},"gitlab-on-azure","GitLab on Azure",[15,68,69,70,75],{},"Azure is Microsoft's business cloud and GitLab is a pre-configured\noffering on the Azure Marketplace. Hopefully you aren't surprised to\nhear that ",[19,71,74],{"href":72,"rel":73},"https://stackoverflow.com/questions/33653726/azure-file-share-backup-database-to-mounted-drive",[],"Microsoft and Azure have embraced","\nopen source software like Ubuntu, Red Hat Enterprise Linux, and GitLab.\nYou can now spin up a pre-configured GitLab VM in just a few clicks.\nLet's get started.",[63,77,79],{"id":78},"getting-started","Getting started",[15,81,82],{},"First you need an account on Azure. There are three ways to do this:",[84,85,86,90,99],"ul",{},[87,88,89],"li",{},"If your company (or you) already has an account then you are ready to go!",[87,91,92,93,98],{},"You can ",[19,94,97],{"href":95,"rel":96},"https://azure.microsoft.com/en-us/free/",[],"open an Azure account for free",". You get credits you can\nuse to try out paid Azure services, and even after you've used them you can\nstill keep the account and use the free Azure services. Your credit card won't\nbe charged, unless you decide to pay-as-you-go. This is a great way to try out\nAzure and cloud computing.",[87,100,101,102,107],{},"If you have an MSDN subscription you can ",[19,103,106],{"href":104,"rel":105},"https://azure.microsoft.com/en-us/pricing/member-offers/msdn-benefits-details/?WT.mc_id=A261C142F",[],"activate your Azure subscriber benefits",".\nYour MSDN subscription gives you recurring Azure credits every month. Why not\nput those credits to use and try out GitLab!",[63,109,111],{"id":110},"working-with-azure","Working with Azure",[15,113,114,115,118],{},"Now that you have an account we can get started. When you log in to\nAzure using ",[51,116,117],{},"portal.azure.com"," you will see\nthe Dashboard which gives you a quick overview of Azure resources:",[15,120,121],{},[122,123],"img",{"alt":124,"src":125},"Microsoft Azure Dashboard","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/azure-welcome-screen.png",[15,127,128,129,134,135,138],{},"From the Dashboard you can build VMs, create SQL Databases, author\nwebsites, and perform lots of other cloud tasks. Today we want to try\nGitLab which is part of the ",[19,130,133],{"href":131,"rel":132},"https://azure.microsoft.com/en-us/marketplace/",[],"Azure Marketplace",". The\nMarketplace is an online store for pre-configured applications and\nservices optimized for the cloud by software vendors like GitLab. Click\non the ",[58,136,137],{},"+ New"," icon and in the search box type \"GitLab\":",[15,140,141],{},[122,142],{"alt":143,"src":144},"Search for GitLab on Azure Marketplace","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/azure-dashboard-search-gitlab.png",[63,146,148],{"id":147},"create-new-vm","Create new VM",[15,150,151,152,155,156,159],{},"Azure Marketplace offerings are always changing but let's click \"",[58,153,154],{},"GitLab\nCommunity Edition","\". ",[19,157,158],{"href":35},"GitLab CE"," is freely available under the MIT Expat\nLicense. A new \"blade\" window will pop-out, where you can read about the\noffering.",[15,161,162],{},[122,163],{"alt":143,"src":164},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/azure-dashboard-select-gitlab.png",[15,166,167,168,171],{},"Click \"",[58,169,170],{},"Create","\" and you will be presented with the \"Create virtual machine\"\nblade.",[173,174,176],"h3",{"id":175},"basics","Basics",[15,178,179],{},"The first thing we need to configure are the basic settings of the underlying\nUbuntu 14.04.4 VM. On the screenshot below, I set the hostname to \"GitLab-CE\" and I\nchose Password authentication to keep things simple. This is the password that we will use later to SSH into the VM, so make sure it's a strong password/passphrase.\nAlternatively you can choose to paste your SSH public key so that you don't type\nyour password every time. A \"Resource group\" is a way to group related resources\ntogether for easier administration. I named mine \"GitLab-CE-Azure\", but your\nresource group can have the same name as your VM. Click OK when ready.",[15,181,182],{},[122,183],{"alt":184,"src":185},"GitLab on Azure - Basic settings","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398333/blog/Content%20Images/gitlab-azure/azure-create-vm-basics.png",[173,187,189],{"id":188},"size","Size",[15,191,192,193,196],{},"The next screen reviews the Pricing Tiers, which are the VM sizes. I\nchose a \"",[58,194,195],{},"D1 Standard","\" VM, which meets the minimum system requirements to\nrun a small GitLab environment. When ready click 'Select'.",[15,198,199],{},"By default, only the recommended tiers are shown. To choose a larger one click\non 'View all'.",[15,201,202],{},[122,203],{"alt":204,"src":205},"Choose a VM size for GitLab on Azure","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398333/blog/Content%20Images/gitlab-azure/azure-create-vm-size.png",[173,207,209],{"id":208},"settings","Settings",[15,211,212],{},"On the next blade, you are called to configure the Storage, Network and\nAvailability settings. Just review them and take the defaults which are sufficient\nfor test-driving GitLab. Hit OK when done.",[15,214,215],{},[122,216],{"alt":217,"src":218},"Configure various settings","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398333/blog/Content%20Images/gitlab-azure/azure-create-vm-settings.png",[173,220,222],{"id":221},"summary","Summary",[15,224,225],{},"On the summary page you will have the chance to review your choices so far. If\nyou change your mind about something, you can go back to the previous steps and\namend your choice. Hit OK when ready.",[15,227,228],{},[122,229],{"alt":230,"src":231},"Azure create VM - Summary","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/azure-create-vm-summary.png",[173,233,235],{"id":234},"buy","Buy",[15,237,238,239,242],{},"This is the last step and you are presented with the price/hour your new VM\nwill cost. You can see that we are billed only for the VM at this page, GitLab\nCE is a separate tile which is free to use. Go on and click ",[58,240,241],{},"Purchase"," for\nthe deployment to begin.",[15,244,245],{},[122,246],{"alt":230,"src":247},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398333/blog/Content%20Images/gitlab-azure/azure-create-vm-buy.png",[173,249,251],{"id":250},"deployment-page","Deployment page",[15,253,254],{},"At this point, Azure takes over and begins deploying your GitLab Ubuntu VM. You\ncan scroll down to see the deployment process which takes a few minutes.",[15,256,257],{},[122,258],{"alt":259,"src":260},"Azure deploying GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/azure-deploy-vm.png",[15,262,263],{},"When GitLab environment is ready, you will see the management blade for your\nnew VM. This is basically your VM dashboard where you can configure many things\nlike the DNS name of your instance.",[15,265,266],{},[122,267],{"alt":268,"src":269},"GitLab VM settings","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/azure-deploy-gitlab-settings.png",[173,271,273],{"id":272},"set-up-a-domain-name","Set up a domain name",[15,275,276,277,280],{},"The public IP address that the VM uses is shown in the 'Essentials' blade. Click\non it and select ",[58,278,279],{},"Configuration"," under the 'General' tab. Enter a friendly\nDNS name for your instance in the DNS name label field.",[15,282,283],{},[122,284],{"alt":285,"src":286},"Setting up a DNS name label for your IP","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/azure-gitlab-dns.png",[15,288,289,290,294,295,298],{},"In the screenshot above I have set my DNS name to\n",[291,292,293],"code",{},"gitlab-ce-test.xxx.cloudapp.azure.com",". Hit ",[58,296,297],{},"Save"," for the changes to take\neffect.",[15,300,301,302,305],{},"If you want to use your own domain name, add a DNS ",[291,303,304],{},"A"," record into your\ndomain registrar pointing to the IP address displayed given by Azure.",[63,307,309],{"id":308},"connecting-to-gitlab","Connecting to GitLab",[15,311,312],{},"Use the IP address or the domain name you set up from the previous step to\nvisit GitLab on your browser.",[15,314,315],{},"The first time you hit the URL, you will be asked to set up a new password\nfor the administrator user that GitLab has created for you.",[15,317,318],{},[122,319],{"alt":320,"src":321},"GitLab first screen - choose password for admin user","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/gitlab-ce-first-access.png",[15,323,324,325,328],{},"Once you change the password you will be redirected to login. Use ",[291,326,327],{},"root"," as the\nusername and the password you configured just before.",[15,330,331],{},[122,332],{"alt":333,"src":334},"GitLab first screen - login admin user","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398341/blog/Content%20Images/gitlab-azure/gitlab-ce-first-login.png",[15,336,337],{},"At this point you have a working GitLab VM running on Azure. Congratulations!",[63,339,341],{"id":340},"creating-your-first-gitlab-project","Creating your first GitLab project",[15,343,344,345,29],{},"You can skip this section if you are familiar with Git and GitLab.\nOtherwise, let's create our first project. From the Welcome page click\n",[58,346,347],{},"New Project",[15,349,350],{},[122,351],{"alt":352,"src":353},"Welcome to GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398344/blog/Content%20Images/gitlab-azure/gitlab-ce-welcome.png",[15,355,356],{},"I'm going to make this a private project called \"demo\":",[15,358,359],{},[122,360],{"alt":361,"src":362},"GitLab - create new project","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398340/blog/Content%20Images/gitlab-azure/gitlab-ce-create-project.png",[15,364,365],{},"It only takes a few moments to create the project and the next screen\nwill show you the commands to begin working with your new repository\nlocally.",[15,367,368],{},[122,369],{"alt":370,"src":371},"GitLab - project git config","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398343/blog/Content%20Images/gitlab-azure/gitlab-ce-new-project.png",[15,373,374],{},"Following these instructions you should be able to push and pull from\nyour new GitLab repository.",[15,376,377],{},"That's it! You have a working GitLab environment!",[63,379,381],{"id":380},"maintaining-your-gitlab-instance","Maintaining your GitLab instance",[15,383,384],{},"It's important to keep your GitLab environment up-to-date and since the GitLab\nteam is constantly making enhancements to the product, occasionally you may\nneed to upgrade for security reasons.",[15,386,387],{},"Let's review how to upgrade GitLab. When you click on the \"Admin Area\" wrench,\nGitLab will tell you whether there are updates available. In the following\nscreenshot we are told to update ASAP, and this is because there is a\nsecurity fix.",[15,389,390],{},[122,391],{"alt":392,"src":393},"GitLab - update asap","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398344/blog/Content%20Images/gitlab-azure/gitlab-ce-update-asap.png",[15,395,396,397,400,401,405],{},"On the screenshot we can see the current Azure Marketplace offered GitLab CE\nversion 8.6.5, and there is an update available. To update you need to connect\nto your Ubuntu server using ",[51,398,399],{},"PuTTY"," or an equivalent SSH tool. Remember to log\nin with the username and password you specified ",[19,402,404],{"href":403},"#basics","when you created","\nyour Azure VM.",[15,407,408],{},"In your terminal type in the following to connect to your VM:",[410,411,416],"pre",{"className":412,"code":413,"language":414,"meta":415,"style":415},"language-bash shiki shiki-themes github-light","ssh user@gitlab-ce-test.westeurope.cloudapp.azure.com\n","bash","",[291,417,418],{"__ignoreMap":415},[51,419,422,426],{"class":420,"line":421},"line",1,[51,423,425],{"class":424},"s7eDp","ssh",[51,427,429],{"class":428},"sYBdl"," user@gitlab-ce-test.westeurope.cloudapp.azure.com\n",[15,431,432],{},"Provide your password at the prompt to authenticate.",[15,434,435,436,440],{},"Your domain name will differ and is the one we ",[19,437,439],{"href":438},"#set-up-a-domain-name","set up previously",".\nYou can also use the public IP instead of the domain name.",[15,442,443],{},"Once you login, use the following command to upgrade GitLab to the latest\nversion.",[410,445,447],{"className":412,"code":446,"language":414,"meta":415,"style":415},"sudo apt-get update && sudo apt-get install gitlab-ce\n",[291,448,449],{"__ignoreMap":415},[51,450,451,454,457,460,464,466,468,471],{"class":420,"line":421},[51,452,453],{"class":424},"sudo",[51,455,456],{"class":428}," apt-get",[51,458,459],{"class":428}," update",[51,461,463],{"class":462},"sgsFI"," && ",[51,465,453],{"class":424},[51,467,456],{"class":428},[51,469,470],{"class":428}," install",[51,472,473],{"class":428}," gitlab-ce\n",[15,475,476],{},"Once it completes you should have an up-to-date GitLab instance!",[15,478,479],{},[122,480],{"alt":481,"src":482},"GitLab up to date","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398344/blog/Content%20Images/gitlab-azure/gitlab-ce-up-to-date.png",[63,484,486],{"id":485},"conclusion","Conclusion",[15,488,489,490,494],{},"GitLab is a great Git repo tool, plus a whole lot more. In this post we\nlooked at how to run GitLab using the Azure Marketplace offering. Azure\nis a great way to experiment with GitLab. If you decide, like me, that\nGitLab is the best ",[19,491,493],{"href":492},"/solutions/source-code-management/","solution for source code management"," you can continue\nto use Azure as your secure, scalable cloud provider.",[63,496,498],{"id":497},"about-guest-author","About guest author",[15,500,501],{},"This is a guest blog post by Dave Wentzel, a Data Solution Architect\nwith Microsoft. ",[503,504,505],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}",{"title":415,"searchDepth":507,"depth":507,"links":508},2,[509,510,511,512,522,523,524,525,526],{"id":65,"depth":507,"text":66},{"id":78,"depth":507,"text":79},{"id":110,"depth":507,"text":111},{"id":147,"depth":507,"text":148,"children":513},[514,516,517,518,519,520,521],{"id":175,"depth":515,"text":176},3,{"id":188,"depth":515,"text":189},{"id":208,"depth":515,"text":209},{"id":221,"depth":515,"text":222},{"id":234,"depth":515,"text":235},{"id":250,"depth":515,"text":251},{"id":272,"depth":515,"text":273},{"id":308,"depth":507,"text":309},{"id":340,"depth":507,"text":341},{"id":380,"depth":507,"text":381},{"id":485,"depth":507,"text":486},{"id":497,"depth":507,"text":498},"engineering","2016-07-13","Learn how to set up a GitLab Instance on Microsoft Azure with this tutorial","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672257/Blog/Hero%20Images/gitlab-on-azure-cover.jpg",{},true,"/en-us/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure",{"title":5,"description":529,"ogTitle":5,"ogDescription":529,"noIndex":532,"ogImage":533,"ogUrl":538,"ogSiteName":539,"ogType":540,"canonicalUrls":538},"https://about.gitlab.com/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure","https://about.gitlab.com","article","how-to-setup-a-gitlab-instance-on-microsoft-azure","en-us/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure","BlogPost","tPoHHStK2JA4q7QHJGd5qWVcTsZfHhc4wVY9fysEzpc",{"logo":546,"freeTrial":551,"sales":556,"login":561,"items":566,"search":895,"minimal":926,"duo":945,"switchNav":954,"pricingDeployment":965},{"config":547},{"href":548,"dataGaName":549,"dataGaLocation":550},"/","gitlab logo","header",{"text":552,"config":553},"Get free trial",{"href":554,"dataGaName":555,"dataGaLocation":550},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":557,"config":558},"Request a demo",{"href":559,"dataGaName":560,"dataGaLocation":550},"/request-a-demo/","sales",{"text":562,"config":563},"Sign in",{"href":564,"dataGaName":565,"dataGaLocation":550},"https://gitlab.com/users/sign_in/","sign in",[567,652,740,744,819,873],{"text":568,"left":535,"config":569,"menu":571},"Platform",{"dataNavLevelOne":570},"platform",{"type":572,"link":573,"columns":577,"feature":641},"lists",{"text":574,"config":575},"Explore the Platform",{"href":576,"dataGaName":570,"dataGaLocation":550},"/platform/",[578,600,623],{"title":579,"items":580},"Execution & Workflows",[581,586,590,595],{"text":582,"config":583},"CI/CD",{"href":584,"dataGaLocation":550,"dataGaName":585},"/solutions/continuous-integration/","ci/cd",{"text":587,"config":588},"Source Code Management",{"href":492,"dataGaLocation":550,"dataGaName":589},"source code management",{"text":591,"config":592},"Agile Delivery",{"href":593,"dataGaLocation":550,"dataGaName":594},"/solutions/agile-delivery/","agile delivery",{"text":596,"config":597},"Artifact Management",{"href":598,"dataGaLocation":550,"dataGaName":599},"/artifact-central/","artifact management",{"title":601,"items":602},"Security & Governance",[603,608,613,618],{"text":604,"config":605},"Application Security Testing",{"href":606,"dataGaLocation":550,"dataGaName":607},"/solutions/application-security-testing/","application security testing",{"text":609,"config":610},"Governance & Compliance",{"href":611,"dataGaLocation":550,"dataGaName":612},"/solutions/software-compliance/","governance and compliance",{"text":614,"config":615},"Secrets Management",{"href":616,"dataGaLocation":550,"dataGaName":617},"/gitlab-secrets-manager/","secrets management",{"text":619,"config":620},"Supply Chain Security",{"href":621,"dataGaLocation":550,"dataGaName":622},"/solutions/supply-chain/","supply chain security",{"title":624,"items":625},"Context & AI",[626,631,636],{"text":627,"config":628},"Agentic Orchestration",{"href":629,"dataGaLocation":550,"dataGaName":630},"/gitlab-duo-agent-platform/","agentic orchestration",{"text":632,"config":633},"Context Graph",{"href":634,"dataGaLocation":550,"dataGaName":635},"/gitlab-orbit/","context graph",{"text":637,"config":638},"Visibility & Measurement",{"href":639,"dataGaLocation":550,"dataGaName":640},"/solutions/visibility-measurement/","visibility and measurement",{"config":642,"title":645,"text":646,"link":647},{"background":643,"textColor":644},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1790185102/o7dn32anqcb6z8dgd3as.jpg')","#000","Why GitLab","One platform for speed with control across your software lifecycle.",{"text":648,"config":649},"Learn more",{"href":650,"dataGaName":651,"dataGaLocation":550},"/why-gitlab/","why gitlab",{"text":653,"left":535,"config":654,"menu":656},"Solutions",{"dataNavLevelOne":655},"solutions",{"type":572,"link":657,"columns":661,"feature":731},{"text":658,"config":659},"View all Solutions",{"href":660,"dataGaName":655,"dataGaLocation":550},"/solutions/",[662,680,698],{"title":663,"items":664},"Outcomes",[665,670,675],{"text":666,"config":667},"DevOps Modernization",{"href":668,"dataGaLocation":550,"dataGaName":669},"/assessments/devops-modernization-assessment/","devops modernization",{"text":671,"config":672},"Security Modernization",{"href":673,"dataGaLocation":550,"dataGaName":674},"/assessments/security-modernization-assessment/","security modernization",{"text":676,"config":677},"AI Modernization",{"href":678,"dataGaLocation":550,"dataGaName":679},"/assessments/ai-modernization-assessment/","ai modernization",{"title":681,"items":682},"By size",[683,688,693],{"text":684,"config":685},"Enterprise",{"href":686,"dataGaLocation":550,"dataGaName":687},"/enterprise/","enterprise",{"text":689,"config":690},"Small Business",{"href":691,"dataGaLocation":550,"dataGaName":692},"/small-business/","small business",{"text":694,"config":695},"Startups",{"href":696,"dataGaLocation":550,"dataGaName":697},"/solutions/startups/","startups",{"title":699,"items":700},"Industries",[701,706,711,716,721,726],{"text":702,"config":703},"Financial Services",{"href":704,"dataGaLocation":550,"dataGaName":705},"/solutions/finance/","financial services",{"text":707,"config":708},"Public Sector",{"href":709,"dataGaLocation":550,"dataGaName":710},"/solutions/public-sector/","public sector",{"text":712,"config":713},"Telecommunications",{"href":714,"dataGaLocation":550,"dataGaName":715},"/solutions/telecommunications/","telecommunications",{"text":717,"config":718},"Automotive",{"href":719,"dataGaLocation":550,"dataGaName":720},"/solutions/automotive/","automotive",{"text":722,"config":723},"Education",{"href":724,"dataGaLocation":550,"dataGaName":725},"/solutions/education/","education",{"text":727,"config":728},"Aerospace",{"href":729,"dataGaLocation":550,"dataGaName":730},"/solutions/aerospace/","aerospace",{"config":732,"title":733,"text":734,"link":735},{"background":643,"textColor":644},"GitLab Security Standard","Learn how to harden your software factory and let AI agents earn autonomy, without trading away security.",{"text":736,"config":737},"Explore the standard",{"href":738,"dataGaName":739,"dataGaLocation":550},"/gitlab-security-standard/","gitlab security standard",{"text":741,"config":742},"Pricing",{"href":40,"dataGaName":743,"dataGaLocation":550,"dataNavLevelOne":743},"pricing",{"text":745,"config":746,"menu":748},"Resources",{"dataNavLevelOne":747},"resources",{"type":572,"link":749,"columns":753,"feature":810},{"text":750,"config":751},"View all resources",{"href":752,"dataGaName":747,"dataGaLocation":550},"/resources/",[754,782],{"title":755,"items":756},"Discover",[757,762,767,772,777],{"text":758,"config":759},"Docs",{"href":760,"dataGaName":761,"dataGaLocation":550},"https://docs.gitlab.com/","docs",{"text":763,"config":764},"University",{"href":765,"dataGaName":766,"dataGaLocation":550},"https://university.gitlab.com/","university",{"text":768,"config":769},"Demo Series",{"href":770,"dataGaName":771,"dataGaLocation":550},"/gitlab-technical-demo-series/","demo series",{"text":773,"config":774},"Demo Hub",{"href":775,"dataGaName":776,"dataGaLocation":550},"/demo-hub/","demo hub",{"text":778,"config":779},"Services",{"href":780,"dataGaName":781,"dataGaLocation":550},"/services/","services",{"title":783,"items":784},"Connect",[785,790,795,800,805],{"text":786,"config":787},"Blog",{"href":788,"dataGaName":789,"dataGaLocation":550},"/blog/","blog",{"text":791,"config":792},"Community",{"href":793,"dataGaName":794,"dataGaLocation":550},"/community/","community",{"text":796,"config":797},"Customers",{"href":798,"dataGaName":799,"dataGaLocation":550},"/customers/","customers",{"text":801,"config":802},"Partners",{"href":803,"dataGaName":804,"dataGaLocation":550},"/partners/","partners",{"text":806,"config":807},"Events",{"href":808,"dataGaName":809,"dataGaLocation":550},"/events/","events",{"config":811,"title":812,"text":813,"link":814},{"background":643,"textColor":644},"What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":815,"config":816},"Read the latest",{"href":817,"dataGaName":818,"dataGaLocation":550},"/whats-new/","whats new",{"text":820,"config":821,"menu":823},"Company",{"dataNavLevelOne":822},"company",{"type":572,"columns":824},[825],{"items":826},[827,832,838,843,848,853,858,863,868],{"text":828,"config":829},"About",{"href":830,"dataGaName":831,"dataGaLocation":550},"/company/","about",{"text":833,"config":834,"footerGa":837},"Jobs",{"href":835,"dataGaName":836,"dataGaLocation":550},"/jobs/","jobs",{"dataGaName":836},{"text":839,"config":840},"Press",{"href":841,"dataGaName":842,"dataGaLocation":550},"/press/","press",{"text":844,"config":845},"Handbook",{"href":846,"dataGaName":847,"dataGaLocation":550},"https://handbook.gitlab.com/","handbook",{"text":849,"config":850},"Leadership",{"href":851,"dataGaName":852,"dataGaLocation":550},"/company/team/e-group/","leadership",{"text":854,"config":855},"Investor relations",{"href":856,"dataGaName":857,"dataGaLocation":550},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":859,"config":860},"Trust Center",{"href":861,"dataGaName":862,"dataGaLocation":550},"/security/","trust center",{"text":864,"config":865},"AI Transparency Center",{"href":866,"dataGaName":867,"dataGaLocation":550},"/ai-transparency-center/","ai transparency center",{"text":869,"config":870},"Newsletter",{"href":871,"dataGaName":872,"dataGaLocation":550},"/company/contact/#contact-forms","newsletter",{"text":874,"config":875,"menu":876},"Contact us",{"dataNavLevelOne":822},{"type":572,"columns":877},[878],{"items":879},[880,885,890],{"text":881,"config":882},"Talk to sales",{"href":883,"dataGaName":884,"dataGaLocation":550},"/sales/","talk to sales",{"text":886,"config":887},"Support portal",{"href":888,"dataGaName":889,"dataGaLocation":550},"https://support.gitlab.com/hc/en-us","support portal",{"text":891,"config":892},"Customer portal",{"href":893,"dataGaName":894,"dataGaLocation":550},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":896,"login":897,"suggestions":904},"Close",{"text":898,"link":899},"To search repositories and projects, login to",{"text":900,"config":901},"gitlab.com",{"href":564,"dataGaName":902,"dataGaLocation":903},"search login","search",{"text":905,"default":906},"Suggestions",[907,910,913,915,919,923],{"text":908,"config":909},"GitLab Duo Agent Platform",{"href":629,"dataGaName":908,"dataGaLocation":903},{"text":911,"config":912},"Code Suggestions (AI)",{"href":629,"dataGaName":911,"dataGaLocation":903},{"text":582,"config":914},{"href":584,"dataGaName":582,"dataGaLocation":903},{"text":916,"config":917},"GitLab on AWS",{"href":918,"dataGaName":916,"dataGaLocation":903},"/partners/technology-partners/aws/",{"text":920,"config":921},"GitLab on Google Cloud",{"href":922,"dataGaName":920,"dataGaLocation":903},"/partners/technology-partners/google-cloud-platform/",{"text":924,"config":925},"Why GitLab?",{"href":650,"dataGaName":924,"dataGaLocation":903},{"freeTrial":927,"mobileIcon":932,"desktopIcon":937,"secondaryButton":940},{"text":928,"config":929},"Start free trial",{"href":930,"dataGaName":555,"dataGaLocation":931},"https://gitlab.com/-/trials/new/","nav",{"altText":933,"config":934},"Gitlab Icon",{"src":935,"dataGaName":936,"dataGaLocation":931},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":933,"config":938},{"src":939,"dataGaName":936,"dataGaLocation":931},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":941,"config":942},"Get Started",{"href":943,"dataGaName":944,"dataGaLocation":931},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":946,"mobileIcon":950,"desktopIcon":952},{"text":947,"config":948},"Learn more about GitLab Duo",{"href":629,"dataGaName":949,"dataGaLocation":931},"gitlab duo",{"altText":933,"config":951},{"src":935,"dataGaName":936,"dataGaLocation":931},{"altText":933,"config":953},{"src":939,"dataGaName":936,"dataGaLocation":931},{"button":955,"mobileIcon":960,"desktopIcon":962},{"text":956,"config":957},"/switch",{"href":958,"dataGaName":959,"dataGaLocation":931},"#contact","switch",{"altText":933,"config":961},{"src":935,"dataGaName":936,"dataGaLocation":931},{"altText":933,"config":963},{"src":964,"dataGaName":936,"dataGaLocation":931},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":966,"mobileIcon":971,"desktopIcon":973},{"text":967,"config":968},"Back to pricing",{"href":40,"dataGaName":969,"dataGaLocation":931,"icon":970},"back to pricing","GoBack",{"altText":933,"config":972},{"src":935,"dataGaName":936,"dataGaLocation":931},{"altText":933,"config":974},{"src":939,"dataGaName":936,"dataGaLocation":931},{"title":976,"button":977,"config":983},"Ship at agent speed. Prove every step. Transcend is here.",{"text":978,"config":979},"Watch now",{"href":980,"dataGaName":981,"dataGaLocation":982},"/events/transcend/virtual/#watch-gitlab-transcend","transcend-october-2026-banner","global-banner",{"layout":984,"disabled":532},"release",{"data":986},{"text":987,"source":988,"edit":994,"contribute":999,"config":1004,"items":1009,"minimal":1234},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":989,"config":990},"View page source",{"href":991,"dataGaName":992,"dataGaLocation":993},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":995,"config":996},"Edit this page",{"href":997,"dataGaName":998,"dataGaLocation":993},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1000,"config":1001},"Please contribute",{"href":1002,"dataGaName":1003,"dataGaLocation":993},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1005,"facebook":1006,"youtube":1007,"linkedin":1008},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1010,1057,1115,1162,1202],{"title":741,"links":1011,"subMenu":1026},[1012,1016,1021],{"text":1013,"config":1014},"View plans",{"href":40,"dataGaName":1015,"dataGaLocation":993},"view plans",{"text":1017,"config":1018},"Why Premium?",{"href":1019,"dataGaName":1020,"dataGaLocation":993},"/pricing/premium/","why premium",{"text":1022,"config":1023},"Why Ultimate?",{"href":1024,"dataGaName":1025,"dataGaLocation":993},"/pricing/ultimate/","why ultimate",[1027],{"title":1028,"links":1029},"Contact Us",[1030,1033,1035,1037,1042,1047,1052],{"text":1031,"config":1032},"Contact sales",{"href":883,"dataGaName":560,"dataGaLocation":993},{"text":886,"config":1034},{"href":888,"dataGaName":889,"dataGaLocation":993},{"text":891,"config":1036},{"href":893,"dataGaName":894,"dataGaLocation":993},{"text":1038,"config":1039},"Status",{"href":1040,"dataGaName":1041,"dataGaLocation":993},"https://status.gitlab.com/","status",{"text":1043,"config":1044},"Terms of use",{"href":1045,"dataGaName":1046,"dataGaLocation":993},"/terms/","terms of use",{"text":1048,"config":1049},"Privacy statement",{"href":1050,"dataGaName":1051,"dataGaLocation":993},"/privacy/","privacy statement",{"text":1053,"config":1054},"Cookie preferences",{"dataGaName":1055,"dataGaLocation":993,"id":1056,"isOneTrustButton":535},"cookie preferences","ot-sdk-btn",{"title":568,"links":1058,"subMenu":1072},[1059,1062,1064,1066,1068,1070],{"text":1060,"config":1061},"Explore the platform",{"href":576,"dataGaName":570,"dataGaLocation":993},{"text":627,"config":1063},{"href":629,"dataGaName":630,"dataGaLocation":993},{"text":582,"config":1065},{"href":584,"dataGaName":585,"dataGaLocation":993},{"text":632,"config":1067},{"href":634,"dataGaName":635,"dataGaLocation":993},{"text":614,"config":1069},{"href":616,"dataGaName":617,"dataGaLocation":993},{"text":645,"config":1071},{"href":650,"dataGaName":651,"dataGaLocation":993},[1073],{"title":1074,"links":1075},"Topics",[1076,1080,1085,1090,1095,1100,1105,1110],{"text":582,"config":1077},{"href":1078,"dataGaName":1079,"dataGaLocation":993},"/topics/ci-cd/","cicd",{"text":1081,"config":1082},"GitOps",{"href":1083,"dataGaName":1084,"dataGaLocation":993},"/topics/gitops/","gitops",{"text":1086,"config":1087},"DevOps",{"href":1088,"dataGaName":1089,"dataGaLocation":993},"/topics/devops/","devops",{"text":1091,"config":1092},"Version Control",{"href":1093,"dataGaName":1094,"dataGaLocation":993},"/topics/version-control/","version control",{"text":1096,"config":1097},"DevSecOps",{"href":1098,"dataGaName":1099,"dataGaLocation":993},"/topics/devsecops/","devsecops",{"text":1101,"config":1102},"Cloud Native",{"href":1103,"dataGaName":1104,"dataGaLocation":993},"/topics/cloud-native/","cloud native",{"text":1106,"config":1107},"AI for Coding",{"href":1108,"dataGaName":1109,"dataGaLocation":993},"/topics/devops/ai-for-coding/","ai for coding",{"text":1111,"config":1112},"Agentic AI",{"href":1113,"dataGaName":1114,"dataGaLocation":993},"/topics/agentic-ai/","agentic ai",{"title":653,"links":1116},[1117,1120,1123,1126,1129,1132,1134,1136,1138,1140,1142,1145,1147,1150,1154,1158],{"text":1118,"config":1119},"DevOps modernization",{"href":668,"dataGaName":669,"dataGaLocation":993},{"text":1121,"config":1122},"Security modernization",{"href":673,"dataGaName":674,"dataGaLocation":993},{"text":1124,"config":1125},"AI modernization",{"href":678,"dataGaName":679,"dataGaLocation":993},{"text":1127,"config":1128},"Financial services",{"href":704,"dataGaName":705,"dataGaLocation":993},{"text":1130,"config":1131},"Public sector",{"href":709,"dataGaName":710,"dataGaLocation":993},{"text":712,"config":1133},{"href":714,"dataGaName":715,"dataGaLocation":993},{"text":717,"config":1135},{"href":719,"dataGaName":720,"dataGaLocation":993},{"text":722,"config":1137},{"href":724,"dataGaName":725,"dataGaLocation":993},{"text":727,"config":1139},{"href":729,"dataGaName":730,"dataGaLocation":993},{"text":684,"config":1141},{"href":686,"dataGaName":687,"dataGaLocation":993},{"text":1143,"config":1144},"Small business",{"href":691,"dataGaName":692,"dataGaLocation":993},{"text":694,"config":1146},{"href":696,"dataGaName":697,"dataGaLocation":993},{"text":1081,"config":1148},{"href":1149,"dataGaName":1084,"dataGaLocation":993},"/solutions/gitops/",{"text":1151,"config":1152},"Software composition analysis",{"href":621,"dataGaName":1153,"dataGaLocation":993},"software composition analysis",{"text":1155,"config":1156},"Value stream management",{"href":639,"dataGaName":1157,"dataGaLocation":993},"value stream management",{"text":1159,"config":1160},"All solutions",{"href":660,"dataGaName":1161,"dataGaLocation":993},"all solutions",{"title":745,"links":1163},[1164,1168,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1198],{"text":1165,"config":1166},"Install",{"href":35,"dataGaName":1167,"dataGaLocation":993},"install",{"text":1169,"config":1170},"Quick start guides",{"href":1171,"dataGaName":1172,"dataGaLocation":993},"/get-started/","quick setup checklists",{"text":758,"config":1174},{"href":760,"dataGaName":761,"dataGaLocation":993},{"text":763,"config":1176},{"href":765,"dataGaName":766,"dataGaLocation":993},{"text":768,"config":1178},{"href":770,"dataGaName":771,"dataGaLocation":993},{"text":773,"config":1180},{"href":775,"dataGaName":776,"dataGaLocation":993},{"text":778,"config":1182},{"href":780,"dataGaName":781,"dataGaLocation":993},{"text":786,"config":1184},{"href":788,"dataGaName":789,"dataGaLocation":993},{"text":791,"config":1186},{"href":793,"dataGaName":794,"dataGaLocation":993},{"text":796,"config":1188},{"href":798,"dataGaName":799,"dataGaLocation":993},{"text":801,"config":1190},{"href":803,"dataGaName":804,"dataGaLocation":993},{"text":806,"config":1192},{"href":808,"dataGaName":809,"dataGaLocation":993},{"text":869,"config":1194},{"href":871,"dataGaName":872,"dataGaLocation":993},{"text":1196,"config":1197},"What's new",{"href":817,"dataGaName":818,"dataGaLocation":993},{"text":1199,"config":1200},"All resources",{"href":752,"dataGaName":1201,"dataGaLocation":993},"all resources",{"title":820,"links":1203},[1204,1206,1208,1210,1212,1214,1216,1218,1220,1224,1229],{"text":828,"config":1205},{"href":830,"dataGaName":822,"dataGaLocation":993},{"text":833,"config":1207},{"href":835,"dataGaName":836,"dataGaLocation":993},{"text":839,"config":1209},{"href":841,"dataGaName":842,"dataGaLocation":993},{"text":844,"config":1211},{"href":846,"dataGaName":847,"dataGaLocation":993},{"text":849,"config":1213},{"href":851,"dataGaName":852,"dataGaLocation":993},{"text":854,"config":1215},{"href":856,"dataGaName":857,"dataGaLocation":993},{"text":859,"config":1217},{"href":861,"dataGaName":862,"dataGaLocation":993},{"text":864,"config":1219},{"href":866,"dataGaName":867,"dataGaLocation":993},{"text":1221,"config":1222},"Sustainability",{"href":1223,"dataGaName":1221,"dataGaLocation":993},"/sustainability/",{"text":1225,"config":1226},"Diversity, inclusion and belonging (DIB)",{"href":1227,"dataGaName":1228,"dataGaLocation":993},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1230,"config":1231},"Modern Slavery Transparency Statement",{"href":1232,"dataGaName":1233,"dataGaLocation":993},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1235},[1236,1239,1242],{"text":1237,"config":1238},"Terms",{"href":1045,"dataGaName":1046,"dataGaLocation":993},{"text":1240,"config":1241},"Cookies",{"dataGaName":1055,"dataGaLocation":993,"id":1056,"isOneTrustButton":535},{"text":1243,"config":1244},"Privacy",{"href":1050,"dataGaName":1051,"dataGaLocation":993},[1246],{"id":1247,"title":7,"body":531,"config":1248,"content":1250,"description":531,"extension":1254,"meta":1255,"navigation":535,"path":1256,"seo":1257,"stem":1258,"__hash__":1259},"blogAuthors/en-us/blog/authors/dave-wentzel.yml",{"template":1249},"BlogAuthor",{"name":7,"config":1251},{"headshot":1252,"ctfId":1253},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Dave-Wentzel","yml",{},"/en-us/blog/authors/dave-wentzel",{},"en-us/blog/authors/dave-wentzel","k2aRIaA2X2XdxGq6i_YiK7qhrj2-9hzgGCZ4nHXmtzs",[1261,1269,1277],{"title":1262,"description":1263,"heroImage":1264,"category":527,"date":1265,"authors":1266,"slug":1268,"externalUrl":531},"Two front doors: Module-level access in a Django GRC app","A technical deep-dive on restructuring a Django internal tool to support two distinct GitLab teams: Security Compliance and Internal Audit.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097663/Blog/Hero%20Images/Blog/Hero%20Images/Workflow%201800x945_2gQoQIbY9NvjLFpXtsxtXy_1750097663612.png","2026-10-05",[1267],"Donovan Felton","module-level-access-in-a-django-grc-app",{"title":1270,"description":1271,"heroImage":1272,"category":527,"date":1273,"authors":1274,"slug":1276,"externalUrl":531},"How GitLab reduced code-per-agentic-flow ratio by 45%","Learn how Flow Registry, a component-based framework that compiles YAML configurations into fully functional LangGraph flows, helped improve scalability and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-09-22",[1275],"Mikolaj Wawrzyniak","how-gitlab-reduced-code-per-agentic-flow-ratio",{"title":1278,"description":1279,"heroImage":1280,"category":527,"date":1281,"authors":1282,"slug":1284,"externalUrl":531},"Co-Create: Building GitLab with our users","How GitLab users collaborated with us to build practical product improvements in the first half of 2026.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-09-10",[1283],"Isa Huerga","co-create-h1-2026",{"header":1286,"text":1287,"button":1291,"disclaimer":1294},"Start your free\n\n30-day GitLab trial\n",[1288,1289,1290],"GitLab Duo Agent Platform access","Try our most advanced features","Automate complex tasks with AI",{"text":552,"config":1292},{"href":1293,"dataGaName":555,"dataGaLocation":789},"https://gitlab.com/-/trials/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/blog/","No credit card required.",{"header":1296,"blurb":1297,"button":1298,"secondaryButton":1303},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1299,"config":1300},"Get your free trial",{"href":1301,"dataGaName":555,"dataGaLocation":1302},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1031,"config":1304},{"href":883,"dataGaName":560,"dataGaLocation":1302},1792010338547]