[{"data":1,"prerenderedAt":760},["ShallowReactive",2],{"/en-us/blog/how-to-keep-up-with-ci-cd-best-practices":3,"navigation-en-us":37,"banner-en-us":465,"footer-en-us":482,"Itzik Gan Baruch":726,"next-steps-en-us":739,"footer-source-/en-us/blog/how-to-keep-up-with-ci-cd-best-practices/":754},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":27,"_id":30,"_type":31,"title":32,"_source":33,"_file":34,"_stem":35,"_extension":36},"/en-us/blog/how-to-keep-up-with-ci-cd-best-practices","blog",false,"",{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},"How to keep up with CI/CD best practices","In this post, we look at continuous integration/continuous delivery (CI/CD), how to implement some best practices, and why it is important.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756989645/fojzxakmfdea6jfqjkrl.png","https://about.gitlab.com/blog/how-to-keep-up-with-ci-cd-best-practices","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to keep up with CI/CD best practices\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan baruch\"}],\n        \"datePublished\": \"2025-09-20\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"updatedDate":20,"body":21,"category":22,"tags":23},[18],"Itzik Gan Baruch","2022-02-03","2025-09-29","\nContinuous integration and continuous delivery (CI/CD) are at the heart of any successful DevSecOps practice. Teams wanting to achieve modern software development must keep up with [CI/CD](https://about.gitlab.com/topics/ci-cd/) best practices. Here's what you need to know to make sure your team is on the right track.\n\n## What is CI/CD?\nIt's a tech process, it's a mindset, it's a series of steps... CI/CD is all of those things. Put simply, continuous integration (CI) enables DevSecOps teams to streamline code development using automation. CI simplifies software builds and source code integration, enables version control, and promotes greater collaboration via automation. Where CI leaves off, continuous delivery (CD) kicks in with automated testing and deployment. Not only does CD reduce the amount of hands-on time ops pros need to spend on delivery and deployment, it also enables teams to drastically reduce the number of tools required to manage the lifecycle. By integrating security scanning and compliance checks early in the pipeline, CI/CD enables a shift-left security approach that identifies and resolves issues before they reach production.\n\n## What are the best practices for CI/CD?\nIf you want to be successful with CI/CD, make continuous integration, delivery, and deployment your mantra as they are the cornerstones of software development practices. The goal of DevSecOps is to get software to users more quickly than traditional methods, and these development practices will help make that happen.\nHere are the most essential practices, ranked by importance:\n1. **Use a unified DevSecOps platform:** Consolidate your CI/CD tools into a single platform to reduce maintenance overhead, minimize context switching, and improve collaboration. Fewer tools mean less integration complexity and better user experience across development, security, and operations teams.\n2. **Automate everything:** Keep tweaking the CI/CD pipeline to ensure the \"continuous automation\" state is achieved. This includes automated testing, security scanning, deployment, and infrastructure provisioning.\n3. **Fail fast:** On the CI side, developers committing code need to know as quickly as possible if there are issues so they can roll the code back and fix it while it's fresh in their minds. The idea of \"fail fast\" helps reduce developer context switching too, which makes for happier DevSecOps professionals.\n4. **Commit frequently:** The more regular the code commits, the more benefit DevSecOps teams will see. Small, frequent changes are easier to review, test, and deploy safely.\n5. **Shift left on security:** CI/CD offers a good opportunity to integrate security scanning, vulnerability assessments, and compliance checks earlier in the process.\n6. **Leverage AI for pipeline troubleshooting:** Use AI-powered tools to automatically diagnose pipeline failures, identify root causes, and suggest fixes, reducing resolution time from hours to minutes.\n7. **Use feature flags/toggles:** Decouple deployment from release by using feature flags. This allows you to deploy code to production without exposing new features to users, enabling safer rollouts and instant rollbacks.\n8. **Monitor everything:** Implement comprehensive observability including application metrics, logs, and business KPIs. Set up alerts for both technical and business-critical thresholds.\n9. **Maintain pipeline as code:** Store your CI/CD pipeline configuration in version control alongside your application code. This ensures pipeline changes are tracked, reviewed, and can be rolled back.\n10. **Enable feedback loops:** Make sure there's an easy way for the entire team to receive (and contribute to) feedback. This includes monitoring, alerting, post-deployment validation, and continuous improvement processes.\n    \n## Continuous delivery best practices\nContinuous delivery/deployment feels like it deserves its own deep dive into best practices because CI often steals most of the headlines. Here are essential CD best practices:\n- **Start with your current setup:** Don't wait for a perfect platform. Begin by identifying bottlenecks in your existing deployment process and automate the most painful manual steps first.\n- **Embrace deployment strategies:** Implement progressive delivery techniques like [**blue-green deployments**](https://docs.gitlab.com/ci/environments/incremental_rollouts/#blue-green-deployment), [**canary releases**](https://docs.gitlab.com/user/project/canary_deployments/), or [**feature flags**](https://docs.gitlab.com/operations/feature_flags/) to reduce risk and enable safe rollbacks.\n- **Maintain environment parity:** Ensure development, staging, and production environments are as similar as possible. Use infrastructure as code to eliminate configuration drift.\n- **Automate deployment validation:** Build automated smoke tests and health checks that verify deployments immediately after release. Failed validations should trigger automatic rollbacks.\n- **Implement comprehensive monitoring:** Monitor both technical metrics (response times and error rates) and business KPIs (user engagement and conversion rates) to catch issues early.\n- **Practice zero-downtime deployments:** Design your applications and deployment process to handle updates without service interruption, using techniques like rolling updates or load balancer switches.\n- **Keep rollbacks simple:** Ensure you can quickly revert to the previous version. Test your rollback process regularly and make it a one-click operation when possible.\n- **Separate deployment from release:** Use feature flags to deploy code without immediately exposing new functionality to users, allowing for safer testing in production.\n## How to optimize the CI/CD pipeline\nA CI/CD pipeline is the automated series of steps that takes code from development to production. The typical pipeline includes: **build**, **test**, **security scan**, **deploy**, and **monitor**. While these steps can be done manually, automation is what makes CI/CD truly valuable. If it's time to optimize your CI/CD pipeline, consider these performance enhancements:\n### Optimize pipeline performance\n- Implement [build caching](https://docs.gitlab.com/ci/caching/) to avoid rebuilding unchanged components.\n- Use [conditional job](https://docs.gitlab.com/ci/jobs/job_rules/#rules-examples) execution to skip unnecessary steps when code hasn't changed\n- Optimize Docker images with multi-stage builds and smaller base images.\n### Enhance pipeline visibility\n- Add pipeline duration tracking to identify slow stages.\n- Implement detailed logging and artifact collection for troubleshooting.\n- Leverage [pipeline dashboards](https://docs.gitlab.com/user/operations_dashboard/) showing success rates and performance trends.\n### Optimize resource efficiency\n- Right-size your CI runners based on actual resource consumption.\n- Use spot instances or [auto-scaling](https://docs.gitlab.com/runner/runner_autoscale/) for cost-effective compute resources.\n- Clean up temporary resources and artifacts after pipeline completion.\n### Scale for team growth\n- Use [pipeline components](https://docs.gitlab.com/ci/components/) for consistency across projects.\n- Use dynamic environments that spin up and tear down automatically.\n- Set up [pipeline approval](https://docs.gitlab.com/ci/environments/deployment_approvals/) workflows for production deployments.\n## CI/CD deployment strategy\nRemember that CI/CD is about getting a software application into the hands of a customer that is better and done quicker than before. Organizations that adopt CI/CD find their productivity improves significantly. The trick is coming up with a deployment strategy that works for the individual organization. \nHere are some strategies to help make a deployment successful:\n- **Commit small changes:** Deploy small, incremental changes frequently rather than large releases. Small changes are easier to test, review, and roll back if issues arise, reducing deployment risk.\n- **Start small and scale:** Begin with less critical applications to build confidence and refine processes before tackling mission-critical systems\n- **Implement automated rollbacks:** Define clear criteria for automatic rollbacks based on error rates, performance metrics, or health checks\n- **Practice deployment rehearsals:** Regularly test your deployment process in staging environments that mirror production\n- **Establish deployment windows:** Schedule deployments during low-traffic periods initially, then move toward continuous deployment as confidence grows\n- **Monitor deployment impact:** Track both technical metrics (response time, error rates) and business metrics (user engagement, conversion rates) after each deployment\n## How to measure the success of CI/CD\nDevSecOps teams can't know how well their CI/CD practices are going unless they measure them. Metrics play an important role in improving system performance and helping to identify where value can be added. Here are the essential metrics to employ:\n### The four DORA metrics\nModern teams rely on the [DORA framework](https://docs.gitlab.com/user/analytics/dora_metrics/), which identifies four key metrics that correlate strongly with organizational performance:\n### Deployment frequency\nHow often your team successfully releases code to production. Elite performers deploy multiple times per day, while high performers deploy daily to weekly. This metric indicates your team's ability to deliver value and respond to market demands.\n### Lead time for changes\nTime from code commit to production deployment. Elite performers achieve lead times under one day, high performers range from one day to one week. If commits take weeks to reach production, your pipeline needs optimization.\n### Change failure rate\nPercentage of deployments causing production failures requiring hotfixes or rollbacks. Elite performers maintain up to 15% failure rates, high performers see 16%-30%. High failure rates indicate quality problems in your testing and deployment practices.\n### Mean time to recovery\nHow quickly your team restores service after deployment failures. Elite performers recover in under one hour, high performers in under one day. Fast recovery requires robust monitoring and automated rollback capabilities.\n### Additional CI/CD metrics\nBeyond the core DORA metrics, teams often track these operational indicators:\n### Infrastructure costs\nCloud-native CI/CD can result in significant expenses if not managed properly. Efficient practices that reduce build times and optimize resource usage directly impact operational costs.\n### Team retention\nHappy developers stick around. When teams collaborate effectively on CI/CD practices, retention follows. Declining retention rates can signal problems with tooling or deployment workflows that developers may hesitate to voice directly.\n### Business impact of CI/CD metrics\nThese technical metrics directly translate to business outcomes:\n- Faster deployment frequency reduces time-to-market and improves customer responsiveness. This represents the **speed of innovation and market responsiveness**.\n- Shorter lead times enable quicker feature delivery and bug fixes, enhancing customer satisfaction. This measures the **time from idea to customer value**.\n- Lower change failure rates reduce support costs and minimize customer impact from production issues. This indicates **quality and customer experience reliability**.\n- Improved mean time to recovery protects revenue during outages and maintains service reliability. This reflects **business continuity and risk mitigation capability**.\n### Competitive advantage\n\n The [DORA research program](https://cloud.google.com/blog/products/ai-machine-learning/announcing-the-2025-dora-report) has found that high-performing organizations consistently demonstrate better business outcomes across multiple dimensions. \n\n> **Teams with strong CI/CD metrics report improved productivity, better customer satisfaction, and enhanced ability to compete in fast-moving markets**.\n## What are the benefits of following CI/CD best practices?\nWhen best practices are followed, the benefits of CI/CD are felt most importantly by your customers, and then throughout your organization. Here are the key benefits:\n- **Customers get features and fixes faster.** CI/CD enables rapid delivery of new functionality and bug fixes, directly improving the user experience and keeping customers satisfied with continuous improvements.\n- **Higher quality, more reliable software.** Automated testing and gradual rollouts mean fewer bugs reach production, resulting in more stable applications that customers can depend on.\n- **Faster response to customer feedback.** Short development cycles allow teams to quickly implement customer requests and address issues, showing customers their input is valued and acted upon rapidly.\n- **Better uptime and performance.** Automated monitoring and quick rollback capabilities mean customer-facing issues are resolved faster, minimizing service disruptions.\n- **More innovative features.** When developers spend less time on manual processes and firefighting, they can focus on building features that truly add customer value and differentiate your product.\n- **Improved customer support.** Faster deployment cycles mean customer-reported issues can be fixed and deployed quickly, rather than waiting for the next major release cycle.\n\nThe internal benefits naturally follow: happier developers, better collaboration between teams, reduced operational overhead, and easier talent retention — all of which ultimately contribute to delivering better customer experiences.\n    \n## How can I implement CI/CD in my organization?\nBefore any software is implemented, it's key to determine what the business drivers are and the same goes for adopting CI/CD. All development stakeholders should be involved early on in the implementation process. Developers should provide input since they will be the main users of a product. \n\nMake sure to do your due diligence when researching software that enables CI/CD, and ask about free trials. \n\nWhile it may seem counterintuitive since CI/CD is about accelerating the pace of software delivery in an automated fashion, start the process with a mentality of slow and steady. The boost in efficiency will decline if bugs are steadily moving into the finished application. \n\nIt's important to have consistency in the integration process. Perform unit tests, trigger releases manually and track metrics. Then determine what can and should be automated.\n> Get started today with CI/CD by signing up for [a free trial of GitLab Ultimate with Duo Enterprise](https://about.gitlab.com/free-trial/devsecops/).\n","insights",[24,25,26],"CI","CD","DevSecOps",{"slug":28,"featured":6,"template":29},"how-to-keep-up-with-ci-cd-best-practices","BlogPost","content:en-us:blog:how-to-keep-up-with-ci-cd-best-practices.yml","yaml","How To Keep Up With Ci Cd Best Practices","content","en-us/blog/how-to-keep-up-with-ci-cd-best-practices.yml","en-us/blog/how-to-keep-up-with-ci-cd-best-practices","yml",{"_path":38,"_dir":39,"_draft":6,"_partial":6,"_locale":7,"data":40,"_id":461,"_type":31,"title":462,"_source":33,"_file":463,"_stem":464,"_extension":36},"/shared/en-us/main-navigation","en-us",{"logo":41,"freeTrial":46,"sales":51,"login":56,"items":61,"search":392,"minimal":423,"duo":442,"pricingDeployment":451},{"config":42},{"href":43,"dataGaName":44,"dataGaLocation":45},"/","gitlab logo","header",{"text":47,"config":48},"Get free trial",{"href":49,"dataGaName":50,"dataGaLocation":45},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":52,"config":53},"Talk to sales",{"href":54,"dataGaName":55,"dataGaLocation":45},"/sales/","sales",{"text":57,"config":58},"Sign in",{"href":59,"dataGaName":60,"dataGaLocation":45},"https://gitlab.com/users/sign_in/","sign in",[62,106,203,208,313,373],{"text":63,"config":64,"cards":66,"footer":89},"Platform",{"dataNavLevelOne":65},"platform",[67,73,81],{"title":63,"description":68,"link":69},"The most comprehensive AI-powered DevSecOps Platform",{"text":70,"config":71},"Explore our Platform",{"href":72,"dataGaName":65,"dataGaLocation":45},"/platform/",{"title":74,"description":75,"link":76},"GitLab Duo (AI)","Build software faster with AI at every stage of development",{"text":77,"config":78},"Meet GitLab Duo",{"href":79,"dataGaName":80,"dataGaLocation":45},"/gitlab-duo/","gitlab duo ai",{"title":82,"description":83,"link":84},"Why GitLab","10 reasons why Enterprises choose GitLab",{"text":85,"config":86},"Learn more",{"href":87,"dataGaName":88,"dataGaLocation":45},"/why-gitlab/","why gitlab",{"title":90,"items":91},"Get started with",[92,97,102],{"text":93,"config":94},"Platform Engineering",{"href":95,"dataGaName":96,"dataGaLocation":45},"/solutions/platform-engineering/","platform engineering",{"text":98,"config":99},"Developer Experience",{"href":100,"dataGaName":101,"dataGaLocation":45},"/developer-experience/","Developer experience",{"text":103,"config":104},"MLOps",{"href":105,"dataGaName":103,"dataGaLocation":45},"/topics/devops/the-role-of-ai-in-devops/",{"text":107,"left":108,"config":109,"link":111,"lists":115,"footer":185},"Product",true,{"dataNavLevelOne":110},"solutions",{"text":112,"config":113},"View all Solutions",{"href":114,"dataGaName":110,"dataGaLocation":45},"/solutions/",[116,141,164],{"title":117,"description":118,"link":119,"items":124},"Automation","CI/CD and automation to accelerate deployment",{"config":120},{"icon":121,"href":122,"dataGaName":123,"dataGaLocation":45},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[125,129,133,137],{"text":126,"config":127},"CI/CD",{"href":128,"dataGaLocation":45,"dataGaName":126},"/solutions/continuous-integration/",{"text":130,"config":131},"AI-Assisted Development",{"href":79,"dataGaLocation":45,"dataGaName":132},"AI assisted development",{"text":134,"config":135},"Source Code Management",{"href":136,"dataGaLocation":45,"dataGaName":134},"/solutions/source-code-management/",{"text":138,"config":139},"Automated Software Delivery",{"href":122,"dataGaLocation":45,"dataGaName":140},"Automated software delivery",{"title":142,"description":143,"link":144,"items":149},"Security","Deliver code faster without compromising security",{"config":145},{"href":146,"dataGaName":147,"dataGaLocation":45,"icon":148},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[150,154,159],{"text":151,"config":152},"Application Security Testing",{"href":146,"dataGaName":153,"dataGaLocation":45},"Application security testing",{"text":155,"config":156},"Software Supply Chain Security",{"href":157,"dataGaLocation":45,"dataGaName":158},"/solutions/supply-chain/","Software supply chain security",{"text":160,"config":161},"Software Compliance",{"href":162,"dataGaName":163,"dataGaLocation":45},"/solutions/software-compliance/","software compliance",{"title":165,"link":166,"items":171},"Measurement",{"config":167},{"icon":168,"href":169,"dataGaName":170,"dataGaLocation":45},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[172,176,180],{"text":173,"config":174},"Visibility & Measurement",{"href":169,"dataGaLocation":45,"dataGaName":175},"Visibility and Measurement",{"text":177,"config":178},"Value Stream Management",{"href":179,"dataGaLocation":45,"dataGaName":177},"/solutions/value-stream-management/",{"text":181,"config":182},"Analytics & Insights",{"href":183,"dataGaLocation":45,"dataGaName":184},"/solutions/analytics-and-insights/","Analytics and insights",{"title":186,"items":187},"GitLab for",[188,193,198],{"text":189,"config":190},"Enterprise",{"href":191,"dataGaLocation":45,"dataGaName":192},"/enterprise/","enterprise",{"text":194,"config":195},"Small Business",{"href":196,"dataGaLocation":45,"dataGaName":197},"/small-business/","small business",{"text":199,"config":200},"Public Sector",{"href":201,"dataGaLocation":45,"dataGaName":202},"/solutions/public-sector/","public sector",{"text":204,"config":205},"Pricing",{"href":206,"dataGaName":207,"dataGaLocation":45,"dataNavLevelOne":207},"/pricing/","pricing",{"text":209,"config":210,"link":212,"lists":216,"feature":300},"Resources",{"dataNavLevelOne":211},"resources",{"text":213,"config":214},"View all resources",{"href":215,"dataGaName":211,"dataGaLocation":45},"/resources/",[217,250,272],{"title":218,"items":219},"Getting started",[220,225,230,235,240,245],{"text":221,"config":222},"Install",{"href":223,"dataGaName":224,"dataGaLocation":45},"/install/","install",{"text":226,"config":227},"Quick start guides",{"href":228,"dataGaName":229,"dataGaLocation":45},"/get-started/","quick setup checklists",{"text":231,"config":232},"Learn",{"href":233,"dataGaLocation":45,"dataGaName":234},"https://university.gitlab.com/","learn",{"text":236,"config":237},"Product documentation",{"href":238,"dataGaName":239,"dataGaLocation":45},"https://docs.gitlab.com/","product documentation",{"text":241,"config":242},"Best practice videos",{"href":243,"dataGaName":244,"dataGaLocation":45},"/getting-started-videos/","best practice videos",{"text":246,"config":247},"Integrations",{"href":248,"dataGaName":249,"dataGaLocation":45},"/integrations/","integrations",{"title":251,"items":252},"Discover",[253,258,262,267],{"text":254,"config":255},"Customer success stories",{"href":256,"dataGaName":257,"dataGaLocation":45},"/customers/","customer success stories",{"text":259,"config":260},"Blog",{"href":261,"dataGaName":5,"dataGaLocation":45},"/blog/",{"text":263,"config":264},"Remote",{"href":265,"dataGaName":266,"dataGaLocation":45},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":268,"config":269},"TeamOps",{"href":270,"dataGaName":271,"dataGaLocation":45},"/teamops/","teamops",{"title":273,"items":274},"Connect",[275,280,285,290,295],{"text":276,"config":277},"GitLab Services",{"href":278,"dataGaName":279,"dataGaLocation":45},"/services/","services",{"text":281,"config":282},"Community",{"href":283,"dataGaName":284,"dataGaLocation":45},"/community/","community",{"text":286,"config":287},"Forum",{"href":288,"dataGaName":289,"dataGaLocation":45},"https://forum.gitlab.com/","forum",{"text":291,"config":292},"Events",{"href":293,"dataGaName":294,"dataGaLocation":45},"/events/","events",{"text":296,"config":297},"Partners",{"href":298,"dataGaName":299,"dataGaLocation":45},"/partners/","partners",{"backgroundColor":301,"textColor":302,"text":303,"image":304,"link":308},"#2f2a6b","#fff","Insights for the future of software development",{"altText":305,"config":306},"the source promo card",{"src":307},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":309,"config":310},"Read the latest",{"href":311,"dataGaName":312,"dataGaLocation":45},"/the-source/","the source",{"text":314,"config":315,"lists":317},"Company",{"dataNavLevelOne":316},"company",[318],{"items":319},[320,325,331,333,338,343,348,353,358,363,368],{"text":321,"config":322},"About",{"href":323,"dataGaName":324,"dataGaLocation":45},"/company/","about",{"text":326,"config":327,"footerGa":330},"Jobs",{"href":328,"dataGaName":329,"dataGaLocation":45},"/jobs/","jobs",{"dataGaName":329},{"text":291,"config":332},{"href":293,"dataGaName":294,"dataGaLocation":45},{"text":334,"config":335},"Leadership",{"href":336,"dataGaName":337,"dataGaLocation":45},"/company/team/e-group/","leadership",{"text":339,"config":340},"Team",{"href":341,"dataGaName":342,"dataGaLocation":45},"/company/team/","team",{"text":344,"config":345},"Handbook",{"href":346,"dataGaName":347,"dataGaLocation":45},"https://handbook.gitlab.com/","handbook",{"text":349,"config":350},"Investor relations",{"href":351,"dataGaName":352,"dataGaLocation":45},"https://ir.gitlab.com/","investor relations",{"text":354,"config":355},"Trust Center",{"href":356,"dataGaName":357,"dataGaLocation":45},"/security/","trust center",{"text":359,"config":360},"AI Transparency Center",{"href":361,"dataGaName":362,"dataGaLocation":45},"/ai-transparency-center/","ai transparency center",{"text":364,"config":365},"Newsletter",{"href":366,"dataGaName":367,"dataGaLocation":45},"/company/contact/","newsletter",{"text":369,"config":370},"Press",{"href":371,"dataGaName":372,"dataGaLocation":45},"/press/","press",{"text":374,"config":375,"lists":376},"Contact us",{"dataNavLevelOne":316},[377],{"items":378},[379,382,387],{"text":52,"config":380},{"href":54,"dataGaName":381,"dataGaLocation":45},"talk to sales",{"text":383,"config":384},"Support portal",{"href":385,"dataGaName":386,"dataGaLocation":45},"https://support.gitlab.com","support portal",{"text":388,"config":389},"Customer portal",{"href":390,"dataGaName":391,"dataGaLocation":45},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":393,"login":394,"suggestions":401},"Close",{"text":395,"link":396},"To search repositories and projects, login to",{"text":397,"config":398},"gitlab.com",{"href":59,"dataGaName":399,"dataGaLocation":400},"search login","search",{"text":402,"default":403},"Suggestions",[404,406,410,412,416,420],{"text":74,"config":405},{"href":79,"dataGaName":74,"dataGaLocation":400},{"text":407,"config":408},"Code Suggestions (AI)",{"href":409,"dataGaName":407,"dataGaLocation":400},"/solutions/code-suggestions/",{"text":126,"config":411},{"href":128,"dataGaName":126,"dataGaLocation":400},{"text":413,"config":414},"GitLab on AWS",{"href":415,"dataGaName":413,"dataGaLocation":400},"/partners/technology-partners/aws/",{"text":417,"config":418},"GitLab on Google Cloud",{"href":419,"dataGaName":417,"dataGaLocation":400},"/partners/technology-partners/google-cloud-platform/",{"text":421,"config":422},"Why GitLab?",{"href":87,"dataGaName":421,"dataGaLocation":400},{"freeTrial":424,"mobileIcon":429,"desktopIcon":434,"secondaryButton":437},{"text":425,"config":426},"Start free trial",{"href":427,"dataGaName":50,"dataGaLocation":428},"https://gitlab.com/-/trials/new/","nav",{"altText":430,"config":431},"Gitlab Icon",{"src":432,"dataGaName":433,"dataGaLocation":428},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":430,"config":435},{"src":436,"dataGaName":433,"dataGaLocation":428},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":438,"config":439},"Get Started",{"href":440,"dataGaName":441,"dataGaLocation":428},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":443,"mobileIcon":447,"desktopIcon":449},{"text":444,"config":445},"Learn more about GitLab Duo",{"href":79,"dataGaName":446,"dataGaLocation":428},"gitlab duo",{"altText":430,"config":448},{"src":432,"dataGaName":433,"dataGaLocation":428},{"altText":430,"config":450},{"src":436,"dataGaName":433,"dataGaLocation":428},{"freeTrial":452,"mobileIcon":457,"desktopIcon":459},{"text":453,"config":454},"Back to pricing",{"href":206,"dataGaName":455,"dataGaLocation":428,"icon":456},"back to pricing","GoBack",{"altText":430,"config":458},{"src":432,"dataGaName":433,"dataGaLocation":428},{"altText":430,"config":460},{"src":436,"dataGaName":433,"dataGaLocation":428},"content:shared:en-us:main-navigation.yml","Main Navigation","shared/en-us/main-navigation.yml","shared/en-us/main-navigation",{"_path":466,"_dir":39,"_draft":6,"_partial":6,"_locale":7,"title":467,"button":468,"image":473,"config":477,"_id":479,"_type":31,"_source":33,"_file":480,"_stem":481,"_extension":36},"/shared/en-us/banner","is now in public beta!",{"text":469,"config":470},"Try the Beta",{"href":471,"dataGaName":472,"dataGaLocation":45},"/gitlab-duo/agent-platform/","duo banner",{"altText":474,"config":475},"GitLab Duo Agent Platform",{"src":476},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1753720689/somrf9zaunk0xlt7ne4x.svg",{"layout":478},"release","content:shared:en-us:banner.yml","shared/en-us/banner.yml","shared/en-us/banner",{"_path":483,"_dir":39,"_draft":6,"_partial":6,"_locale":7,"data":484,"_id":722,"_type":31,"title":723,"_source":33,"_file":724,"_stem":725,"_extension":36},"/shared/en-us/main-footer",{"text":485,"source":486,"edit":492,"contribute":497,"config":502,"items":507,"minimal":714},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":487,"config":488},"View page source",{"href":489,"dataGaName":490,"dataGaLocation":491},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":493,"config":494},"Edit this page",{"href":495,"dataGaName":496,"dataGaLocation":491},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":498,"config":499},"Please contribute",{"href":500,"dataGaName":501,"dataGaLocation":491},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":503,"facebook":504,"youtube":505,"linkedin":506},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[508,555,607,651,680],{"title":204,"links":509,"subMenu":524},[510,514,519],{"text":511,"config":512},"View plans",{"href":206,"dataGaName":513,"dataGaLocation":491},"view plans",{"text":515,"config":516},"Why Premium?",{"href":517,"dataGaName":518,"dataGaLocation":491},"/pricing/premium/","why premium",{"text":520,"config":521},"Why Ultimate?",{"href":522,"dataGaName":523,"dataGaLocation":491},"/pricing/ultimate/","why ultimate",[525],{"title":526,"links":527},"Contact Us",[528,531,533,535,540,545,550],{"text":529,"config":530},"Contact sales",{"href":54,"dataGaName":55,"dataGaLocation":491},{"text":383,"config":532},{"href":385,"dataGaName":386,"dataGaLocation":491},{"text":388,"config":534},{"href":390,"dataGaName":391,"dataGaLocation":491},{"text":536,"config":537},"Status",{"href":538,"dataGaName":539,"dataGaLocation":491},"https://status.gitlab.com/","status",{"text":541,"config":542},"Terms of use",{"href":543,"dataGaName":544,"dataGaLocation":491},"/terms/","terms of use",{"text":546,"config":547},"Privacy statement",{"href":548,"dataGaName":549,"dataGaLocation":491},"/privacy/","privacy statement",{"text":551,"config":552},"Cookie preferences",{"dataGaName":553,"dataGaLocation":491,"id":554,"isOneTrustButton":108},"cookie preferences","ot-sdk-btn",{"title":107,"links":556,"subMenu":564},[557,561],{"text":558,"config":559},"DevSecOps platform",{"href":72,"dataGaName":560,"dataGaLocation":491},"devsecops platform",{"text":130,"config":562},{"href":79,"dataGaName":563,"dataGaLocation":491},"ai-assisted development",[565],{"title":566,"links":567},"Topics",[568,573,578,583,588,592,597,602],{"text":569,"config":570},"CICD",{"href":571,"dataGaName":572,"dataGaLocation":491},"/topics/ci-cd/","cicd",{"text":574,"config":575},"GitOps",{"href":576,"dataGaName":577,"dataGaLocation":491},"/topics/gitops/","gitops",{"text":579,"config":580},"DevOps",{"href":581,"dataGaName":582,"dataGaLocation":491},"/topics/devops/","devops",{"text":584,"config":585},"Version Control",{"href":586,"dataGaName":587,"dataGaLocation":491},"/topics/version-control/","version control",{"text":26,"config":589},{"href":590,"dataGaName":591,"dataGaLocation":491},"/topics/devsecops/","devsecops",{"text":593,"config":594},"Cloud Native",{"href":595,"dataGaName":596,"dataGaLocation":491},"/topics/cloud-native/","cloud native",{"text":598,"config":599},"AI for Coding",{"href":600,"dataGaName":601,"dataGaLocation":491},"/topics/devops/ai-for-coding/","ai for coding",{"text":603,"config":604},"Agentic AI",{"href":605,"dataGaName":606,"dataGaLocation":491},"/topics/agentic-ai/","agentic ai",{"title":608,"links":609},"Solutions",[610,612,614,619,623,626,630,633,635,638,641,646],{"text":151,"config":611},{"href":146,"dataGaName":151,"dataGaLocation":491},{"text":140,"config":613},{"href":122,"dataGaName":123,"dataGaLocation":491},{"text":615,"config":616},"Agile development",{"href":617,"dataGaName":618,"dataGaLocation":491},"/solutions/agile-delivery/","agile delivery",{"text":620,"config":621},"SCM",{"href":136,"dataGaName":622,"dataGaLocation":491},"source code management",{"text":569,"config":624},{"href":128,"dataGaName":625,"dataGaLocation":491},"continuous integration & delivery",{"text":627,"config":628},"Value stream management",{"href":179,"dataGaName":629,"dataGaLocation":491},"value stream management",{"text":574,"config":631},{"href":632,"dataGaName":577,"dataGaLocation":491},"/solutions/gitops/",{"text":189,"config":634},{"href":191,"dataGaName":192,"dataGaLocation":491},{"text":636,"config":637},"Small business",{"href":196,"dataGaName":197,"dataGaLocation":491},{"text":639,"config":640},"Public sector",{"href":201,"dataGaName":202,"dataGaLocation":491},{"text":642,"config":643},"Education",{"href":644,"dataGaName":645,"dataGaLocation":491},"/solutions/education/","education",{"text":647,"config":648},"Financial services",{"href":649,"dataGaName":650,"dataGaLocation":491},"/solutions/finance/","financial services",{"title":209,"links":652},[653,655,657,659,662,664,666,668,670,672,674,676,678],{"text":221,"config":654},{"href":223,"dataGaName":224,"dataGaLocation":491},{"text":226,"config":656},{"href":228,"dataGaName":229,"dataGaLocation":491},{"text":231,"config":658},{"href":233,"dataGaName":234,"dataGaLocation":491},{"text":236,"config":660},{"href":238,"dataGaName":661,"dataGaLocation":491},"docs",{"text":259,"config":663},{"href":261,"dataGaName":5,"dataGaLocation":491},{"text":254,"config":665},{"href":256,"dataGaName":257,"dataGaLocation":491},{"text":263,"config":667},{"href":265,"dataGaName":266,"dataGaLocation":491},{"text":276,"config":669},{"href":278,"dataGaName":279,"dataGaLocation":491},{"text":268,"config":671},{"href":270,"dataGaName":271,"dataGaLocation":491},{"text":281,"config":673},{"href":283,"dataGaName":284,"dataGaLocation":491},{"text":286,"config":675},{"href":288,"dataGaName":289,"dataGaLocation":491},{"text":291,"config":677},{"href":293,"dataGaName":294,"dataGaLocation":491},{"text":296,"config":679},{"href":298,"dataGaName":299,"dataGaLocation":491},{"title":314,"links":681},[682,684,686,688,690,692,694,698,703,705,707,709],{"text":321,"config":683},{"href":323,"dataGaName":316,"dataGaLocation":491},{"text":326,"config":685},{"href":328,"dataGaName":329,"dataGaLocation":491},{"text":334,"config":687},{"href":336,"dataGaName":337,"dataGaLocation":491},{"text":339,"config":689},{"href":341,"dataGaName":342,"dataGaLocation":491},{"text":344,"config":691},{"href":346,"dataGaName":347,"dataGaLocation":491},{"text":349,"config":693},{"href":351,"dataGaName":352,"dataGaLocation":491},{"text":695,"config":696},"Sustainability",{"href":697,"dataGaName":695,"dataGaLocation":491},"/sustainability/",{"text":699,"config":700},"Diversity, inclusion and belonging (DIB)",{"href":701,"dataGaName":702,"dataGaLocation":491},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":354,"config":704},{"href":356,"dataGaName":357,"dataGaLocation":491},{"text":364,"config":706},{"href":366,"dataGaName":367,"dataGaLocation":491},{"text":369,"config":708},{"href":371,"dataGaName":372,"dataGaLocation":491},{"text":710,"config":711},"Modern Slavery Transparency Statement",{"href":712,"dataGaName":713,"dataGaLocation":491},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":715},[716,718,720],{"text":541,"config":717},{"href":543,"dataGaName":544,"dataGaLocation":491},{"text":546,"config":719},{"href":548,"dataGaName":549,"dataGaLocation":491},{"text":551,"config":721},{"dataGaName":553,"dataGaLocation":491,"id":554,"isOneTrustButton":108},"content:shared:en-us:main-footer.yml","Main Footer","shared/en-us/main-footer.yml","shared/en-us/main-footer",[727],{"_path":728,"_dir":729,"_draft":6,"_partial":6,"_locale":7,"content":730,"config":734,"_id":736,"_type":31,"title":18,"_source":33,"_file":737,"_stem":738,"_extension":36},"/en-us/blog/authors/itzik-gan-baruch","authors",{"name":18,"config":731},{"headshot":732,"ctfId":733},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658921/Blog/Author%20Headshots/iganbaruch-headshot.jpg","iganbaruch",{"template":735},"BlogAuthor","content:en-us:blog:authors:itzik-gan-baruch.yml","en-us/blog/authors/itzik-gan-baruch.yml","en-us/blog/authors/itzik-gan-baruch",{"_path":740,"_dir":39,"_draft":6,"_partial":6,"_locale":7,"header":741,"eyebrow":742,"blurb":743,"button":744,"secondaryButton":748,"_id":750,"_type":31,"title":751,"_source":33,"_file":752,"_stem":753,"_extension":36},"/shared/en-us/next-steps","Start shipping better software faster","50%+ of the Fortune 100 trust GitLab","See what your team can do with the intelligent\n\n\nDevSecOps platform.\n",{"text":47,"config":745},{"href":746,"dataGaName":50,"dataGaLocation":747},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":52,"config":749},{"href":54,"dataGaName":55,"dataGaLocation":747},"content:shared:en-us:next-steps.yml","Next Steps","shared/en-us/next-steps.yml","shared/en-us/next-steps",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":755,"content":756,"config":759,"_id":30,"_type":31,"title":32,"_source":33,"_file":34,"_stem":35,"_extension":36},{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},{"title":9,"description":10,"authors":757,"heroImage":11,"date":19,"updatedDate":20,"body":21,"category":22,"tags":758},[18],[24,25,26],{"slug":28,"featured":6,"template":29},1761814427307]