[{"data":1,"prerenderedAt":1088},["ShallowReactive",2],{"/blog/gitlab-com-artifacts-cdn-change":3,"navigation-en-us":306,"banner-en-us":733,"footer-en-us":743,"blog-post-authors-en-us-Stan Hu":987,"blog-related-posts-en-us-gitlab-com-artifacts-cdn-change":1002,"blog-promotions-en-us":1024,"next-steps-en-us":1078},{"id":4,"title":5,"authors":6,"body":8,"category":282,"date":283,"description":284,"extension":285,"externalUrl":286,"faq":286,"featured":287,"heroImage":288,"meta":289,"navigation":290,"path":291,"seo":292,"slug":296,"stem":297,"tags":298,"template":304,"updatedDate":286,"__hash__":305},"blogPosts/en-us/blog/gitlab-com-artifacts-cdn-change.md","GitLab.com CI artifacts to use Google Cloud CDN",[7],"Stan Hu",{"type":9,"value":10,"toc":273},"minimark",[11,28,35,40,54,60,63,67,70,79,83,86,95,104,109,112,117,127,130,137,141,147,161,170,174,180,253,260,269],[12,13,14,15,21,22,27],"p",{},"Over the next month and going forward, requests for GitLab CI artifacts downloads may be redirected\nto ",[16,17,20],"a",{"href":18,"rel":19},"https://cloud.google.com/cdn",[],"Google Cloud CDN"," instead of\n",[16,23,26],{"href":24,"rel":25},"https://cloud.google.com/storage",[],"Google Cloud Storage",". We anticipate that GitLab CI users may benefit from faster\ndownloads from edge caches closest to your location.",[12,29,30,34],{},[31,32,33],"strong",{},"Disclaimer:"," This blog contains information related to upcoming products, features, and functionality. It is important to note that the information in this blog post is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. As with all projects, the items mentioned in this blog and linked pages are subject to change or delay. The development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab.",[36,37,39],"h2",{"id":38},"how-will-this-work","How will this work?",[12,41,42,43,48,49,53],{},"Currently when a CI runner or other client ",[16,44,47],{"href":45,"rel":46},"https://docs.gitlab.com/api/job_artifacts/",[],"downloads a CI artifact",",\nGitLab.com responds with a 302 redirect to a time-limited, pre-signed URL with a domain of ",[50,51,52],"code",{},"storage.googleapis.com",".",[12,55,56,57,53],{},"After this change, the domain will change to ",[50,58,59],{},"cdn.artifacts.gitlab-static.net",[12,61,62],{},"The exception is for requests originating from within the Google Cloud\nPlatform. These will continue to be redirected to Cloud Storage.",[36,64,66],{"id":65},"when-will-this-change-occur","When will this change occur?",[12,68,69],{},"We expect to start the transition around the end of October 2022. This will be a\ngradual transition using a percentage-based rollout, so we anticipate that you will see\nan increasing number of your requests redirected to Google Cloud\nCDN instead of Google Cloud Storage until all of the requests are served by the\nformer.",[12,71,72,73,78],{},"You can follow along with the progress of this initiative and raise any\nquestions in ",[16,74,77],{"href":75,"rel":76},"https://gitlab.com/gitlab-com/gl-infra/production/-/issues/7894",[],"this issue",". We\nwill post more detailed timelines in that issue as we refine the rollout\nplan.",[36,80,82],{"id":81},"how-does-this-change-impact-you","How does this change impact you?",[12,84,85],{},"Since GitLab CI runners and certain clients automatically handle URL\nredirections already, we expect that downloads for CI artifacts should\ncontinue to work without any action.",[12,87,88,89,94],{},"We encourage upgrading to the latest version of the GitLab Runner in\norder to take advantage of the CDN. This feature was ",[16,90,93],{"href":91,"rel":92},"https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/2115",[],"introduced in\nGitLab Runner v13.1.0",".\nIf a runner cannot download from the CDN host, it will retry without the\nCDN and download the artifact directly through GitLab.com.",[12,96,97,98,100,101,103],{},"However, if you have a firewall that only allows\n",[50,99,52],{},", you will need to add\n",[50,102,59],{}," (34.110.204.38) to the allow list.",[105,106,108],"h3",{"id":107},"what-do-these-warning-messages-mean","What do these warning messages mean?",[12,110,111],{},"With this change, users may see warning messages in the CI job logs:",[113,114,116],"h4",{"id":115},"read-connection-reset-by-peer","read: connection reset by peer",[118,119,125],"pre",{"className":120,"code":122,"language":123,"meta":124},[121],"language-text","ERROR: Downloading artifacts from coordinator... error couldn't execute GET against https://gitlab.com/api/v4/jobs/\u003Cjob id>/artifacts?direct_download=true: Get \"https://cdn.artifacts.gitlab-static.net/...\nread tcp 172.17.0.2:59332->34.110.204.38:443: read: connection reset by peer  id=1234 token=\u003Csome token>\nWARNING: Retrying...                                error=invalid argument\nDownloading artifacts from coordinator... ok        id=1234 responseStatus=200 OK token=\u003Csome token>\n","text","",[50,126,122],{"__ignoreMap":124},[12,128,129],{},"This error suggests the runner was not able to access the CDN. Check\nyour network firewalls and allow access to the IP 34.110.204.38.",[12,131,132,133,136],{},"Note that there are two ",[50,134,135],{},"Downloading artifacts from coordinator","\nmessages. The second attempt succeeded because the runner retried\nwithout the CDN.",[113,138,140],{"id":139},"x509-certificate-signed-by-unknown-authority","x509: certificate signed by unknown authority",[118,142,145],{"className":143,"code":144,"language":123,"meta":124},[121],"ERROR: Downloading artifacts from coordinator... error couldn't execute GET against https://gitlab.com/api/v4/jobs/\u003Cjob id>/artifacts?direct_download=true: Get \"https://storage.googleapis.com/gitlab-gprd-artifacts/...: x509: certificate signed by unknown authority  id=1234 token=\u003Csome token>\n",[50,146,144],{"__ignoreMap":124},[12,148,149,150,155,156,53],{},"If you see this error with a Windows runner, upgrade to v15.5.0 since it\nis compiled with ",[16,151,154],{"href":152,"rel":153},"https://tip.golang.org/doc/go1.18",[],"Go 1.18",", which\nsupports ",[16,157,160],{"href":158,"rel":159},"https://github.com/golang/go/issues/16736",[],"using the system certificate pool",[12,162,163,164,169],{},"Otherwise, this error suggests the runner is configured with ",[16,165,168],{"href":166,"rel":167},"https://docs.gitlab.com/runner/configuration/tls-self-signed/",[],"custom SSL certificates",".\nYou may need to update your certificates or include the certificates directly in the bundle.",[113,171,173],{"id":172},"authentication-required","Authentication required",[12,175,176,177,179],{},"Some clients may report a 401 error with ",[50,178,173],{}," after\nrequesting to download a job artifact:",[118,181,185],{"className":182,"code":183,"language":184,"meta":124,"style":124},"language-xml shiki shiki-themes github-light","\u003C?xml version='1.0' encoding='UTF-8'?>\u003CError>\u003CCode>AuthenticationRequired\u003C/Code>\u003CMessage>Authentication required.\u003C/Message>\u003C/Error>\n","xml",[50,186,187],{"__ignoreMap":124},[188,189,192,196,199,203,206,210,213,215,218,221,224,227,230,233,235,237,240,243,245,248,250],"span",{"class":190,"line":191},"line",1,[188,193,195],{"class":194},"sgsFI","\u003C?",[188,197,184],{"class":198},"shJU0",[188,200,202],{"class":201},"s7eDp"," version",[188,204,205],{"class":194},"=",[188,207,209],{"class":208},"sYBdl","'1.0'",[188,211,212],{"class":201}," encoding",[188,214,205],{"class":194},[188,216,217],{"class":208},"'UTF-8'",[188,219,220],{"class":194},"?>\u003C",[188,222,223],{"class":198},"Error",[188,225,226],{"class":194},">\u003C",[188,228,229],{"class":198},"Code",[188,231,232],{"class":194},">AuthenticationRequired\u003C/",[188,234,229],{"class":198},[188,236,226],{"class":194},[188,238,239],{"class":198},"Message",[188,241,242],{"class":194},">Authentication required.\u003C/",[188,244,239],{"class":198},[188,246,247],{"class":194},">\u003C/",[188,249,223],{"class":198},[188,251,252],{"class":194},">\n",[12,254,255,256,259],{},"This error message suggests the HTTP client is following the 302\nredirect and sending the ",[50,257,258],{},"Authorization"," header with the redirected\nURL. This is a known issue with Java HTTP clients.",[12,261,262,263,265,266,268],{},"Update your client to drop the ",[50,264,258],{}," header the\nredirect. Google Cloud Storage ignores this header if it were set, but\nCloud CDN rejects requests that have the ",[50,267,258],{}," header set.",[270,271,272],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}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);}",{"title":124,"searchDepth":274,"depth":274,"links":275},2,[276,277,278],{"id":38,"depth":274,"text":39},{"id":65,"depth":274,"text":66},{"id":81,"depth":274,"text":82,"children":279},[280],{"id":107,"depth":281,"text":108},3,"news","2022-10-25","GitLab CI users might benefit from faster downloads from edge caches closest to the user's location.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663009/Blog/Hero%20Images/ESA_case_study_image.jpg",{},true,"/en-us/blog/gitlab-com-artifacts-cdn-change",{"title":5,"description":284,"ogTitle":5,"ogDescription":284,"noIndex":287,"ogImage":288,"ogUrl":293,"ogSiteName":294,"ogType":295,"canonicalUrls":293},"https://about.gitlab.com/blog/gitlab-com-artifacts-cdn-change","https://about.gitlab.com","article","gitlab-com-artifacts-cdn-change","en-us/blog/gitlab-com-artifacts-cdn-change",[299,300,301,302,303],"DevOps","inside GitLab","customers","integrations","CI","BlogPost","aUhdgtO_4bawU-3TIQFje5P-9nLWIR6oXoictGPjc6M",{"logo":307,"freeTrial":312,"sales":317,"login":322,"items":327,"search":653,"minimal":684,"duo":703,"switchNav":712,"pricingDeployment":723},{"config":308},{"href":309,"dataGaName":310,"dataGaLocation":311},"/","gitlab logo","header",{"text":313,"config":314},"Get free trial",{"href":315,"dataGaName":316,"dataGaLocation":311},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":318,"config":319},"Request a demo",{"href":320,"dataGaName":321,"dataGaLocation":311},"/sales/?contact-topic=request-demo","sales",{"text":323,"config":324},"Sign in",{"href":325,"dataGaName":326,"dataGaLocation":311},"https://gitlab.com/users/sign_in/","sign in",[328,357,457,462,575,631],{"text":329,"config":330,"menu":332},"Platform",{"dataNavLevelOne":331},"platform",{"type":333,"columns":334},"cards",[335,341,349],{"title":329,"description":336,"link":337},"The intelligent orchestration platform for DevSecOps",{"text":338,"config":339},"Explore our Platform",{"href":340,"dataGaName":331,"dataGaLocation":311},"/platform/",{"title":342,"description":343,"link":344},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":345,"config":346},"Meet GitLab Duo",{"href":347,"dataGaName":348,"dataGaLocation":311},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":350,"description":351,"link":352},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":353,"config":354},"Learn more",{"href":355,"dataGaName":356,"dataGaLocation":311},"/why-gitlab/","why gitlab",{"text":358,"left":290,"config":359,"menu":361},"Product",{"dataNavLevelOne":360},"solutions",{"type":362,"link":363,"columns":367,"feature":436},"lists",{"text":364,"config":365},"View all Solutions",{"href":366,"dataGaName":360,"dataGaLocation":311},"/solutions/",[368,392,415],{"title":369,"description":370,"link":371,"items":376},"Automation","CI/CD and automation to accelerate deployment",{"config":372},{"icon":373,"href":374,"dataGaName":375,"dataGaLocation":311},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[377,381,384,388],{"text":378,"config":379},"CI/CD",{"href":380,"dataGaLocation":311,"dataGaName":378},"/solutions/continuous-integration/",{"text":342,"config":382},{"href":347,"dataGaLocation":311,"dataGaName":383},"gitlab duo agent platform - product menu",{"text":385,"config":386},"Source Code Management",{"href":387,"dataGaLocation":311,"dataGaName":385},"/solutions/source-code-management/",{"text":389,"config":390},"Automated Software Delivery",{"href":374,"dataGaLocation":311,"dataGaName":391},"Automated software delivery",{"title":393,"description":394,"link":395,"items":400},"Security","Deliver code faster without compromising security",{"config":396},{"href":397,"dataGaName":398,"dataGaLocation":311,"icon":399},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[401,405,410],{"text":402,"config":403},"Application Security Testing",{"href":397,"dataGaName":404,"dataGaLocation":311},"Application security testing",{"text":406,"config":407},"Software Supply Chain Security",{"href":408,"dataGaLocation":311,"dataGaName":409},"/solutions/supply-chain/","Software supply chain security",{"text":411,"config":412},"Software Compliance",{"href":413,"dataGaName":414,"dataGaLocation":311},"/solutions/software-compliance/","software compliance",{"title":416,"link":417,"items":422},"Measurement",{"config":418},{"icon":419,"href":420,"dataGaName":421,"dataGaLocation":311},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[423,427,431],{"text":424,"config":425},"Visibility & Measurement",{"href":420,"dataGaLocation":311,"dataGaName":426},"Visibility and Measurement",{"text":428,"config":429},"Value Stream Management",{"href":430,"dataGaLocation":311,"dataGaName":428},"/solutions/value-stream-management/",{"text":432,"config":433},"Analytics & Insights",{"href":434,"dataGaLocation":311,"dataGaName":435},"/solutions/analytics-and-insights/","Analytics and insights",{"title":437,"type":362,"items":438},"GitLab for",[439,445,451],{"text":440,"config":441},"Enterprise",{"icon":442,"href":443,"dataGaLocation":311,"dataGaName":444},"Building","/enterprise/","enterprise",{"text":446,"config":447},"Small Business",{"icon":448,"href":449,"dataGaLocation":311,"dataGaName":450},"Work","/small-business/","small business",{"text":452,"config":453},"Public Sector",{"icon":454,"href":455,"dataGaLocation":311,"dataGaName":456},"Organization","/solutions/public-sector/","public sector",{"text":458,"config":459},"Pricing",{"href":460,"dataGaName":461,"dataGaLocation":311,"dataNavLevelOne":461},"/pricing/","pricing",{"text":463,"config":464,"menu":466},"Resources",{"dataNavLevelOne":465},"resources",{"type":362,"link":467,"columns":471,"feature":564},{"text":468,"config":469},"View all resources",{"href":470,"dataGaName":465,"dataGaLocation":311},"/resources/",[472,504,531],{"title":473,"items":474},"Getting started",[475,480,485,490,495,500],{"text":476,"config":477},"Install",{"href":478,"dataGaName":479,"dataGaLocation":311},"/install/","install",{"text":481,"config":482},"Quick start guides",{"href":483,"dataGaName":484,"dataGaLocation":311},"/get-started/","quick setup checklists",{"text":486,"config":487},"Learn",{"href":488,"dataGaLocation":311,"dataGaName":489},"https://university.gitlab.com/","learn",{"text":491,"config":492},"Product documentation",{"href":493,"dataGaName":494,"dataGaLocation":311},"https://docs.gitlab.com/","product documentation",{"text":496,"config":497},"Best practice videos",{"href":498,"dataGaName":499,"dataGaLocation":311},"/getting-started-videos/","best practice videos",{"text":501,"config":502},"Integrations",{"href":503,"dataGaName":302,"dataGaLocation":311},"/integrations/",{"title":505,"items":506},"Discover",[507,512,517,522,526],{"text":508,"config":509},"Customer success stories",{"href":510,"dataGaName":511,"dataGaLocation":311},"/customers/","customer success stories",{"text":513,"config":514},"Blog",{"href":515,"dataGaName":516,"dataGaLocation":311},"/blog/","blog",{"text":518,"config":519},"Demo Hub",{"href":520,"dataGaName":521,"dataGaLocation":311},"/demo-hub/","demo hub",{"text":523,"config":524},"The Source",{"href":525,"dataGaName":516,"dataGaLocation":311},"/the-source/",{"text":527,"config":528},"Remote",{"href":529,"dataGaName":530,"dataGaLocation":311},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":532,"items":533},"Connect",[534,539,544,549,554,559],{"text":535,"config":536},"GitLab Services",{"href":537,"dataGaName":538,"dataGaLocation":311},"/services/","services",{"text":540,"config":541},"Contribute",{"href":542,"dataGaName":543,"dataGaLocation":311},"https://contributors.gitlab.com","contribute",{"text":545,"config":546},"Community",{"href":547,"dataGaName":548,"dataGaLocation":311},"/community/","community",{"text":550,"config":551},"Forum",{"href":552,"dataGaName":553,"dataGaLocation":311},"https://forum.gitlab.com/","forum",{"text":555,"config":556},"Events",{"href":557,"dataGaName":558,"dataGaLocation":311},"/events/","events",{"text":560,"config":561},"Partners",{"href":562,"dataGaName":563,"dataGaLocation":311},"/partners/","partners",{"config":565,"title":568,"text":569,"link":570},{"background":566,"textColor":567},"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":571,"config":572},"Read the latest",{"href":573,"dataGaName":574,"dataGaLocation":311},"/whats-new/","whats new",{"text":576,"config":577,"menu":579},"Company",{"dataNavLevelOne":578},"company",{"type":362,"columns":580},[581],{"items":582},[583,588,594,596,601,606,611,616,621,626],{"text":584,"config":585},"About",{"href":586,"dataGaName":587,"dataGaLocation":311},"/company/","about",{"text":589,"config":590,"footerGa":593},"Jobs",{"href":591,"dataGaName":592,"dataGaLocation":311},"/jobs/","jobs",{"dataGaName":592},{"text":555,"config":595},{"href":557,"dataGaName":558,"dataGaLocation":311},{"text":597,"config":598},"Leadership",{"href":599,"dataGaName":600,"dataGaLocation":311},"/company/team/e-group/","leadership",{"text":602,"config":603},"Handbook",{"href":604,"dataGaName":605,"dataGaLocation":311},"https://handbook.gitlab.com/","handbook",{"text":607,"config":608},"Investor relations",{"href":609,"dataGaName":610,"dataGaLocation":311},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":612,"config":613},"Trust Center",{"href":614,"dataGaName":615,"dataGaLocation":311},"/security/","trust center",{"text":617,"config":618},"AI Transparency Center",{"href":619,"dataGaName":620,"dataGaLocation":311},"/ai-transparency-center/","ai transparency center",{"text":622,"config":623},"Newsletter",{"href":624,"dataGaName":625,"dataGaLocation":311},"/company/contact/#contact-forms","newsletter",{"text":627,"config":628},"Press",{"href":629,"dataGaName":630,"dataGaLocation":311},"/press/","press",{"text":632,"config":633,"menu":634},"Contact us",{"dataNavLevelOne":578},{"type":362,"columns":635},[636],{"items":637},[638,643,648],{"text":639,"config":640},"Talk to sales",{"href":641,"dataGaName":642,"dataGaLocation":311},"/sales/","talk to sales",{"text":644,"config":645},"Support portal",{"href":646,"dataGaName":647,"dataGaLocation":311},"https://support.gitlab.com/hc/en-us","support portal",{"text":649,"config":650},"Customer portal",{"href":651,"dataGaName":652,"dataGaLocation":311},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":654,"login":655,"suggestions":662},"Close",{"text":656,"link":657},"To search repositories and projects, login to",{"text":658,"config":659},"gitlab.com",{"href":325,"dataGaName":660,"dataGaLocation":661},"search login","search",{"text":663,"default":664},"Suggestions",[665,667,671,673,677,681],{"text":342,"config":666},{"href":347,"dataGaName":342,"dataGaLocation":661},{"text":668,"config":669},"Code Suggestions (AI)",{"href":670,"dataGaName":668,"dataGaLocation":661},"/solutions/code-suggestions/",{"text":378,"config":672},{"href":380,"dataGaName":378,"dataGaLocation":661},{"text":674,"config":675},"GitLab on AWS",{"href":676,"dataGaName":674,"dataGaLocation":661},"/partners/technology-partners/aws/",{"text":678,"config":679},"GitLab on Google Cloud",{"href":680,"dataGaName":678,"dataGaLocation":661},"/partners/technology-partners/google-cloud-platform/",{"text":682,"config":683},"Why GitLab?",{"href":355,"dataGaName":682,"dataGaLocation":661},{"freeTrial":685,"mobileIcon":690,"desktopIcon":695,"secondaryButton":698},{"text":686,"config":687},"Start free trial",{"href":688,"dataGaName":316,"dataGaLocation":689},"https://gitlab.com/-/trials/new/","nav",{"altText":691,"config":692},"Gitlab Icon",{"src":693,"dataGaName":694,"dataGaLocation":689},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":691,"config":696},{"src":697,"dataGaName":694,"dataGaLocation":689},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":699,"config":700},"Get Started",{"href":701,"dataGaName":702,"dataGaLocation":689},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":704,"mobileIcon":708,"desktopIcon":710},{"text":705,"config":706},"Learn more about GitLab Duo",{"href":347,"dataGaName":707,"dataGaLocation":689},"gitlab duo",{"altText":691,"config":709},{"src":693,"dataGaName":694,"dataGaLocation":689},{"altText":691,"config":711},{"src":697,"dataGaName":694,"dataGaLocation":689},{"button":713,"mobileIcon":718,"desktopIcon":720},{"text":714,"config":715},"/switch",{"href":716,"dataGaName":717,"dataGaLocation":689},"#contact","switch",{"altText":691,"config":719},{"src":693,"dataGaName":694,"dataGaLocation":689},{"altText":691,"config":721},{"src":722,"dataGaName":694,"dataGaLocation":689},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":724,"mobileIcon":729,"desktopIcon":731},{"text":725,"config":726},"Back to pricing",{"href":460,"dataGaName":727,"dataGaLocation":689,"icon":728},"back to pricing","GoBack",{"altText":691,"config":730},{"src":693,"dataGaName":694,"dataGaLocation":689},{"altText":691,"config":732},{"src":697,"dataGaName":694,"dataGaLocation":689},{"title":734,"titleMobile":735,"button":736,"config":741},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":353,"config":737},{"href":738,"dataGaName":739,"dataGaLocation":740},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":742,"disabled":287},"release",{"data":744},{"text":745,"source":746,"edit":752,"contribute":757,"config":762,"items":767,"minimal":976},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":747,"config":748},"View page source",{"href":749,"dataGaName":750,"dataGaLocation":751},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":753,"config":754},"Edit this page",{"href":755,"dataGaName":756,"dataGaLocation":751},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":758,"config":759},"Please contribute",{"href":760,"dataGaName":761,"dataGaLocation":751},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":763,"facebook":764,"youtube":765,"linkedin":766},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[768,815,868,912,944],{"title":458,"links":769,"subMenu":784},[770,774,779],{"text":771,"config":772},"View plans",{"href":460,"dataGaName":773,"dataGaLocation":751},"view plans",{"text":775,"config":776},"Why Premium?",{"href":777,"dataGaName":778,"dataGaLocation":751},"/pricing/premium/","why premium",{"text":780,"config":781},"Why Ultimate?",{"href":782,"dataGaName":783,"dataGaLocation":751},"/pricing/ultimate/","why ultimate",[785],{"title":786,"links":787},"Contact Us",[788,791,793,795,800,805,810],{"text":789,"config":790},"Contact sales",{"href":641,"dataGaName":321,"dataGaLocation":751},{"text":644,"config":792},{"href":646,"dataGaName":647,"dataGaLocation":751},{"text":649,"config":794},{"href":651,"dataGaName":652,"dataGaLocation":751},{"text":796,"config":797},"Status",{"href":798,"dataGaName":799,"dataGaLocation":751},"https://status.gitlab.com/","status",{"text":801,"config":802},"Terms of use",{"href":803,"dataGaName":804,"dataGaLocation":751},"/terms/","terms of use",{"text":806,"config":807},"Privacy statement",{"href":808,"dataGaName":809,"dataGaLocation":751},"/privacy/","privacy statement",{"text":811,"config":812},"Cookie preferences",{"dataGaName":813,"dataGaLocation":751,"id":814,"isOneTrustButton":290},"cookie preferences","ot-sdk-btn",{"title":358,"links":816,"subMenu":825},[817,821],{"text":818,"config":819},"DevSecOps platform",{"href":340,"dataGaName":820,"dataGaLocation":751},"devsecops platform",{"text":822,"config":823},"AI-Assisted Development",{"href":347,"dataGaName":824,"dataGaLocation":751},"ai-assisted development",[826],{"title":827,"links":828},"Topics",[829,834,839,843,848,853,858,863],{"text":830,"config":831},"CICD",{"href":832,"dataGaName":833,"dataGaLocation":751},"/topics/ci-cd/","cicd",{"text":835,"config":836},"GitOps",{"href":837,"dataGaName":838,"dataGaLocation":751},"/topics/gitops/","gitops",{"text":299,"config":840},{"href":841,"dataGaName":842,"dataGaLocation":751},"/topics/devops/","devops",{"text":844,"config":845},"Version Control",{"href":846,"dataGaName":847,"dataGaLocation":751},"/topics/version-control/","version control",{"text":849,"config":850},"DevSecOps",{"href":851,"dataGaName":852,"dataGaLocation":751},"/topics/devsecops/","devsecops",{"text":854,"config":855},"Cloud Native",{"href":856,"dataGaName":857,"dataGaLocation":751},"/topics/cloud-native/","cloud native",{"text":859,"config":860},"AI for Coding",{"href":861,"dataGaName":862,"dataGaLocation":751},"/topics/devops/ai-for-coding/","ai for coding",{"text":864,"config":865},"Agentic AI",{"href":866,"dataGaName":867,"dataGaLocation":751},"/topics/agentic-ai/","agentic ai",{"title":869,"links":870},"Solutions",[871,873,875,880,884,887,891,894,896,899,902,907],{"text":402,"config":872},{"href":397,"dataGaName":402,"dataGaLocation":751},{"text":391,"config":874},{"href":374,"dataGaName":375,"dataGaLocation":751},{"text":876,"config":877},"Agile development",{"href":878,"dataGaName":879,"dataGaLocation":751},"/solutions/agile-delivery/","agile delivery",{"text":881,"config":882},"SCM",{"href":387,"dataGaName":883,"dataGaLocation":751},"source code management",{"text":830,"config":885},{"href":380,"dataGaName":886,"dataGaLocation":751},"continuous integration & delivery",{"text":888,"config":889},"Value stream management",{"href":430,"dataGaName":890,"dataGaLocation":751},"value stream management",{"text":835,"config":892},{"href":893,"dataGaName":838,"dataGaLocation":751},"/solutions/gitops/",{"text":440,"config":895},{"href":443,"dataGaName":444,"dataGaLocation":751},{"text":897,"config":898},"Small business",{"href":449,"dataGaName":450,"dataGaLocation":751},{"text":900,"config":901},"Public sector",{"href":455,"dataGaName":456,"dataGaLocation":751},{"text":903,"config":904},"Education",{"href":905,"dataGaName":906,"dataGaLocation":751},"/solutions/education/","education",{"text":908,"config":909},"Financial services",{"href":910,"dataGaName":911,"dataGaLocation":751},"/solutions/finance/","financial services",{"title":463,"links":913},[914,916,918,920,923,925,928,930,932,934,936,938,940,942],{"text":476,"config":915},{"href":478,"dataGaName":479,"dataGaLocation":751},{"text":481,"config":917},{"href":483,"dataGaName":484,"dataGaLocation":751},{"text":486,"config":919},{"href":488,"dataGaName":489,"dataGaLocation":751},{"text":491,"config":921},{"href":493,"dataGaName":922,"dataGaLocation":751},"docs",{"text":513,"config":924},{"href":515,"dataGaName":516,"dataGaLocation":751},{"text":926,"config":927},"What's new",{"href":573,"dataGaName":574,"dataGaLocation":751},{"text":508,"config":929},{"href":510,"dataGaName":511,"dataGaLocation":751},{"text":527,"config":931},{"href":529,"dataGaName":530,"dataGaLocation":751},{"text":535,"config":933},{"href":537,"dataGaName":538,"dataGaLocation":751},{"text":540,"config":935},{"href":542,"dataGaName":543,"dataGaLocation":751},{"text":545,"config":937},{"href":547,"dataGaName":548,"dataGaLocation":751},{"text":550,"config":939},{"href":552,"dataGaName":553,"dataGaLocation":751},{"text":555,"config":941},{"href":557,"dataGaName":558,"dataGaLocation":751},{"text":560,"config":943},{"href":562,"dataGaName":563,"dataGaLocation":751},{"title":576,"links":945},[946,948,950,952,954,956,960,965,967,969,971],{"text":584,"config":947},{"href":586,"dataGaName":578,"dataGaLocation":751},{"text":589,"config":949},{"href":591,"dataGaName":592,"dataGaLocation":751},{"text":597,"config":951},{"href":599,"dataGaName":600,"dataGaLocation":751},{"text":602,"config":953},{"href":604,"dataGaName":605,"dataGaLocation":751},{"text":607,"config":955},{"href":609,"dataGaName":610,"dataGaLocation":751},{"text":957,"config":958},"Sustainability",{"href":959,"dataGaName":957,"dataGaLocation":751},"/sustainability/",{"text":961,"config":962},"Diversity, inclusion and belonging (DIB)",{"href":963,"dataGaName":964,"dataGaLocation":751},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":612,"config":966},{"href":614,"dataGaName":615,"dataGaLocation":751},{"text":622,"config":968},{"href":624,"dataGaName":625,"dataGaLocation":751},{"text":627,"config":970},{"href":629,"dataGaName":630,"dataGaLocation":751},{"text":972,"config":973},"Modern Slavery Transparency Statement",{"href":974,"dataGaName":975,"dataGaLocation":751},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":977},[978,981,984],{"text":979,"config":980},"Terms",{"href":803,"dataGaName":804,"dataGaLocation":751},{"text":982,"config":983},"Cookies",{"dataGaName":813,"dataGaLocation":751,"id":814,"isOneTrustButton":290},{"text":985,"config":986},"Privacy",{"href":808,"dataGaName":809,"dataGaLocation":751},[988],{"id":989,"title":7,"body":286,"config":990,"content":992,"description":286,"extension":996,"meta":997,"navigation":290,"path":998,"seo":999,"stem":1000,"__hash__":1001},"blogAuthors/en-us/blog/authors/stan-hu.yml",{"template":991},"BlogAuthor",{"name":7,"config":993},{"headshot":994,"ctfId":995},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659504/Blog/Author%20Headshots/stanhu-headshot.jpg","stanhu","yml",{},"/en-us/blog/authors/stan-hu",{},"en-us/blog/authors/stan-hu","KmQVCb_7YcWghHApaS2EI3J2bQ0dRustgOz4wYyOnVk",[1003,1011,1018],{"title":1004,"description":1005,"heroImage":1006,"category":282,"date":1007,"authors":1008,"slug":1010,"externalUrl":286},"GitLab named a Leader in the 2026 Gartner® Magic Quadrant™ for DevSecOps Platforms","Agents made coding fast. GitLab is the Intelligent Orchestration Platform for DevSecOps that brings speed with control for the rest of the software lifecycle.","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-06-17",[1009],"Manav Khurana","gitlab-leader-2026-gartner-mq-devsecops-platforms",{"title":1012,"description":1013,"heroImage":1014,"category":282,"date":1007,"authors":1015,"slug":1017,"externalUrl":286},"GitLab and Capgemini accelerate DevSecOps transformation","The global alliance helps organizations modernize software delivery, secure their supply chain, and bring AI into development workflows.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1781279411/n3pkmddd2eswa8qbu06z.png",[1016],"Alex Picker","gitlab-and-capgemini-global-alliance-partnership",{"title":1019,"description":1020,"heroImage":1021,"category":282,"date":1007,"authors":1022,"slug":1023,"externalUrl":286},"Introducing the 2026 EMEA GitLab Partner Award winners","Learn about the EMEA partners who made an outstanding impact over the past year.\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1781608381/biycl2ib2kpsbspjlac7.png",[1016],"2026-emea-gitlab-partner-awards",{"promotions":1025},[1026,1040,1052,1064],{"id":1027,"categories":1028,"header":1030,"text":1031,"button":1032,"image":1037},"ai-modernization",[1029],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1033,"config":1034},"Get your AI maturity score",{"href":1035,"dataGaName":1036,"dataGaLocation":516},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1038},{"src":1039},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1041,"categories":1042,"header":1044,"text":1031,"button":1045,"image":1049},"devops-modernization",[1043,852],"product","Are you just managing tools or shipping innovation?",{"text":1046,"config":1047},"Get your DevOps maturity score",{"href":1048,"dataGaName":1036,"dataGaLocation":516},"/assessments/devops-modernization-assessment/",{"config":1050},{"src":1051},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1053,"categories":1054,"header":1056,"text":1031,"button":1057,"image":1061},"security-modernization",[1055],"security","Are you trading speed for security?",{"text":1058,"config":1059},"Get your security maturity score",{"href":1060,"dataGaName":1036,"dataGaLocation":516},"/assessments/security-modernization-assessment/",{"config":1062},{"src":1063},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1065,"paths":1066,"header":1069,"text":1070,"button":1071,"image":1076},"github-azure-migration",[1067,1068],"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":1072,"config":1073},"See how GitLab compares to GitHub",{"href":1074,"dataGaName":1075,"dataGaLocation":516},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1077},{"src":1051},{"header":1079,"blurb":1080,"button":1081,"secondaryButton":1086},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1082,"config":1083},"Get your free trial",{"href":1084,"dataGaName":316,"dataGaLocation":1085},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":789,"config":1087},{"href":641,"dataGaName":321,"dataGaLocation":1085},1786803750144]