[{"data":1,"prerenderedAt":1115},["ShallowReactive",2],{"/blog/ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups":3,"navigation-en-us":332,"banner-en-us":758,"footer-en-us":768,"blog-post-authors-en-us-Christian Nnachi":1012,"blog-related-posts-en-us-ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups":1027,"blog-promotions-en-us":1052,"next-steps-en-us":1105},{"id":4,"title":5,"authors":6,"body":8,"category":310,"date":311,"description":312,"extension":313,"externalUrl":314,"faq":314,"featured":315,"heroImage":316,"meta":317,"navigation":318,"path":319,"seo":320,"slug":324,"stem":325,"tags":326,"template":330,"updatedDate":314,"__hash__":331},"blogPosts/en-us/blog/ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups.md","CI/CD automation: Maximize 'deploy freeze' impact across GitLab groups",[7],"Christian Nnachi",{"type":9,"value":10,"toc":293},"minimark",[11,22,34,37,40,45,54,57,62,67,70,75,78,83,86,90,99,102,106,146,150,158,166,170,173,177,226,230,241,245,253,276,280,283],[12,13,14,15,21],"p",{},"In the dynamic landscape of continuous integration and continuous deployment (",[16,17,20],"a",{"href":18,"rel":19},"https://about.gitlab.com/topics/ci-cd/",[],"CI/CD","), maintaining system stability during critical periods such as holidays, product launches, or maintenance windows can be challenging. Introducing new code during peak activity times raises the risk of issues affecting user experience. To strike a balance between innovation and stability, organizations may require a group-level deploy freeze — a strategic pause in deploying new code changes across groups to certain branches or environments.",[12,23,24,33],{},[25,26,27,28],"strong",{},"Given that GitLab can be used for both continuous integration and continuous deployment efforts, GitLab's ",[16,29,32],{"href":30,"rel":31},"https://docs.gitlab.com/user/project/releases/#prevent-unintentional-releases-by-setting-a-deploy-freeze",[],"Deploy Freeze"," capability aims to address this exact need.",[12,35,36],{},"Scoped at the project level, deploy freezes can prevent unintended production releases during a period of time you specify by setting a deploy freeze period. Deploy freezes help reduce uncertainty and risk when continuously deploying changes for a single project.",[12,38,39],{},"Most teams, however, do not have a single project that represents all of their production environment. Given that deploy freezes are set at the project level, managing and enforcing deploy freezes across many projects can be an arduous and error-prone task, leading to unpredictability and disruption. The need for an automated cross-project solution to ensure stability is obvious.",[41,42,44],"h2",{"id":43},"what-is-a-group-deploy-freeze","What is a group deploy freeze?",[12,46,47,48,53],{},"The ",[16,49,52],{"href":50,"rel":51},"https://gitlab.com/cnnachi-demo/freezeperiods",[],"Group Deploy Freeze project"," takes the concept of individual project deploy freezes to the next level. It enables you to enforce the same deployment restrictions across one or many projects within a GitLab group from the GitLab UI.",[12,55,56],{},"Whether you're managing a large suite of microservices or a collection of related projects, a group-managed deploy freeze solution provides a centralized mechanism to maintain stability.",[58,59,61],"h3",{"id":60},"benefits-of-group-deploy-freeze","Benefits of group deploy freeze",[12,63,64],{},[25,65,66],{},"1. Centralized control",[12,68,69],{},"Adherence to your deployment strategy by allowing you to manage deploy freezes for multiple projects from a single location. This simplifies the process and reduces human errors.",[12,71,72],{},[25,73,74],{},"2. Group-wide synchronization",[12,76,77],{},"Enforcing deploy freezes across an entire GitLab group ensures that all projects receive the same schedule at the same time. This maintains uniformity across your projects.",[12,79,80],{},[25,81,82],{},"3. Streamlined collaboration",[12,84,85],{},"Visibility of changes to your development and operations teams can align their efforts effectively.",[41,87,89],{"id":88},"how-to-use-gitlab-group-deploy-freeze","How to use GitLab Group Deploy Freeze",[12,91,92,93,98],{},"With ",[16,94,97],{"href":95,"rel":96},"https://gitlab.com/demos/solutions/group-deploy-freeze",[],"Group Deploy Freeze",", GitLab CI becomes a general-purpose automation tool for ops-related changes, like setting deploy freezes on many projects.",[12,100,101],{},"In the following steps, you will successfully set up the Group Deploy Freeze feature. Remember to test thoroughly and consider any specific nuances of your team's deployment process.",[58,103,105],{"id":104},"prerequisites","Prerequisites",[107,108,109,116,122,128,134,140],"ul",{},[110,111,112,115],"li",{},[25,113,114],{},"GitLab account -"," You need an active GitLab account with the necessary permissions to access and manage the projects within the target GitLab group.",[110,117,118,121],{},[25,119,120],{},"GitLab Personal Access Token (PAT) -"," Generate a GitLab PAT with the permissions to read and write to the projects within the target GitLab group via the GitLab API. This token will be used by the Python script to authenticate API requests.",[110,123,124,127],{},[25,125,126],{},"Python environment -"," Ensure that you have a Python environment set up on your machine or the environment where you plan to run the Python script. The script is written in Python, so you need a compatible Python interpreter.",[110,129,130,133],{},[25,131,132],{},"Python libraries -"," Install the required Python libraries used by the script. These include requests, envparse, and python-gitlab. You can use pip to install these libraries.",[110,135,136,139],{},[25,137,138],{},"GitLab Group details -"," Identify the GitLab group for which you want to manage deploy freezes. You'll need the group's slug (path) to specify which group the script will operate on.",[110,141,142,145],{},[25,143,144],{},"Time zone selection -"," Decide on the time zone in which you want to schedule the deploy freezes. The time zone selection ensures that freeze periods are accurately timed based on your organization's preferred time zone.",[58,147,149],{"id":148},"getting-started","Getting started",[12,151,152,153,157],{},"To use GitLab CI to author and automate the process of batch updating deploy freezes for all projects, fork the ",[16,154,156],{"href":50,"rel":155},[],"Deploy Freeze project",", which will then create a CI/CD pipeline that iterates through your projects and applies the desired deploy freeze schedule. You can customize this project to fit your organization's workflow.",[12,159,160,161,165],{},"The provided project contains a ",[162,163,164],"code",{},".gitlab-ci.yml"," file and a Python script designed to automate the management of deploy freezes for multiple projects within a GitLab group. It uses the GitLab API and various Python libraries to create and delete deploy freeze periods, and is designed to be run as part of a CI/CD pipeline to ensure code stability during deployments within a GitLab group.",[58,167,169],{"id":168},"commit-and-push-changes","Commit and push changes",[12,171,172],{},"Commit and push the changes to your repository to trigger the CI/CD pipeline.",[58,174,176],{"id":175},"pipeline-execution","Pipeline execution",[107,178,179,186,189,200,223],{},[110,180,181,182,185],{},"In the ",[16,183,52],{"href":95,"rel":184},[]," on the GitLab UI, go to Pipelines.",[110,187,188],{},"Select the \"Run Pipeline\" option on the top right corner of the page.",[110,190,191,192,194,195],{},"You should see the variables defined in the ",[162,193,164],{}," file like:\n",[196,197],"img",{"alt":198,"src":199},"Set variables","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749676891/Blog/Content%20Images/Screenshot-2023-09-06-at-12-08-48-PM.png",[110,201,202,203,206,207,206,210,213,214,217,218,213,220,222],{},"Define the values of the variables ",[162,204,205],{},"FREEZE_START",", ",[162,208,209],{},"FREEZE_END",[162,211,212],{},"CRON_TIME_ZONE"," and ",[162,215,216],{},"GROUP_SLUG",", then run the pipeline. You can define multiple freeze periods by skipping to the next line within the ",[162,219,205],{},[162,221,209],{}," variables.",[110,224,225],{},"Once the pipeline is successful, the freeze period should be populated in all projects within the defined groups.",[41,227,229],{"id":228},"monitor-and-verify","Monitor and verify",[107,231,232,235],{},[110,233,234],{},"Verify that these deploy freeze periods are being created and managed as intended.",[110,236,237,238],{},"Check your GitLab group's projects for deploy freezes during the specified periods.\n",[196,239],{"alt":229,"src":240},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749676891/Blog/Content%20Images/Screenshot-2023-09-12-at-2-08-24-PM.png",[41,242,244],{"id":243},"customization-and-iteration","Customization and iteration",[107,246,247,250],{},[110,248,249],{},"If needed, iterate on the configuration, script, or pipeline based on your organization's requirements.",[110,251,252],{},"Make adjustments to freeze periods, time zones, project details, or other settings as needed.",[12,254,255,256,260,261,264,265,268,269,271,272,275],{},"You can optimize the group deploy feature by following the ",[16,257,259],{"href":30,"rel":258},[],"Deploy freeze"," documentation, which outlines the steps to set up a ",[162,262,263],{},".freezedeployment"," job that can conditionally block deployment jobs upon the presence of the ",[162,266,267],{},"CI_DEPLOY_FREEZE"," variable. By including the ",[162,270,263],{}," template and extending it in your project's ",[162,273,274],{},".gitlab-ci.yml file",", you can prevent deployments during freeze periods, ensuring code stability. Manual deployment intervention is possible once the freeze period ends, allowing for controlled and predictable deployment processes across the group's projects.",[41,277,279],{"id":278},"results","Results",[12,281,282],{},"By extending deploy freezes to the group level, teams can easily streamline and enhance their deployment strategies to ensure consistency in preventing unintended production release during a period of time specified by you, whether it is a large company event or holiday. With the power of GitLab's API, CI/CD pipelines, and the flexibility of Python scripting, Group Deploy Freeze is your ally in maintaining code stability and predictability across diverse projects.",[284,285,286],"blockquote",{},[12,287,288,289,292],{},"Get started with group deploy freezes today by visiting the ",[16,290,52],{"href":50,"rel":291},[],".",{"title":294,"searchDepth":295,"depth":295,"links":296},"",2,[297,301,307,308,309],{"id":43,"depth":295,"text":44,"children":298},[299],{"id":60,"depth":300,"text":61},3,{"id":88,"depth":295,"text":89,"children":302},[303,304,305,306],{"id":104,"depth":300,"text":105},{"id":148,"depth":300,"text":149},{"id":168,"depth":300,"text":169},{"id":175,"depth":300,"text":176},{"id":228,"depth":295,"text":229},{"id":243,"depth":295,"text":244},{"id":278,"depth":295,"text":279},"devsecops","2024-02-08","Learn the benefits of managing deploy freezes at the group level and follow step-by-step guidance on implementation.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667913/Blog/Hero%20Images/clocks.jpg",{},true,"/en-us/blog/ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups",{"title":5,"description":312,"ogTitle":5,"ogDescription":312,"noIndex":315,"ogImage":316,"ogUrl":321,"ogSiteName":322,"ogType":323,"canonicalUrls":321},"https://about.gitlab.com/blog/ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups","https://about.gitlab.com","article","ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups","en-us/blog/ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups",[20,327,328,329],"product","production","tutorial","BlogPost","aoYn_H7_Vv67Ag1ZBvnifuiMCt5_fkP1qNas0Vqhe2E",{"logo":333,"freeTrial":338,"sales":343,"login":348,"items":353,"search":678,"minimal":709,"duo":728,"switchNav":737,"pricingDeployment":748},{"config":334},{"href":335,"dataGaName":336,"dataGaLocation":337},"/","gitlab logo","header",{"text":339,"config":340},"Get free trial",{"href":341,"dataGaName":342,"dataGaLocation":337},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":344,"config":345},"Request a demo",{"href":346,"dataGaName":347,"dataGaLocation":337},"/sales/?contact-topic=request-demo","sales",{"text":349,"config":350},"Sign in",{"href":351,"dataGaName":352,"dataGaLocation":337},"https://gitlab.com/users/sign_in/","sign in",[354,383,482,487,600,656],{"text":355,"config":356,"menu":358},"Platform",{"dataNavLevelOne":357},"platform",{"type":359,"columns":360},"cards",[361,367,375],{"title":355,"description":362,"link":363},"The intelligent orchestration platform for DevSecOps",{"text":364,"config":365},"Explore our Platform",{"href":366,"dataGaName":357,"dataGaLocation":337},"/platform/",{"title":368,"description":369,"link":370},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":371,"config":372},"Meet GitLab Duo",{"href":373,"dataGaName":374,"dataGaLocation":337},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":376,"description":377,"link":378},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":379,"config":380},"Learn more",{"href":381,"dataGaName":382,"dataGaLocation":337},"/why-gitlab/","why gitlab",{"text":384,"left":318,"config":385,"menu":387},"Product",{"dataNavLevelOne":386},"solutions",{"type":388,"link":389,"columns":393,"feature":461},"lists",{"text":390,"config":391},"View all Solutions",{"href":392,"dataGaName":386,"dataGaLocation":337},"/solutions/",[394,417,440],{"title":395,"description":396,"link":397,"items":402},"Automation","CI/CD and automation to accelerate deployment",{"config":398},{"icon":399,"href":400,"dataGaName":401,"dataGaLocation":337},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[403,406,409,413],{"text":20,"config":404},{"href":405,"dataGaLocation":337,"dataGaName":20},"/solutions/continuous-integration/",{"text":368,"config":407},{"href":373,"dataGaLocation":337,"dataGaName":408},"gitlab duo agent platform - product menu",{"text":410,"config":411},"Source Code Management",{"href":412,"dataGaLocation":337,"dataGaName":410},"/solutions/source-code-management/",{"text":414,"config":415},"Automated Software Delivery",{"href":400,"dataGaLocation":337,"dataGaName":416},"Automated software delivery",{"title":418,"description":419,"link":420,"items":425},"Security","Deliver code faster without compromising security",{"config":421},{"href":422,"dataGaName":423,"dataGaLocation":337,"icon":424},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[426,430,435],{"text":427,"config":428},"Application Security Testing",{"href":422,"dataGaName":429,"dataGaLocation":337},"Application security testing",{"text":431,"config":432},"Software Supply Chain Security",{"href":433,"dataGaLocation":337,"dataGaName":434},"/solutions/supply-chain/","Software supply chain security",{"text":436,"config":437},"Software Compliance",{"href":438,"dataGaName":439,"dataGaLocation":337},"/solutions/software-compliance/","software compliance",{"title":441,"link":442,"items":447},"Measurement",{"config":443},{"icon":444,"href":445,"dataGaName":446,"dataGaLocation":337},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[448,452,456],{"text":449,"config":450},"Visibility & Measurement",{"href":445,"dataGaLocation":337,"dataGaName":451},"Visibility and Measurement",{"text":453,"config":454},"Value Stream Management",{"href":455,"dataGaLocation":337,"dataGaName":453},"/solutions/value-stream-management/",{"text":457,"config":458},"Analytics & Insights",{"href":459,"dataGaLocation":337,"dataGaName":460},"/solutions/analytics-and-insights/","Analytics and insights",{"title":462,"type":388,"items":463},"GitLab for",[464,470,476],{"text":465,"config":466},"Enterprise",{"icon":467,"href":468,"dataGaLocation":337,"dataGaName":469},"Building","/enterprise/","enterprise",{"text":471,"config":472},"Small Business",{"icon":473,"href":474,"dataGaLocation":337,"dataGaName":475},"Work","/small-business/","small business",{"text":477,"config":478},"Public Sector",{"icon":479,"href":480,"dataGaLocation":337,"dataGaName":481},"Organization","/solutions/public-sector/","public sector",{"text":483,"config":484},"Pricing",{"href":485,"dataGaName":486,"dataGaLocation":337,"dataNavLevelOne":486},"/pricing/","pricing",{"text":488,"config":489,"menu":491},"Resources",{"dataNavLevelOne":490},"resources",{"type":388,"link":492,"columns":496,"feature":589},{"text":493,"config":494},"View all resources",{"href":495,"dataGaName":490,"dataGaLocation":337},"/resources/",[497,529,556],{"title":149,"items":498},[499,504,509,514,519,524],{"text":500,"config":501},"Install",{"href":502,"dataGaName":503,"dataGaLocation":337},"/install/","install",{"text":505,"config":506},"Quick start guides",{"href":507,"dataGaName":508,"dataGaLocation":337},"/get-started/","quick setup checklists",{"text":510,"config":511},"Learn",{"href":512,"dataGaLocation":337,"dataGaName":513},"https://university.gitlab.com/","learn",{"text":515,"config":516},"Product documentation",{"href":517,"dataGaName":518,"dataGaLocation":337},"https://docs.gitlab.com/","product documentation",{"text":520,"config":521},"Best practice videos",{"href":522,"dataGaName":523,"dataGaLocation":337},"/getting-started-videos/","best practice videos",{"text":525,"config":526},"Integrations",{"href":527,"dataGaName":528,"dataGaLocation":337},"/integrations/","integrations",{"title":530,"items":531},"Discover",[532,537,542,547,551],{"text":533,"config":534},"Customer success stories",{"href":535,"dataGaName":536,"dataGaLocation":337},"/customers/","customer success stories",{"text":538,"config":539},"Blog",{"href":540,"dataGaName":541,"dataGaLocation":337},"/blog/","blog",{"text":543,"config":544},"Demo Hub",{"href":545,"dataGaName":546,"dataGaLocation":337},"/demo-hub/","demo hub",{"text":548,"config":549},"The Source",{"href":550,"dataGaName":541,"dataGaLocation":337},"/the-source/",{"text":552,"config":553},"Remote",{"href":554,"dataGaName":555,"dataGaLocation":337},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":557,"items":558},"Connect",[559,564,569,574,579,584],{"text":560,"config":561},"GitLab Services",{"href":562,"dataGaName":563,"dataGaLocation":337},"/services/","services",{"text":565,"config":566},"Contribute",{"href":567,"dataGaName":568,"dataGaLocation":337},"https://contributors.gitlab.com","contribute",{"text":570,"config":571},"Community",{"href":572,"dataGaName":573,"dataGaLocation":337},"/community/","community",{"text":575,"config":576},"Forum",{"href":577,"dataGaName":578,"dataGaLocation":337},"https://forum.gitlab.com/","forum",{"text":580,"config":581},"Events",{"href":582,"dataGaName":583,"dataGaLocation":337},"/events/","events",{"text":585,"config":586},"Partners",{"href":587,"dataGaName":588,"dataGaLocation":337},"/partners/","partners",{"config":590,"title":593,"text":594,"link":595},{"background":591,"textColor":592},"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":596,"config":597},"Read the latest",{"href":598,"dataGaName":599,"dataGaLocation":337},"/whats-new/","whats new",{"text":601,"config":602,"menu":604},"Company",{"dataNavLevelOne":603},"company",{"type":388,"columns":605},[606],{"items":607},[608,613,619,621,626,631,636,641,646,651],{"text":609,"config":610},"About",{"href":611,"dataGaName":612,"dataGaLocation":337},"/company/","about",{"text":614,"config":615,"footerGa":618},"Jobs",{"href":616,"dataGaName":617,"dataGaLocation":337},"/jobs/","jobs",{"dataGaName":617},{"text":580,"config":620},{"href":582,"dataGaName":583,"dataGaLocation":337},{"text":622,"config":623},"Leadership",{"href":624,"dataGaName":625,"dataGaLocation":337},"/company/team/e-group/","leadership",{"text":627,"config":628},"Handbook",{"href":629,"dataGaName":630,"dataGaLocation":337},"https://handbook.gitlab.com/","handbook",{"text":632,"config":633},"Investor relations",{"href":634,"dataGaName":635,"dataGaLocation":337},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":637,"config":638},"Trust Center",{"href":639,"dataGaName":640,"dataGaLocation":337},"/security/","trust center",{"text":642,"config":643},"AI Transparency Center",{"href":644,"dataGaName":645,"dataGaLocation":337},"/ai-transparency-center/","ai transparency center",{"text":647,"config":648},"Newsletter",{"href":649,"dataGaName":650,"dataGaLocation":337},"/company/contact/#contact-forms","newsletter",{"text":652,"config":653},"Press",{"href":654,"dataGaName":655,"dataGaLocation":337},"/press/","press",{"text":657,"config":658,"menu":659},"Contact us",{"dataNavLevelOne":603},{"type":388,"columns":660},[661],{"items":662},[663,668,673],{"text":664,"config":665},"Talk to sales",{"href":666,"dataGaName":667,"dataGaLocation":337},"/sales/","talk to sales",{"text":669,"config":670},"Support portal",{"href":671,"dataGaName":672,"dataGaLocation":337},"https://support.gitlab.com/hc/en-us","support portal",{"text":674,"config":675},"Customer portal",{"href":676,"dataGaName":677,"dataGaLocation":337},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":679,"login":680,"suggestions":687},"Close",{"text":681,"link":682},"To search repositories and projects, login to",{"text":683,"config":684},"gitlab.com",{"href":351,"dataGaName":685,"dataGaLocation":686},"search login","search",{"text":688,"default":689},"Suggestions",[690,692,696,698,702,706],{"text":368,"config":691},{"href":373,"dataGaName":368,"dataGaLocation":686},{"text":693,"config":694},"Code Suggestions (AI)",{"href":695,"dataGaName":693,"dataGaLocation":686},"/solutions/code-suggestions/",{"text":20,"config":697},{"href":405,"dataGaName":20,"dataGaLocation":686},{"text":699,"config":700},"GitLab on AWS",{"href":701,"dataGaName":699,"dataGaLocation":686},"/partners/technology-partners/aws/",{"text":703,"config":704},"GitLab on Google Cloud",{"href":705,"dataGaName":703,"dataGaLocation":686},"/partners/technology-partners/google-cloud-platform/",{"text":707,"config":708},"Why GitLab?",{"href":381,"dataGaName":707,"dataGaLocation":686},{"freeTrial":710,"mobileIcon":715,"desktopIcon":720,"secondaryButton":723},{"text":711,"config":712},"Start free trial",{"href":713,"dataGaName":342,"dataGaLocation":714},"https://gitlab.com/-/trials/new/","nav",{"altText":716,"config":717},"Gitlab Icon",{"src":718,"dataGaName":719,"dataGaLocation":714},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":716,"config":721},{"src":722,"dataGaName":719,"dataGaLocation":714},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":724,"config":725},"Get Started",{"href":726,"dataGaName":727,"dataGaLocation":714},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":729,"mobileIcon":733,"desktopIcon":735},{"text":730,"config":731},"Learn more about GitLab Duo",{"href":373,"dataGaName":732,"dataGaLocation":714},"gitlab duo",{"altText":716,"config":734},{"src":718,"dataGaName":719,"dataGaLocation":714},{"altText":716,"config":736},{"src":722,"dataGaName":719,"dataGaLocation":714},{"button":738,"mobileIcon":743,"desktopIcon":745},{"text":739,"config":740},"/switch",{"href":741,"dataGaName":742,"dataGaLocation":714},"#contact","switch",{"altText":716,"config":744},{"src":718,"dataGaName":719,"dataGaLocation":714},{"altText":716,"config":746},{"src":747,"dataGaName":719,"dataGaLocation":714},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":749,"mobileIcon":754,"desktopIcon":756},{"text":750,"config":751},"Back to pricing",{"href":485,"dataGaName":752,"dataGaLocation":714,"icon":753},"back to pricing","GoBack",{"altText":716,"config":755},{"src":718,"dataGaName":719,"dataGaLocation":714},{"altText":716,"config":757},{"src":722,"dataGaName":719,"dataGaLocation":714},{"title":759,"titleMobile":760,"button":761,"config":766},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":379,"config":762},{"href":763,"dataGaName":764,"dataGaLocation":765},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":767,"disabled":315},"release",{"data":769},{"text":770,"source":771,"edit":777,"contribute":782,"config":787,"items":792,"minimal":1001},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":772,"config":773},"View page source",{"href":774,"dataGaName":775,"dataGaLocation":776},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":778,"config":779},"Edit this page",{"href":780,"dataGaName":781,"dataGaLocation":776},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":783,"config":784},"Please contribute",{"href":785,"dataGaName":786,"dataGaLocation":776},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":788,"facebook":789,"youtube":790,"linkedin":791},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[793,840,893,937,969],{"title":483,"links":794,"subMenu":809},[795,799,804],{"text":796,"config":797},"View plans",{"href":485,"dataGaName":798,"dataGaLocation":776},"view plans",{"text":800,"config":801},"Why Premium?",{"href":802,"dataGaName":803,"dataGaLocation":776},"/pricing/premium/","why premium",{"text":805,"config":806},"Why Ultimate?",{"href":807,"dataGaName":808,"dataGaLocation":776},"/pricing/ultimate/","why ultimate",[810],{"title":811,"links":812},"Contact Us",[813,816,818,820,825,830,835],{"text":814,"config":815},"Contact sales",{"href":666,"dataGaName":347,"dataGaLocation":776},{"text":669,"config":817},{"href":671,"dataGaName":672,"dataGaLocation":776},{"text":674,"config":819},{"href":676,"dataGaName":677,"dataGaLocation":776},{"text":821,"config":822},"Status",{"href":823,"dataGaName":824,"dataGaLocation":776},"https://status.gitlab.com/","status",{"text":826,"config":827},"Terms of use",{"href":828,"dataGaName":829,"dataGaLocation":776},"/terms/","terms of use",{"text":831,"config":832},"Privacy statement",{"href":833,"dataGaName":834,"dataGaLocation":776},"/privacy/","privacy statement",{"text":836,"config":837},"Cookie preferences",{"dataGaName":838,"dataGaLocation":776,"id":839,"isOneTrustButton":318},"cookie preferences","ot-sdk-btn",{"title":384,"links":841,"subMenu":850},[842,846],{"text":843,"config":844},"DevSecOps platform",{"href":366,"dataGaName":845,"dataGaLocation":776},"devsecops platform",{"text":847,"config":848},"AI-Assisted Development",{"href":373,"dataGaName":849,"dataGaLocation":776},"ai-assisted development",[851],{"title":852,"links":853},"Topics",[854,859,864,869,874,878,883,888],{"text":855,"config":856},"CICD",{"href":857,"dataGaName":858,"dataGaLocation":776},"/topics/ci-cd/","cicd",{"text":860,"config":861},"GitOps",{"href":862,"dataGaName":863,"dataGaLocation":776},"/topics/gitops/","gitops",{"text":865,"config":866},"DevOps",{"href":867,"dataGaName":868,"dataGaLocation":776},"/topics/devops/","devops",{"text":870,"config":871},"Version Control",{"href":872,"dataGaName":873,"dataGaLocation":776},"/topics/version-control/","version control",{"text":875,"config":876},"DevSecOps",{"href":877,"dataGaName":310,"dataGaLocation":776},"/topics/devsecops/",{"text":879,"config":880},"Cloud Native",{"href":881,"dataGaName":882,"dataGaLocation":776},"/topics/cloud-native/","cloud native",{"text":884,"config":885},"AI for Coding",{"href":886,"dataGaName":887,"dataGaLocation":776},"/topics/devops/ai-for-coding/","ai for coding",{"text":889,"config":890},"Agentic AI",{"href":891,"dataGaName":892,"dataGaLocation":776},"/topics/agentic-ai/","agentic ai",{"title":894,"links":895},"Solutions",[896,898,900,905,909,912,916,919,921,924,927,932],{"text":427,"config":897},{"href":422,"dataGaName":427,"dataGaLocation":776},{"text":416,"config":899},{"href":400,"dataGaName":401,"dataGaLocation":776},{"text":901,"config":902},"Agile development",{"href":903,"dataGaName":904,"dataGaLocation":776},"/solutions/agile-delivery/","agile delivery",{"text":906,"config":907},"SCM",{"href":412,"dataGaName":908,"dataGaLocation":776},"source code management",{"text":855,"config":910},{"href":405,"dataGaName":911,"dataGaLocation":776},"continuous integration & delivery",{"text":913,"config":914},"Value stream management",{"href":455,"dataGaName":915,"dataGaLocation":776},"value stream management",{"text":860,"config":917},{"href":918,"dataGaName":863,"dataGaLocation":776},"/solutions/gitops/",{"text":465,"config":920},{"href":468,"dataGaName":469,"dataGaLocation":776},{"text":922,"config":923},"Small business",{"href":474,"dataGaName":475,"dataGaLocation":776},{"text":925,"config":926},"Public sector",{"href":480,"dataGaName":481,"dataGaLocation":776},{"text":928,"config":929},"Education",{"href":930,"dataGaName":931,"dataGaLocation":776},"/solutions/education/","education",{"text":933,"config":934},"Financial services",{"href":935,"dataGaName":936,"dataGaLocation":776},"/solutions/finance/","financial services",{"title":488,"links":938},[939,941,943,945,948,950,953,955,957,959,961,963,965,967],{"text":500,"config":940},{"href":502,"dataGaName":503,"dataGaLocation":776},{"text":505,"config":942},{"href":507,"dataGaName":508,"dataGaLocation":776},{"text":510,"config":944},{"href":512,"dataGaName":513,"dataGaLocation":776},{"text":515,"config":946},{"href":517,"dataGaName":947,"dataGaLocation":776},"docs",{"text":538,"config":949},{"href":540,"dataGaName":541,"dataGaLocation":776},{"text":951,"config":952},"What's new",{"href":598,"dataGaName":599,"dataGaLocation":776},{"text":533,"config":954},{"href":535,"dataGaName":536,"dataGaLocation":776},{"text":552,"config":956},{"href":554,"dataGaName":555,"dataGaLocation":776},{"text":560,"config":958},{"href":562,"dataGaName":563,"dataGaLocation":776},{"text":565,"config":960},{"href":567,"dataGaName":568,"dataGaLocation":776},{"text":570,"config":962},{"href":572,"dataGaName":573,"dataGaLocation":776},{"text":575,"config":964},{"href":577,"dataGaName":578,"dataGaLocation":776},{"text":580,"config":966},{"href":582,"dataGaName":583,"dataGaLocation":776},{"text":585,"config":968},{"href":587,"dataGaName":588,"dataGaLocation":776},{"title":601,"links":970},[971,973,975,977,979,981,985,990,992,994,996],{"text":609,"config":972},{"href":611,"dataGaName":603,"dataGaLocation":776},{"text":614,"config":974},{"href":616,"dataGaName":617,"dataGaLocation":776},{"text":622,"config":976},{"href":624,"dataGaName":625,"dataGaLocation":776},{"text":627,"config":978},{"href":629,"dataGaName":630,"dataGaLocation":776},{"text":632,"config":980},{"href":634,"dataGaName":635,"dataGaLocation":776},{"text":982,"config":983},"Sustainability",{"href":984,"dataGaName":982,"dataGaLocation":776},"/sustainability/",{"text":986,"config":987},"Diversity, inclusion and belonging (DIB)",{"href":988,"dataGaName":989,"dataGaLocation":776},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":637,"config":991},{"href":639,"dataGaName":640,"dataGaLocation":776},{"text":647,"config":993},{"href":649,"dataGaName":650,"dataGaLocation":776},{"text":652,"config":995},{"href":654,"dataGaName":655,"dataGaLocation":776},{"text":997,"config":998},"Modern Slavery Transparency Statement",{"href":999,"dataGaName":1000,"dataGaLocation":776},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1002},[1003,1006,1009],{"text":1004,"config":1005},"Terms",{"href":828,"dataGaName":829,"dataGaLocation":776},{"text":1007,"config":1008},"Cookies",{"dataGaName":838,"dataGaLocation":776,"id":839,"isOneTrustButton":318},{"text":1010,"config":1011},"Privacy",{"href":833,"dataGaName":834,"dataGaLocation":776},[1013],{"id":1014,"title":7,"body":314,"config":1015,"content":1017,"description":314,"extension":1021,"meta":1022,"navigation":318,"path":1023,"seo":1024,"stem":1025,"__hash__":1026},"blogAuthors/en-us/blog/authors/christian-nnachi.yml",{"template":1016},"BlogAuthor",{"name":7,"config":1018},{"headshot":1019,"ctfId":1020},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665343/Blog/Author%20Headshots/christian_nnachi_headshot.png","6pE7HjtzzpRhBFVdwTFjEX","yml",{},"/en-us/blog/authors/christian-nnachi",{},"en-us/blog/authors/christian-nnachi","0I-xT3i0chs_gMxbjPKRIEplK9QNJZg31UNGB9_dzlw",[1028,1036,1044],{"title":1029,"description":1030,"heroImage":1031,"category":310,"date":1032,"authors":1033,"slug":1035,"externalUrl":314},"Consolidate your GitLab stack with Gitaly on Kubernetes","Discover how to install Gitaly on Kubernetes, which is now generally available.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756500636/wmey6kqzzuhirk88w2de.png","2026-05-07",[1034],"Olivier Campeau","gitaly-on-kubernetes-generally-available",{"title":1037,"description":1038,"heroImage":1039,"category":310,"date":1040,"authors":1041,"slug":1043,"externalUrl":314},"Teaching software development the easy way using GitLab","Learn how University of Washington lecturer Stephen G. Dame uses GitLab for Education to manage student assignments, distribute course materials, and provide inline code feedback at scale.\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659537/Blog/Hero%20Images/display-article-image-0679-1800x945-fy26.png","2026-04-29",[1042],"Rod Burns","teaching-software-development-the-easy-way-using-gitlab",{"title":1045,"description":1046,"heroImage":1047,"category":310,"date":1048,"authors":1049,"slug":1051,"externalUrl":314},"AI is reshaping DevSecOps: Attend GitLab Transcend to see what’s next","AI-generated code is 34% of development work. Discover how to balance productivity gains with quality, reliability, and security.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1767982271/e9ogyosmuummq7j65zqg.png","2026-01-08",[1050],"Manav Khurana","ai-is-reshaping-devsecops-attend-gitlab-transcend-to-see-whats-next",{"promotions":1053},[1054,1068,1079,1091],{"id":1055,"categories":1056,"header":1058,"text":1059,"button":1060,"image":1065},"ai-modernization",[1057],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1061,"config":1062},"Get your AI maturity score",{"href":1063,"dataGaName":1064,"dataGaLocation":541},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1066},{"src":1067},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1069,"categories":1070,"header":1071,"text":1059,"button":1072,"image":1076},"devops-modernization",[327,310],"Are you just managing tools or shipping innovation?",{"text":1073,"config":1074},"Get your DevOps maturity score",{"href":1075,"dataGaName":1064,"dataGaLocation":541},"/assessments/devops-modernization-assessment/",{"config":1077},{"src":1078},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1080,"categories":1081,"header":1083,"text":1059,"button":1084,"image":1088},"security-modernization",[1082],"security","Are you trading speed for security?",{"text":1085,"config":1086},"Get your security maturity score",{"href":1087,"dataGaName":1064,"dataGaLocation":541},"/assessments/security-modernization-assessment/",{"config":1089},{"src":1090},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1092,"paths":1093,"header":1096,"text":1097,"button":1098,"image":1103},"github-azure-migration",[1094,1095],"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":1099,"config":1100},"See how GitLab compares to GitHub",{"href":1101,"dataGaName":1102,"dataGaLocation":541},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1104},{"src":1078},{"header":1106,"blurb":1107,"button":1108,"secondaryButton":1113},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1109,"config":1110},"Get your free trial",{"href":1111,"dataGaName":342,"dataGaLocation":1112},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":814,"config":1114},{"href":666,"dataGaName":347,"dataGaLocation":1112},1786803757995]