[{"data":1,"prerenderedAt":1237},["ShallowReactive",2],{"/blog/shared-runners":3,"navigation-en-us":449,"banner-en-us":876,"footer-en-us":886,"blog-post-authors-en-us-Kamil Trzciński":1131,"blog-related-posts-en-us-shared-runners":1147,"blog-promotions-en-us":1173,"next-steps-en-us":1227},{"id":4,"title":5,"authors":6,"body":8,"category":410,"date":411,"description":412,"extension":413,"externalUrl":414,"faq":414,"featured":415,"heroImage":416,"meta":417,"navigation":197,"path":440,"seo":441,"slug":445,"stem":446,"tags":414,"template":447,"updatedDate":414,"__hash__":448},"blogPosts/en-us/blog/shared-runners.md","GitLab.com Shared Runners use Autoscaling",[7],"Kamil Trzciński",{"type":9,"value":10,"toc":401},"minimark",[11,26,52,57,72,79,87,90,94,97,105,109,118,121,125,139,145,227,234,238,256,266,333,337,346,354,367,370,374,377,394,397],[12,13,14,18,19,25],"p",{},[15,16,17],"strong",{},"2022 Update"," - GitLab.com SaaS Runners has evolved since the time of this blog post. See the up-to-date documentation on the ",[20,21,24],"a",{"href":22,"rel":23},"https://docs.gitlab.com/ci/runners/",[],"SaaS Runners fleet for Linux, Windows, and Mac",".",[12,27,28,29,34,35,40,41,45,46,51],{},"Not only is ",[20,30,33],{"href":31,"rel":32},"https://docs.gitlab.com/ce/ci/README/",[],"Continuous Integration"," built-in with GitLab CE and EE,\nbut we also offer ",[20,36,39],{"href":37,"rel":38},"https://docs.gitlab.com/ce/ci/runners/README/",[],"Shared Runners"," to run your builds in CI ",[42,43,44],"em",{},"for\nfree"," on GitLab.com. Up until recently, you may have experienced a short wait\ntime as your build got queued for a shared runner. With the ",[20,47,50],{"href":48,"rel":49},"https://docs.gitlab.com/releases/",[],"latest release of\nGitLab Runner 1.1",", we've introduced autoscaling to help us meet\nthe growing demand, and this is now available on GitLab.com. Less waiting, more\nbuilding!",[53,54,56],"h2",{"id":55},"scaling-the-service","Scaling the service",[12,58,59,60,64,65,71],{},"Projects hosted in GitLab can have CI tasks defined in their ",[61,62,63],"code",{},".gitlab-ci.yml","\nfiles. These tasks are performed\nby ",[20,66,68],{"href":37,"rel":67},[],[42,69,70],{},"runners"," which are essentially virtual machines which run\nyour builds in Docker containers. These machines can run any of your builds that\nare compatible with Docker.",[12,73,74,75,78],{},"On other platforms, similar functionality is only available with an add-on\ncharge. In GitLab it's free to connect your own runners, and we also began\noffering free ",[20,76,39],{"href":37,"rel":77},[]," on GitLab.com. That means Shared\nRunners are freely available for projects on GitLab.com, whether they are\nprivate or public. However, up until recently users would have noticed their\nbuilds would be queued to run as they waited for a shared runner to become\navailable for work.",[12,80,81,82,86],{},"Today we are extending our offering, enabling the ",[20,83,85],{"href":48,"rel":84},[],"recently announced","\nautoscaling feature. This will reduce the build times and also reduce the time\nrequired to allocate a new available machine.",[12,88,89],{},"As of today, the Shared Runners for GitLab.com use the new GitLab Runner 1.1.\nGitLab Runner is configured in autoscaling mode with distributed cache and\nDocker registry proxy for Docker images.",[53,91,93],{"id":92},"using-shared-runners","Using Shared Runners",[12,95,96],{},"You will be able to continue using the Shared Runners for testing and deploying\nyour private projects.",[12,98,99,100,25],{},"The Shared Runners will continue to be used to build your static pages that\nare served by ",[20,101,104],{"href":102,"rel":103},"https://docs.gitlab.com/pages/README/",[],"GitLab Pages",[53,106,108],{"id":107},"the-machines","The machines",[12,110,111,112,117],{},"All your builds run on ",[20,113,116],{"href":114,"rel":115},"https://www.digitalocean.com/",[],"Digital Ocean"," 4GB\ninstances, with CoreOS and the latest Docker Engine installed.",[12,119,120],{},"Your builds will always be run on fresh machines. This will effectively\neliminate possible security issues, as there is no potential of breaking\nout of the container.",[53,122,124],{"id":123},"the-tags","The tags",[12,126,127,128,131,132,135,136,25],{},"All Shared Runners are tagged with ",[61,129,130],{},"shared",", ",[61,133,134],{},"docker"," and ",[61,137,138],{},"linux",[12,140,141,142,144],{},"You can use these tags in your ",[61,143,63],{}," file to limit which runners are\nused for specific jobs:",[146,147,152],"pre",{"className":148,"code":149,"language":150,"meta":151,"style":151},"language-yaml shiki shiki-themes github-light","test:\n  ...\n  tags:\n  - shared\n\ndeploy:\n  ...\n  tags:\n  - my_private_runner\n\n","yaml","",[61,153,154,167,174,182,192,199,207,212,219],{"__ignoreMap":151},[155,156,159,163],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"shJU0","test",[155,164,166],{"class":165},"sgsFI",":\n",[155,168,170],{"class":157,"line":169},2,[155,171,173],{"class":172},"sYu0t","  ...\n",[155,175,177,180],{"class":157,"line":176},3,[155,178,179],{"class":161},"  tags",[155,181,166],{"class":165},[155,183,185,188],{"class":157,"line":184},4,[155,186,187],{"class":165},"  - ",[155,189,191],{"class":190},"sYBdl","shared\n",[155,193,195],{"class":157,"line":194},5,[155,196,198],{"emptyLinePlaceholder":197},true,"\n",[155,200,202,205],{"class":157,"line":201},6,[155,203,204],{"class":161},"deploy",[155,206,166],{"class":165},[155,208,210],{"class":157,"line":209},7,[155,211,173],{"class":172},[155,213,215,217],{"class":157,"line":214},8,[155,216,179],{"class":161},[155,218,166],{"class":165},[155,220,222,224],{"class":157,"line":221},9,[155,223,187],{"class":165},[155,225,226],{"class":190},"my_private_runner\n",[12,228,229,230,233],{},"The above script will configure GitLab to always run your tests on shared\nrunners, and run deployments only on your specific runner, registered with\na ",[61,231,232],{},"my_private_runner"," tag.",[53,235,237],{"id":236},"what-has-changed","What has changed",[12,239,240,241,131,244,247,248,251,252,255],{},"Previously, runners were configured to always start the ",[61,242,243],{},"mysql",[61,245,246],{},"postgres",",\n",[61,249,250],{},"redis",", and ",[61,253,254],{},"mongodb"," services.\nHowever, we are aware that most of our users don't need to use all (or even any)\nof these services, and have removed them from the default configuration.",[12,257,258,259,262,263,265],{},"If your builds ",[42,260,261],{},"do"," require one or more of these services, your builds may start\nto fail unexpectedly. Modify your ",[61,264,63],{}," file to add the services\nrequired by your application:",[146,267,269],{"className":148,"code":268,"language":150,"meta":151,"style":151},"services:\n- mysql\n- postgres\n- redis\n- mongodb\n\ntests:\n  script: run-my-tests\n  ...\n\n",[61,270,271,278,286,293,300,307,311,318,329],{"__ignoreMap":151},[155,272,273,276],{"class":157,"line":158},[155,274,275],{"class":161},"services",[155,277,166],{"class":165},[155,279,280,283],{"class":157,"line":169},[155,281,282],{"class":165},"- ",[155,284,285],{"class":190},"mysql\n",[155,287,288,290],{"class":157,"line":176},[155,289,282],{"class":165},[155,291,292],{"class":190},"postgres\n",[155,294,295,297],{"class":157,"line":184},[155,296,282],{"class":165},[155,298,299],{"class":190},"redis\n",[155,301,302,304],{"class":157,"line":194},[155,303,282],{"class":165},[155,305,306],{"class":190},"mongodb\n",[155,308,309],{"class":157,"line":201},[155,310,198],{"emptyLinePlaceholder":197},[155,312,313,316],{"class":157,"line":209},[155,314,315],{"class":161},"tests",[155,317,166],{"class":165},[155,319,320,323,326],{"class":157,"line":214},[155,321,322],{"class":161},"  script",[155,324,325],{"class":165},": ",[155,327,328],{"class":190},"run-my-tests\n",[155,330,331],{"class":157,"line":221},[155,332,173],{"class":172},[53,334,336],{"id":335},"final-configuration","Final configuration",[12,338,339,340,345],{},"You may be interested what GitLab Runner ",[20,341,344],{"href":342,"rel":343},"https://gitlab.com/gitlab-org/gitlab-runner/blob/master/docs/configuration/advanced-configuration.md",[],"config.toml"," looks like.\nIt's really simple!",[146,347,352],{"className":348,"code":350,"language":351,"meta":151},[349],"language-text","[[runners]]\n  name = \"docker-auto-scale\"\n  limit = X\n  url = \"https://gitlab.com/ci\"\n  token = \"SHARED_RUNNER_TOKEN\"\n  executor = \"docker+machine\"\n  [runners.docker]\n    image = \"ruby:2.1\"\n    privileged = false\n    volumes = [\"/cache\", \"/usr/local/bundle/gems\"]\n  [runners.machine]\n    IdleCount = 20\n    IdleTime = 1800\n    MaxBuilds = 1\n    MachineDriver = \"digitalocean\"\n    MachineName = \"machine-%s-digital-ocean-4gb\"\n    MachineOptions = [\n      \"digitalocean-image=coreos-beta\",\n      \"digitalocean-ssh-user=core\",\n      \"digitalocean-access-token=DIGITAL_OCEAN_ACCESS_TOKEN\",\n      \"digitalocean-region=nyc2\",\n      \"digitalocean-size=4gb\",\n      \"digitalocean-private-networking\",\n      \"engine-registry-mirror=http://IP_TO_OUR_REGISTRY_MIRROR\"\n    ]\n  [runners.cache]\n    Type = \"s3\"\n    ServerAddress = \"IP_TO_OUR_CACHE_SERVER\"\n    AccessKey = \"ACCESS_KEY\"\n    SecretKey = \"ACCESS_SECRET_KEY\"\n    BucketName = \"runner\"\n\n","text",[61,353,350],{"__ignoreMap":151},[12,355,356,357,135,362,25],{},"The above configuration says that the VM will be used only once, making your builds secure.\nWe will always have 20 machines waiting to pick up a new build.\nWe use Digital Ocean 4GB machine in NYC2, with CoreOS Beta and Docker 1.9.1 installed.\nThe runner is configured to use ",[20,358,361],{"href":359,"rel":360},"https://gitlab.com/gitlab-org/gitlab-runner/blob/master/docs/configuration/autoscale.md#distributed-docker-registry-mirroring",[],"Docker Hub Registry Mirror",[20,363,366],{"href":364,"rel":365},"https://gitlab.com/gitlab-org/gitlab-runner/blob/master/docs/configuration/autoscale.md#distributed-runners-caching",[],"Distributed runners caching",[12,368,369],{},"Happy building!",[53,371,373],{"id":372},"live-webcast-gitlab-ci","Live webcast: GitLab CI",[12,375,376],{},"Sign up for our webcast on April 14th, which includes an overview and tutorial\nabout using GitLab CI. Join to meet with the GitLab CI team and get your questions\nanswered live!",[378,379,380,384,387],"ul",{},[381,382,383],"li",{},"Date: Thursday, April 14, 2016",[381,385,386],{},"Time: 5pm (17:00) UTC; 12pm EST; 9am PST",[381,388,389],{},[20,390,393],{"href":391,"rel":392},"http://page.gitlab.com/apr-2016-gitlab-intro-ci-webcast.html",[],"Register here",[12,395,396],{},"Can't make it? Register anyway, and we'll send you a link to watch it later!",[398,399,400],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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);}",{"title":151,"searchDepth":169,"depth":169,"links":402},[403,404,405,406,407,408,409],{"id":55,"depth":169,"text":56},{"id":92,"depth":169,"text":93},{"id":107,"depth":169,"text":108},{"id":123,"depth":169,"text":124},{"id":236,"depth":169,"text":237},{"id":335,"depth":169,"text":336},{"id":372,"depth":169,"text":373},"engineering","2016-04-05","With the latest release of GitLab Runner 1.1, we've introduced autoscaling to help us meet the growing demand","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684484/Blog/Hero%20Images/agile.jpg",{"excerpt":418},{"type":9,"value":419},[420,427],[12,421,422,18,424,25],{},[15,423,17],{},[20,425,24],{"href":22,"rel":426},[],[12,428,28,429,34,432,40,435,45,437,51],{},[20,430,33],{"href":31,"rel":431},[],[20,433,39],{"href":37,"rel":434},[],[42,436,44],{},[20,438,50],{"href":48,"rel":439},[],"/en-us/blog/shared-runners",{"title":5,"description":412,"ogTitle":5,"ogDescription":412,"noIndex":415,"ogImage":416,"ogUrl":442,"ogSiteName":443,"ogType":444,"canonicalUrls":442},"https://about.gitlab.com/blog/shared-runners","https://about.gitlab.com","article","shared-runners","en-us/blog/shared-runners","BlogPost","4GVheVnU9-TOO178o9VwxouTQ1T4_x5PBP6UH1wUY_s",{"logo":450,"freeTrial":455,"sales":460,"login":465,"items":470,"search":796,"minimal":827,"duo":846,"switchNav":855,"pricingDeployment":866},{"config":451},{"href":452,"dataGaName":453,"dataGaLocation":454},"/","gitlab logo","header",{"text":456,"config":457},"Get free trial",{"href":458,"dataGaName":459,"dataGaLocation":454},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":461,"config":462},"Request a demo",{"href":463,"dataGaName":464,"dataGaLocation":454},"/sales/?contact-topic=request-demo","sales",{"text":466,"config":467},"Sign in",{"href":468,"dataGaName":469,"dataGaLocation":454},"https://gitlab.com/users/sign_in/","sign in",[471,500,600,605,718,774],{"text":472,"config":473,"menu":475},"Platform",{"dataNavLevelOne":474},"platform",{"type":476,"columns":477},"cards",[478,484,492],{"title":472,"description":479,"link":480},"The intelligent orchestration platform for DevSecOps",{"text":481,"config":482},"Explore our Platform",{"href":483,"dataGaName":474,"dataGaLocation":454},"/platform/",{"title":485,"description":486,"link":487},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":488,"config":489},"Meet GitLab Duo",{"href":490,"dataGaName":491,"dataGaLocation":454},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":493,"description":494,"link":495},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":496,"config":497},"Learn more",{"href":498,"dataGaName":499,"dataGaLocation":454},"/why-gitlab/","why gitlab",{"text":501,"left":197,"config":502,"menu":504},"Product",{"dataNavLevelOne":503},"solutions",{"type":505,"link":506,"columns":510,"feature":579},"lists",{"text":507,"config":508},"View all Solutions",{"href":509,"dataGaName":503,"dataGaLocation":454},"/solutions/",[511,535,558],{"title":512,"description":513,"link":514,"items":519},"Automation","CI/CD and automation to accelerate deployment",{"config":515},{"icon":516,"href":517,"dataGaName":518,"dataGaLocation":454},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[520,524,527,531],{"text":521,"config":522},"CI/CD",{"href":523,"dataGaLocation":454,"dataGaName":521},"/solutions/continuous-integration/",{"text":485,"config":525},{"href":490,"dataGaLocation":454,"dataGaName":526},"gitlab duo agent platform - product menu",{"text":528,"config":529},"Source Code Management",{"href":530,"dataGaLocation":454,"dataGaName":528},"/solutions/source-code-management/",{"text":532,"config":533},"Automated Software Delivery",{"href":517,"dataGaLocation":454,"dataGaName":534},"Automated software delivery",{"title":536,"description":537,"link":538,"items":543},"Security","Deliver code faster without compromising security",{"config":539},{"href":540,"dataGaName":541,"dataGaLocation":454,"icon":542},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[544,548,553],{"text":545,"config":546},"Application Security Testing",{"href":540,"dataGaName":547,"dataGaLocation":454},"Application security testing",{"text":549,"config":550},"Software Supply Chain Security",{"href":551,"dataGaLocation":454,"dataGaName":552},"/solutions/supply-chain/","Software supply chain security",{"text":554,"config":555},"Software Compliance",{"href":556,"dataGaName":557,"dataGaLocation":454},"/solutions/software-compliance/","software compliance",{"title":559,"link":560,"items":565},"Measurement",{"config":561},{"icon":562,"href":563,"dataGaName":564,"dataGaLocation":454},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[566,570,574],{"text":567,"config":568},"Visibility & Measurement",{"href":563,"dataGaLocation":454,"dataGaName":569},"Visibility and Measurement",{"text":571,"config":572},"Value Stream Management",{"href":573,"dataGaLocation":454,"dataGaName":571},"/solutions/value-stream-management/",{"text":575,"config":576},"Analytics & Insights",{"href":577,"dataGaLocation":454,"dataGaName":578},"/solutions/analytics-and-insights/","Analytics and insights",{"title":580,"type":505,"items":581},"GitLab for",[582,588,594],{"text":583,"config":584},"Enterprise",{"icon":585,"href":586,"dataGaLocation":454,"dataGaName":587},"Building","/enterprise/","enterprise",{"text":589,"config":590},"Small Business",{"icon":591,"href":592,"dataGaLocation":454,"dataGaName":593},"Work","/small-business/","small business",{"text":595,"config":596},"Public Sector",{"icon":597,"href":598,"dataGaLocation":454,"dataGaName":599},"Organization","/solutions/public-sector/","public sector",{"text":601,"config":602},"Pricing",{"href":603,"dataGaName":604,"dataGaLocation":454,"dataNavLevelOne":604},"/pricing/","pricing",{"text":606,"config":607,"menu":609},"Resources",{"dataNavLevelOne":608},"resources",{"type":505,"link":610,"columns":614,"feature":707},{"text":611,"config":612},"View all resources",{"href":613,"dataGaName":608,"dataGaLocation":454},"/resources/",[615,648,675],{"title":616,"items":617},"Getting started",[618,623,628,633,638,643],{"text":619,"config":620},"Install",{"href":621,"dataGaName":622,"dataGaLocation":454},"/install/","install",{"text":624,"config":625},"Quick start guides",{"href":626,"dataGaName":627,"dataGaLocation":454},"/get-started/","quick setup checklists",{"text":629,"config":630},"Learn",{"href":631,"dataGaLocation":454,"dataGaName":632},"https://university.gitlab.com/","learn",{"text":634,"config":635},"Product documentation",{"href":636,"dataGaName":637,"dataGaLocation":454},"https://docs.gitlab.com/","product documentation",{"text":639,"config":640},"Best practice videos",{"href":641,"dataGaName":642,"dataGaLocation":454},"/getting-started-videos/","best practice videos",{"text":644,"config":645},"Integrations",{"href":646,"dataGaName":647,"dataGaLocation":454},"/integrations/","integrations",{"title":649,"items":650},"Discover",[651,656,661,666,670],{"text":652,"config":653},"Customer success stories",{"href":654,"dataGaName":655,"dataGaLocation":454},"/customers/","customer success stories",{"text":657,"config":658},"Blog",{"href":659,"dataGaName":660,"dataGaLocation":454},"/blog/","blog",{"text":662,"config":663},"Demo Hub",{"href":664,"dataGaName":665,"dataGaLocation":454},"/demo-hub/","demo hub",{"text":667,"config":668},"The Source",{"href":669,"dataGaName":660,"dataGaLocation":454},"/the-source/",{"text":671,"config":672},"Remote",{"href":673,"dataGaName":674,"dataGaLocation":454},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":676,"items":677},"Connect",[678,682,687,692,697,702],{"text":679,"config":680},"GitLab Services",{"href":681,"dataGaName":275,"dataGaLocation":454},"/services/",{"text":683,"config":684},"Contribute",{"href":685,"dataGaName":686,"dataGaLocation":454},"https://contributors.gitlab.com","contribute",{"text":688,"config":689},"Community",{"href":690,"dataGaName":691,"dataGaLocation":454},"/community/","community",{"text":693,"config":694},"Forum",{"href":695,"dataGaName":696,"dataGaLocation":454},"https://forum.gitlab.com/","forum",{"text":698,"config":699},"Events",{"href":700,"dataGaName":701,"dataGaLocation":454},"/events/","events",{"text":703,"config":704},"Partners",{"href":705,"dataGaName":706,"dataGaLocation":454},"/partners/","partners",{"config":708,"title":711,"text":712,"link":713},{"background":709,"textColor":710},"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":714,"config":715},"Read the latest",{"href":716,"dataGaName":717,"dataGaLocation":454},"/whats-new/","whats new",{"text":719,"config":720,"menu":722},"Company",{"dataNavLevelOne":721},"company",{"type":505,"columns":723},[724],{"items":725},[726,731,737,739,744,749,754,759,764,769],{"text":727,"config":728},"About",{"href":729,"dataGaName":730,"dataGaLocation":454},"/company/","about",{"text":732,"config":733,"footerGa":736},"Jobs",{"href":734,"dataGaName":735,"dataGaLocation":454},"/jobs/","jobs",{"dataGaName":735},{"text":698,"config":738},{"href":700,"dataGaName":701,"dataGaLocation":454},{"text":740,"config":741},"Leadership",{"href":742,"dataGaName":743,"dataGaLocation":454},"/company/team/e-group/","leadership",{"text":745,"config":746},"Handbook",{"href":747,"dataGaName":748,"dataGaLocation":454},"https://handbook.gitlab.com/","handbook",{"text":750,"config":751},"Investor relations",{"href":752,"dataGaName":753,"dataGaLocation":454},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":755,"config":756},"Trust Center",{"href":757,"dataGaName":758,"dataGaLocation":454},"/security/","trust center",{"text":760,"config":761},"AI Transparency Center",{"href":762,"dataGaName":763,"dataGaLocation":454},"/ai-transparency-center/","ai transparency center",{"text":765,"config":766},"Newsletter",{"href":767,"dataGaName":768,"dataGaLocation":454},"/company/contact/#contact-forms","newsletter",{"text":770,"config":771},"Press",{"href":772,"dataGaName":773,"dataGaLocation":454},"/press/","press",{"text":775,"config":776,"menu":777},"Contact us",{"dataNavLevelOne":721},{"type":505,"columns":778},[779],{"items":780},[781,786,791],{"text":782,"config":783},"Talk to sales",{"href":784,"dataGaName":785,"dataGaLocation":454},"/sales/","talk to sales",{"text":787,"config":788},"Support portal",{"href":789,"dataGaName":790,"dataGaLocation":454},"https://support.gitlab.com/hc/en-us","support portal",{"text":792,"config":793},"Customer portal",{"href":794,"dataGaName":795,"dataGaLocation":454},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":797,"login":798,"suggestions":805},"Close",{"text":799,"link":800},"To search repositories and projects, login to",{"text":801,"config":802},"gitlab.com",{"href":468,"dataGaName":803,"dataGaLocation":804},"search login","search",{"text":806,"default":807},"Suggestions",[808,810,814,816,820,824],{"text":485,"config":809},{"href":490,"dataGaName":485,"dataGaLocation":804},{"text":811,"config":812},"Code Suggestions (AI)",{"href":813,"dataGaName":811,"dataGaLocation":804},"/solutions/code-suggestions/",{"text":521,"config":815},{"href":523,"dataGaName":521,"dataGaLocation":804},{"text":817,"config":818},"GitLab on AWS",{"href":819,"dataGaName":817,"dataGaLocation":804},"/partners/technology-partners/aws/",{"text":821,"config":822},"GitLab on Google Cloud",{"href":823,"dataGaName":821,"dataGaLocation":804},"/partners/technology-partners/google-cloud-platform/",{"text":825,"config":826},"Why GitLab?",{"href":498,"dataGaName":825,"dataGaLocation":804},{"freeTrial":828,"mobileIcon":833,"desktopIcon":838,"secondaryButton":841},{"text":829,"config":830},"Start free trial",{"href":831,"dataGaName":459,"dataGaLocation":832},"https://gitlab.com/-/trials/new/","nav",{"altText":834,"config":835},"Gitlab Icon",{"src":836,"dataGaName":837,"dataGaLocation":832},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":834,"config":839},{"src":840,"dataGaName":837,"dataGaLocation":832},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":842,"config":843},"Get Started",{"href":844,"dataGaName":845,"dataGaLocation":832},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":847,"mobileIcon":851,"desktopIcon":853},{"text":848,"config":849},"Learn more about GitLab Duo",{"href":490,"dataGaName":850,"dataGaLocation":832},"gitlab duo",{"altText":834,"config":852},{"src":836,"dataGaName":837,"dataGaLocation":832},{"altText":834,"config":854},{"src":840,"dataGaName":837,"dataGaLocation":832},{"button":856,"mobileIcon":861,"desktopIcon":863},{"text":857,"config":858},"/switch",{"href":859,"dataGaName":860,"dataGaLocation":832},"#contact","switch",{"altText":834,"config":862},{"src":836,"dataGaName":837,"dataGaLocation":832},{"altText":834,"config":864},{"src":865,"dataGaName":837,"dataGaLocation":832},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":867,"mobileIcon":872,"desktopIcon":874},{"text":868,"config":869},"Back to pricing",{"href":603,"dataGaName":870,"dataGaLocation":832,"icon":871},"back to pricing","GoBack",{"altText":834,"config":873},{"src":836,"dataGaName":837,"dataGaLocation":832},{"altText":834,"config":875},{"src":840,"dataGaName":837,"dataGaLocation":832},{"title":877,"titleMobile":878,"button":879,"config":884},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":496,"config":880},{"href":881,"dataGaName":882,"dataGaLocation":883},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":885,"disabled":415},"release",{"data":887},{"text":888,"source":889,"edit":895,"contribute":900,"config":905,"items":910,"minimal":1120},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":890,"config":891},"View page source",{"href":892,"dataGaName":893,"dataGaLocation":894},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":896,"config":897},"Edit this page",{"href":898,"dataGaName":899,"dataGaLocation":894},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":901,"config":902},"Please contribute",{"href":903,"dataGaName":904,"dataGaLocation":894},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":906,"facebook":907,"youtube":908,"linkedin":909},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[911,958,1012,1056,1088],{"title":601,"links":912,"subMenu":927},[913,917,922],{"text":914,"config":915},"View plans",{"href":603,"dataGaName":916,"dataGaLocation":894},"view plans",{"text":918,"config":919},"Why Premium?",{"href":920,"dataGaName":921,"dataGaLocation":894},"/pricing/premium/","why premium",{"text":923,"config":924},"Why Ultimate?",{"href":925,"dataGaName":926,"dataGaLocation":894},"/pricing/ultimate/","why ultimate",[928],{"title":929,"links":930},"Contact Us",[931,934,936,938,943,948,953],{"text":932,"config":933},"Contact sales",{"href":784,"dataGaName":464,"dataGaLocation":894},{"text":787,"config":935},{"href":789,"dataGaName":790,"dataGaLocation":894},{"text":792,"config":937},{"href":794,"dataGaName":795,"dataGaLocation":894},{"text":939,"config":940},"Status",{"href":941,"dataGaName":942,"dataGaLocation":894},"https://status.gitlab.com/","status",{"text":944,"config":945},"Terms of use",{"href":946,"dataGaName":947,"dataGaLocation":894},"/terms/","terms of use",{"text":949,"config":950},"Privacy statement",{"href":951,"dataGaName":952,"dataGaLocation":894},"/privacy/","privacy statement",{"text":954,"config":955},"Cookie preferences",{"dataGaName":956,"dataGaLocation":894,"id":957,"isOneTrustButton":197},"cookie preferences","ot-sdk-btn",{"title":501,"links":959,"subMenu":968},[960,964],{"text":961,"config":962},"DevSecOps platform",{"href":483,"dataGaName":963,"dataGaLocation":894},"devsecops platform",{"text":965,"config":966},"AI-Assisted Development",{"href":490,"dataGaName":967,"dataGaLocation":894},"ai-assisted development",[969],{"title":970,"links":971},"Topics",[972,977,982,987,992,997,1002,1007],{"text":973,"config":974},"CICD",{"href":975,"dataGaName":976,"dataGaLocation":894},"/topics/ci-cd/","cicd",{"text":978,"config":979},"GitOps",{"href":980,"dataGaName":981,"dataGaLocation":894},"/topics/gitops/","gitops",{"text":983,"config":984},"DevOps",{"href":985,"dataGaName":986,"dataGaLocation":894},"/topics/devops/","devops",{"text":988,"config":989},"Version Control",{"href":990,"dataGaName":991,"dataGaLocation":894},"/topics/version-control/","version control",{"text":993,"config":994},"DevSecOps",{"href":995,"dataGaName":996,"dataGaLocation":894},"/topics/devsecops/","devsecops",{"text":998,"config":999},"Cloud Native",{"href":1000,"dataGaName":1001,"dataGaLocation":894},"/topics/cloud-native/","cloud native",{"text":1003,"config":1004},"AI for Coding",{"href":1005,"dataGaName":1006,"dataGaLocation":894},"/topics/devops/ai-for-coding/","ai for coding",{"text":1008,"config":1009},"Agentic AI",{"href":1010,"dataGaName":1011,"dataGaLocation":894},"/topics/agentic-ai/","agentic ai",{"title":1013,"links":1014},"Solutions",[1015,1017,1019,1024,1028,1031,1035,1038,1040,1043,1046,1051],{"text":545,"config":1016},{"href":540,"dataGaName":545,"dataGaLocation":894},{"text":534,"config":1018},{"href":517,"dataGaName":518,"dataGaLocation":894},{"text":1020,"config":1021},"Agile development",{"href":1022,"dataGaName":1023,"dataGaLocation":894},"/solutions/agile-delivery/","agile delivery",{"text":1025,"config":1026},"SCM",{"href":530,"dataGaName":1027,"dataGaLocation":894},"source code management",{"text":973,"config":1029},{"href":523,"dataGaName":1030,"dataGaLocation":894},"continuous integration & delivery",{"text":1032,"config":1033},"Value stream management",{"href":573,"dataGaName":1034,"dataGaLocation":894},"value stream management",{"text":978,"config":1036},{"href":1037,"dataGaName":981,"dataGaLocation":894},"/solutions/gitops/",{"text":583,"config":1039},{"href":586,"dataGaName":587,"dataGaLocation":894},{"text":1041,"config":1042},"Small business",{"href":592,"dataGaName":593,"dataGaLocation":894},{"text":1044,"config":1045},"Public sector",{"href":598,"dataGaName":599,"dataGaLocation":894},{"text":1047,"config":1048},"Education",{"href":1049,"dataGaName":1050,"dataGaLocation":894},"/solutions/education/","education",{"text":1052,"config":1053},"Financial services",{"href":1054,"dataGaName":1055,"dataGaLocation":894},"/solutions/finance/","financial services",{"title":606,"links":1057},[1058,1060,1062,1064,1067,1069,1072,1074,1076,1078,1080,1082,1084,1086],{"text":619,"config":1059},{"href":621,"dataGaName":622,"dataGaLocation":894},{"text":624,"config":1061},{"href":626,"dataGaName":627,"dataGaLocation":894},{"text":629,"config":1063},{"href":631,"dataGaName":632,"dataGaLocation":894},{"text":634,"config":1065},{"href":636,"dataGaName":1066,"dataGaLocation":894},"docs",{"text":657,"config":1068},{"href":659,"dataGaName":660,"dataGaLocation":894},{"text":1070,"config":1071},"What's new",{"href":716,"dataGaName":717,"dataGaLocation":894},{"text":652,"config":1073},{"href":654,"dataGaName":655,"dataGaLocation":894},{"text":671,"config":1075},{"href":673,"dataGaName":674,"dataGaLocation":894},{"text":679,"config":1077},{"href":681,"dataGaName":275,"dataGaLocation":894},{"text":683,"config":1079},{"href":685,"dataGaName":686,"dataGaLocation":894},{"text":688,"config":1081},{"href":690,"dataGaName":691,"dataGaLocation":894},{"text":693,"config":1083},{"href":695,"dataGaName":696,"dataGaLocation":894},{"text":698,"config":1085},{"href":700,"dataGaName":701,"dataGaLocation":894},{"text":703,"config":1087},{"href":705,"dataGaName":706,"dataGaLocation":894},{"title":719,"links":1089},[1090,1092,1094,1096,1098,1100,1104,1109,1111,1113,1115],{"text":727,"config":1091},{"href":729,"dataGaName":721,"dataGaLocation":894},{"text":732,"config":1093},{"href":734,"dataGaName":735,"dataGaLocation":894},{"text":740,"config":1095},{"href":742,"dataGaName":743,"dataGaLocation":894},{"text":745,"config":1097},{"href":747,"dataGaName":748,"dataGaLocation":894},{"text":750,"config":1099},{"href":752,"dataGaName":753,"dataGaLocation":894},{"text":1101,"config":1102},"Sustainability",{"href":1103,"dataGaName":1101,"dataGaLocation":894},"/sustainability/",{"text":1105,"config":1106},"Diversity, inclusion and belonging (DIB)",{"href":1107,"dataGaName":1108,"dataGaLocation":894},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":755,"config":1110},{"href":757,"dataGaName":758,"dataGaLocation":894},{"text":765,"config":1112},{"href":767,"dataGaName":768,"dataGaLocation":894},{"text":770,"config":1114},{"href":772,"dataGaName":773,"dataGaLocation":894},{"text":1116,"config":1117},"Modern Slavery Transparency Statement",{"href":1118,"dataGaName":1119,"dataGaLocation":894},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1121},[1122,1125,1128],{"text":1123,"config":1124},"Terms",{"href":946,"dataGaName":947,"dataGaLocation":894},{"text":1126,"config":1127},"Cookies",{"dataGaName":956,"dataGaLocation":894,"id":957,"isOneTrustButton":197},{"text":1129,"config":1130},"Privacy",{"href":951,"dataGaName":952,"dataGaLocation":894},[1132],{"id":1133,"title":1134,"body":414,"config":1135,"content":1137,"description":414,"extension":1141,"meta":1142,"navigation":197,"path":1143,"seo":1144,"stem":1145,"__hash__":1146},"blogAuthors/en-us/blog/authors/kamil-trzciski.yml","Kamil Trzciski",{"template":1136},"BlogAuthor",{"name":7,"config":1138},{"headshot":1139,"ctfId":1140},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Kamil-Trzciski","yml",{},"/en-us/blog/authors/kamil-trzciski",{},"en-us/blog/authors/kamil-trzciski","0OWP0PQhw_gA506CcPOOIEVsbyW_ZxV3muYLqF0iFoQ",[1148,1157,1165],{"title":1149,"description":1150,"heroImage":1151,"category":410,"date":1152,"authors":1153,"slug":1156,"externalUrl":414},"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",[1154,1155],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1158,"description":1159,"heroImage":1160,"category":410,"date":1161,"authors":1162,"slug":1164,"externalUrl":414},"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",[1163],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1166,"description":1167,"heroImage":1168,"category":410,"date":1169,"authors":1170,"slug":1172,"externalUrl":414},"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",[1171],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1174},[1175,1189,1201,1213],{"id":1176,"categories":1177,"header":1179,"text":1180,"button":1181,"image":1186},"ai-modernization",[1178],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1182,"config":1183},"Get your AI maturity score",{"href":1184,"dataGaName":1185,"dataGaLocation":660},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1187},{"src":1188},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1190,"categories":1191,"header":1193,"text":1180,"button":1194,"image":1198},"devops-modernization",[1192,996],"product","Are you just managing tools or shipping innovation?",{"text":1195,"config":1196},"Get your DevOps maturity score",{"href":1197,"dataGaName":1185,"dataGaLocation":660},"/assessments/devops-modernization-assessment/",{"config":1199},{"src":1200},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1202,"categories":1203,"header":1205,"text":1180,"button":1206,"image":1210},"security-modernization",[1204],"security","Are you trading speed for security?",{"text":1207,"config":1208},"Get your security maturity score",{"href":1209,"dataGaName":1185,"dataGaLocation":660},"/assessments/security-modernization-assessment/",{"config":1211},{"src":1212},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1214,"paths":1215,"header":1218,"text":1219,"button":1220,"image":1225},"github-azure-migration",[1216,1217],"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":1221,"config":1222},"See how GitLab compares to GitHub",{"href":1223,"dataGaName":1224,"dataGaLocation":660},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1226},{"src":1200},{"header":1228,"blurb":1229,"button":1230,"secondaryButton":1235},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1231,"config":1232},"Get your free trial",{"href":1233,"dataGaName":459,"dataGaLocation":1234},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":932,"config":1236},{"href":784,"dataGaName":464,"dataGaLocation":1234},1786803754642]