[{"data":1,"prerenderedAt":1159},["ShallowReactive",2],{"/blog/introducing-ci-components":3,"navigation-en-us":372,"banner-en-us":799,"footer-en-us":809,"blog-post-authors-en-us-Dov Hershkovitch":1054,"blog-related-posts-en-us-introducing-ci-components":1069,"blog-promotions-en-us":1095,"next-steps-en-us":1149},{"id":4,"title":5,"authors":6,"body":8,"category":351,"date":352,"description":353,"extension":354,"externalUrl":355,"faq":355,"featured":356,"heroImage":357,"meta":358,"navigation":180,"path":359,"seo":360,"slug":364,"stem":365,"tags":366,"template":370,"updatedDate":355,"__hash__":371},"blogPosts/en-us/blog/introducing-ci-components.md","Introducing CI/CD components and how to use them in GitLab",[7],"Dov Hershkovitch",{"type":9,"value":10,"toc":341},"minimark",[11,28,33,42,45,74,77,81,84,87,126,133,155,158,167,181,185,199,221,224,228,231,235,250,258,262,276,280,283,286,323,337],[12,13,14,15,21,22,27],"p",{},"Welcome to the third blog in our series on GitLab's CI/CD components! If you haven't already, we encourage you to read \"",[16,17,20],"a",{"href":18,"rel":19},"https://about.gitlab.com/blog/how-to-build-reusable-ci-templates/",[],"How to build reusable CI/CD templates","\" and \"",[16,23,26],{"href":24,"rel":25},"https://about.gitlab.com/blog/use-inputs-in-includable-files/",[],"Use inputs in includable files","\" to gain a comprehensive understanding of these exciting new capabilities. In this blog post, we'll dive in and explore the power of GitLab's CI/CD components in revolutionizing CI/CD workflows. We'll also provide a glimpse into the future of GitLab's CI/CD ecosystem, including the upcoming release of the CI/CD catalog, a framework containing a collection of these components. With these moves, GitLab is taking a significant step towards streamlining pipeline configurations and enhancing reusability.",[29,30,32],"h3",{"id":31},"cicd-components","CI/CD components",[12,34,35,36,41],{},"In ",[16,37,40],{"href":38,"rel":39},"https://docs.gitlab.com/releases/16/gitlab-16-1-released/",[],"GitLab 16.1",", an exciting experimental feature called CI/CD components was introduced. CI/CD components are reusable, single-purpose building blocks that abstract away pipeline configuration units.",[12,43,44],{},"By leveraging the power of CI/CD components, users can unlock several key benefits:",[46,47,48,56,62,68],"ol",{},[49,50,51,55],"li",{},[52,53,54],"strong",{},"Reusability and abstraction."," CI/CD components allow pipelines to be assembled using abstractions instead of defining all the details in one place. With components encapsulating implementation details, developers can focus on composing pipelines using pre-built, reusable blocks. This approach promotes modularity, code reusability, and simplifies pipeline maintenance.",[49,57,58,61],{},[52,59,60],{},"Flexibility with input."," Components support input parameters, enabling customization based on pipeline contexts, making them adaptable and reusable across various pipeline stages. Developers gain the ability to build a dynamic CI/CD catalog that is tagged and versioned, providing better control and compatibility. Developers can reference specific component versions, ensuring stability and reproducibility. By leveraging version tags, teams can maintain consistency in their pipelines while easily upgrading to newer versions when desired.",[49,63,64,67],{},[52,65,66],{},"High-quality standards through testing."," Testing components as part of the development workflow to ensure quality maintains high standards is strongly recommended. By incorporating testing into the CI/CD process, developers can verify the reliability and functionality of components, identify and fix issues early on, and deliver more robust and dependable pipelines.",[49,69,70,73],{},[52,71,72],{},"The CI/CD catalog."," A centralized repository of components, the CI/CD catalog is set to be released soon, and will act as a treasure trove of components curated to cover a wide range of use cases. This centralized repository offers developers a one-stop shop for discovering, integrating, and sharing components. Teams can benefit from a growing catalog of pre-built, quality-tested components, saving time and effort in configuring their pipelines.",[12,75,76],{},"In the previous blog posts, we discussed the main benefits for the first two points (which are also available with CI/CD templates), but now let's dig deeper into components and how they could revolutionize the way you construct your pipelines.",[29,78,80],{"id":79},"testing-a-cicd-component","Testing a CI/CD component",[12,82,83],{},"As software development continues to evolve, ensuring the reliability and quality of code components becomes increasingly vital.",[12,85,86],{},"One of the main benefits of using components is the ability to thoroughly test components before software is officially released, enabling a more robust and streamlined development process. In our context, a released component is versioned and will follow a structured syntax, allowing for seamless integration within pipelines.",[88,89,94],"pre",{"className":90,"code":91,"language":92,"meta":93,"style":93},"language-yaml shiki shiki-themes github-light","include:\n  - components: /path/to/project@\u003Cversion>\n\n","yaml","",[95,96,97,110],"code",{"__ignoreMap":93},[98,99,102,106],"span",{"class":100,"line":101},"line",1,[98,103,105],{"class":104},"shJU0","include",[98,107,109],{"class":108},"sgsFI",":\n",[98,111,113,116,119,122],{"class":100,"line":112},2,[98,114,115],{"class":108},"  - ",[98,117,118],{"class":104},"components",[98,120,121],{"class":108},": ",[98,123,125],{"class":124},"sYBdl","/path/to/project@\u003Cversion>\n",[12,127,128,129,132],{},"One of the unique benefits of our CI/CD components is the flexibility they offer. DevSecOps teams can opt in for an \"unofficial\" release by appending ",[95,130,131],{},"@commit_SHA",", allowing them to experiment and iterate on their code before making it an official release.",[88,134,136],{"className":90,"code":135,"language":92,"meta":93,"style":93},"include:\n  - components: /path/to/project@\u003Ccommit_SHA>\n\n",[95,137,138,144],{"__ignoreMap":93},[98,139,140,142],{"class":100,"line":101},[98,141,105],{"class":104},[98,143,109],{"class":108},[98,145,146,148,150,152],{"class":100,"line":112},[98,147,115],{"class":108},[98,149,118],{"class":104},[98,151,121],{"class":108},[98,153,154],{"class":124},"/path/to/project@\u003Ccommit_SHA>\n",[12,156,157],{},"To make a component an official release, users must tag it, essentially creating a versioned snapshot. The tagged release will then be made available in our comprehensive CI/CD catalog (launching soon), providing users with easy access to a range of thoroughly tested and approved components. To ensure the stability and reliability of your CI/CD components, it is crucial to thoroughly test them. DevSecOps teams can leverage the power of our pipeline by utilizing the commit_SHA identifier to run comprehensive tests. If the pipeline successfully passes all tests, they can proceed to tag the component, signifying its readiness for release.",[12,159,160,161,166],{},"By configuring a release job based on the tagged version, DevSecOps teams can confidently incorporate the official component into their projects, knowing that it has undergone testing and validation. To learn more about how to test components, you can check out our ",[16,162,165],{"href":163,"rel":164},"https://docs.gitlab.com/ci/components/#test-a-component",[],"documentation"," or watch this walkthrough video:",[168,169,172],"figure",{"className":170},[171],"video_container",[173,174],"iframe",{"width":175,"height":176,"src":177,"title":93,"frameBorder":178,"allow":179,"allowFullScreen":180},1870,937,"https://www.youtube.com/embed/Vw8-ce8LNBs","0","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",true,[29,182,184],{"id":183},"versioning-and-tagging","Versioning and tagging",[12,186,187,188,191,192,194,195,198],{},"As mentioned in the previous section, DevSecOps teams can leverage the ",[95,189,190],{},"@version"," or the ",[95,193,131],{}," to refer to a component in their pipeline. Another option to refer to a component is by leveraging the ",[95,196,197],{},"@latest",".",[88,200,202],{"className":90,"code":201,"language":92,"meta":93,"style":93},"include:\n  - components: /path/to/project@latest\n\n",[95,203,204,210],{"__ignoreMap":93},[98,205,206,208],{"class":100,"line":101},[98,207,105],{"class":104},[98,209,109],{"class":108},[98,211,212,214,216,218],{"class":100,"line":112},[98,213,115],{"class":108},[98,215,118],{"class":104},[98,217,121],{"class":108},[98,219,220],{"class":124},"/path/to/project@latest\n",[12,222,223],{},"This will use the latest official (tagged) available components. When used in a pipeline in combination with reliable tests, you can guarantee that your components used in a pipeline will always be tested and verified.",[29,225,227],{"id":226},"on-the-horizon-cicd-catalog","On the horizon: CI/CD catalog",[12,229,230],{},"One of the biggest benefits of using components is yet to be seen and will be available with the launch of our CI/CD catalog. The catalog will allow users to search, find, and understand how to use components that are available across their organization, setting a framework for them to collaborate on pipeline constructs so that they can be evolved and improved over time. Stay tuned!",[29,232,234],{"id":233},"dogfooding-components","Dogfooding components",[12,236,237,238,243,244,249],{},"At GitLab, we believe in ",[16,239,242],{"href":240,"rel":241},"https://handbook.gitlab.com/handbook/values/#dogfooding",[],"dogfooding our own product",". To demonstrate the power and practicality of CI/CD components, we have converted some of our GitLab templates into components and asked our internal team to use them and provide additional feedback. By doing so, we are actively using and testing components in real-world scenarios, uncovering insights, and continuously improving their functionality. In this ",[16,245,248],{"href":246,"rel":247},"https://gitlab.com/gitlab-components",[],"group",", we’ve converted Code Quality, Container Scanning and SAST templates into CI/CD components and asked internal teams to use them.",[12,251,252,253,198],{},"Through this dogfooding process, we are not only validating the effectiveness of CI/CD components but also gaining invaluable experience and feedback to refine and enhance our offering. It's a testament to our commitment to providing practical and reliable solutions for our users. You can view the ongoing discussions between the internal teams in this ",[16,254,257],{"href":255,"rel":256},"https://gitlab.com/gitlab-org/gitlab/-/issues/390656",[],"issue",[29,259,261],{"id":260},"call-for-action","Call for action",[12,263,264,265,270,271,198],{},"The CI/CD component catalog is currently in an experimental phase, so we advise against using it in a production environment at this time. There is a high probability of changes being made to it. We are currently working on reorganizing the folder structure of the components to prepare for the launch of the CI/CD catalog. You can stay updated on our progress by following our ",[16,266,269],{"href":267,"rel":268},"https://gitlab.com/groups/gitlab-org/-/epics/10728",[],"epic",", or let us know what you think in this dedicated ",[16,272,275],{"href":273,"rel":274},"https://gitlab.com/gitlab-org/gitlab/-/issues/407556",[],"feedback issue",[29,277,279],{"id":278},"whats-next","What's next",[12,281,282],{},"GitLab's CI/CD component catalog and its accompanying CI/CD components feature are ushering in a new era of streamlined pipeline configurations. By embracing reusability, abstraction, input flexibility, versioning, and a centralized catalog, developers can build efficient, adaptable, and maintainable CI/CD workflows. The CI/CD component catalog empowers teams to accelerate their software delivery, collaborate effectively, and leverage the full potential of GitLab's CI/CD capabilities.",[12,284,285],{},"Stay tuned for the launch of the CI/CD catalog, where you'll gain access to an extensive collection of components, unlocking new possibilities for your pipelines. GitLab remains committed to empowering developers with cutting-edge tools, driving innovation, and simplifying the complexities of modern software development.",[287,288,289,292],"blockquote",{},[12,290,291],{},"Learn more about the CI/CD Catalog and components:",[293,294,295,302,309,316],"ul",{},[49,296,297],{},[16,298,301],{"href":299,"rel":300},"https://about.gitlab.com/blog/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/",[],"CI/CD Catalog goes GA: No more building pipelines from scratch",[49,303,304],{},[16,305,308],{"href":306,"rel":307},"https://about.gitlab.com/blog/a-ci-component-builders-journey/",[],"A CI/CD component builder's journey",[49,310,311],{},[16,312,315],{"href":313,"rel":314},"https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog/",[],"FAQ: GitLab CI/CD Catalog",[49,317,318],{},[16,319,322],{"href":320,"rel":321},"https://docs.gitlab.com/ci/components/",[],"Documentation: CI/CD components and CI/CD Catalog",[12,324,325,326,331,332,198],{},"Cover image by ",[16,327,330],{"href":328,"rel":329},"https://www.pexels.com/photo/assorted-color-bricks-1148496/",[],"Alexander Grey"," on ",[16,333,336],{"href":334,"rel":335},"https://www.pexels.com",[],"Pexels",[338,339,340],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .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":93,"searchDepth":112,"depth":112,"links":342},[343,345,346,347,348,349,350],{"id":31,"depth":344,"text":32},3,{"id":79,"depth":344,"text":80},{"id":183,"depth":344,"text":184},{"id":226,"depth":344,"text":227},{"id":233,"depth":344,"text":234},{"id":260,"depth":344,"text":261},{"id":278,"depth":344,"text":279},"engineering","2023-07-10","Learn the main benefits for using CI/CD components in your CI/CD pipelines and how to achieve them.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667676/Blog/Hero%20Images/buildingblocks.jpg",{},"/en-us/blog/introducing-ci-components",{"title":5,"description":353,"ogTitle":5,"ogDescription":353,"noIndex":356,"ogImage":357,"ogUrl":361,"ogSiteName":362,"ogType":363,"canonicalUrls":361},"https://about.gitlab.com/blog/introducing-ci-components","https://about.gitlab.com","article","introducing-ci-components","en-us/blog/introducing-ci-components",[367,368,369],"tutorial","CI/CD","features","BlogPost","lah3auglQuiMytQfEM9_LDQ4Eu6OAfqdmnl9YMg3oos",{"logo":373,"freeTrial":378,"sales":383,"login":388,"items":393,"search":719,"minimal":750,"duo":769,"switchNav":778,"pricingDeployment":789},{"config":374},{"href":375,"dataGaName":376,"dataGaLocation":377},"/","gitlab logo","header",{"text":379,"config":380},"Get free trial",{"href":381,"dataGaName":382,"dataGaLocation":377},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":384,"config":385},"Request a demo",{"href":386,"dataGaName":387,"dataGaLocation":377},"/sales/?contact-topic=request-demo","sales",{"text":389,"config":390},"Sign in",{"href":391,"dataGaName":392,"dataGaLocation":377},"https://gitlab.com/users/sign_in/","sign in",[394,423,522,527,641,697],{"text":395,"config":396,"menu":398},"Platform",{"dataNavLevelOne":397},"platform",{"type":399,"columns":400},"cards",[401,407,415],{"title":395,"description":402,"link":403},"The intelligent orchestration platform for DevSecOps",{"text":404,"config":405},"Explore our Platform",{"href":406,"dataGaName":397,"dataGaLocation":377},"/platform/",{"title":408,"description":409,"link":410},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":411,"config":412},"Meet GitLab Duo",{"href":413,"dataGaName":414,"dataGaLocation":377},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":416,"description":417,"link":418},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":419,"config":420},"Learn more",{"href":421,"dataGaName":422,"dataGaLocation":377},"/why-gitlab/","why gitlab",{"text":424,"left":180,"config":425,"menu":427},"Product",{"dataNavLevelOne":426},"solutions",{"type":428,"link":429,"columns":433,"feature":501},"lists",{"text":430,"config":431},"View all Solutions",{"href":432,"dataGaName":426,"dataGaLocation":377},"/solutions/",[434,457,480],{"title":435,"description":436,"link":437,"items":442},"Automation","CI/CD and automation to accelerate deployment",{"config":438},{"icon":439,"href":440,"dataGaName":441,"dataGaLocation":377},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[443,446,449,453],{"text":368,"config":444},{"href":445,"dataGaLocation":377,"dataGaName":368},"/solutions/continuous-integration/",{"text":408,"config":447},{"href":413,"dataGaLocation":377,"dataGaName":448},"gitlab duo agent platform - product menu",{"text":450,"config":451},"Source Code Management",{"href":452,"dataGaLocation":377,"dataGaName":450},"/solutions/source-code-management/",{"text":454,"config":455},"Automated Software Delivery",{"href":440,"dataGaLocation":377,"dataGaName":456},"Automated software delivery",{"title":458,"description":459,"link":460,"items":465},"Security","Deliver code faster without compromising security",{"config":461},{"href":462,"dataGaName":463,"dataGaLocation":377,"icon":464},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[466,470,475],{"text":467,"config":468},"Application Security Testing",{"href":462,"dataGaName":469,"dataGaLocation":377},"Application security testing",{"text":471,"config":472},"Software Supply Chain Security",{"href":473,"dataGaLocation":377,"dataGaName":474},"/solutions/supply-chain/","Software supply chain security",{"text":476,"config":477},"Software Compliance",{"href":478,"dataGaName":479,"dataGaLocation":377},"/solutions/software-compliance/","software compliance",{"title":481,"link":482,"items":487},"Measurement",{"config":483},{"icon":484,"href":485,"dataGaName":486,"dataGaLocation":377},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[488,492,496],{"text":489,"config":490},"Visibility & Measurement",{"href":485,"dataGaLocation":377,"dataGaName":491},"Visibility and Measurement",{"text":493,"config":494},"Value Stream Management",{"href":495,"dataGaLocation":377,"dataGaName":493},"/solutions/value-stream-management/",{"text":497,"config":498},"Analytics & Insights",{"href":499,"dataGaLocation":377,"dataGaName":500},"/solutions/analytics-and-insights/","Analytics and insights",{"title":502,"type":428,"items":503},"GitLab for",[504,510,516],{"text":505,"config":506},"Enterprise",{"icon":507,"href":508,"dataGaLocation":377,"dataGaName":509},"Building","/enterprise/","enterprise",{"text":511,"config":512},"Small Business",{"icon":513,"href":514,"dataGaLocation":377,"dataGaName":515},"Work","/small-business/","small business",{"text":517,"config":518},"Public Sector",{"icon":519,"href":520,"dataGaLocation":377,"dataGaName":521},"Organization","/solutions/public-sector/","public sector",{"text":523,"config":524},"Pricing",{"href":525,"dataGaName":526,"dataGaLocation":377,"dataNavLevelOne":526},"/pricing/","pricing",{"text":528,"config":529,"menu":531},"Resources",{"dataNavLevelOne":530},"resources",{"type":428,"link":532,"columns":536,"feature":630},{"text":533,"config":534},"View all resources",{"href":535,"dataGaName":530,"dataGaLocation":377},"/resources/",[537,570,597],{"title":538,"items":539},"Getting started",[540,545,550,555,560,565],{"text":541,"config":542},"Install",{"href":543,"dataGaName":544,"dataGaLocation":377},"/install/","install",{"text":546,"config":547},"Quick start guides",{"href":548,"dataGaName":549,"dataGaLocation":377},"/get-started/","quick setup checklists",{"text":551,"config":552},"Learn",{"href":553,"dataGaLocation":377,"dataGaName":554},"https://university.gitlab.com/","learn",{"text":556,"config":557},"Product documentation",{"href":558,"dataGaName":559,"dataGaLocation":377},"https://docs.gitlab.com/","product documentation",{"text":561,"config":562},"Best practice videos",{"href":563,"dataGaName":564,"dataGaLocation":377},"/getting-started-videos/","best practice videos",{"text":566,"config":567},"Integrations",{"href":568,"dataGaName":569,"dataGaLocation":377},"/integrations/","integrations",{"title":571,"items":572},"Discover",[573,578,583,588,592],{"text":574,"config":575},"Customer success stories",{"href":576,"dataGaName":577,"dataGaLocation":377},"/customers/","customer success stories",{"text":579,"config":580},"Blog",{"href":581,"dataGaName":582,"dataGaLocation":377},"/blog/","blog",{"text":584,"config":585},"Demo Hub",{"href":586,"dataGaName":587,"dataGaLocation":377},"/demo-hub/","demo hub",{"text":589,"config":590},"The Source",{"href":591,"dataGaName":582,"dataGaLocation":377},"/the-source/",{"text":593,"config":594},"Remote",{"href":595,"dataGaName":596,"dataGaLocation":377},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":598,"items":599},"Connect",[600,605,610,615,620,625],{"text":601,"config":602},"GitLab Services",{"href":603,"dataGaName":604,"dataGaLocation":377},"/services/","services",{"text":606,"config":607},"Contribute",{"href":608,"dataGaName":609,"dataGaLocation":377},"https://contributors.gitlab.com","contribute",{"text":611,"config":612},"Community",{"href":613,"dataGaName":614,"dataGaLocation":377},"/community/","community",{"text":616,"config":617},"Forum",{"href":618,"dataGaName":619,"dataGaLocation":377},"https://forum.gitlab.com/","forum",{"text":621,"config":622},"Events",{"href":623,"dataGaName":624,"dataGaLocation":377},"/events/","events",{"text":626,"config":627},"Partners",{"href":628,"dataGaName":629,"dataGaLocation":377},"/partners/","partners",{"config":631,"title":634,"text":635,"link":636},{"background":632,"textColor":633},"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":637,"config":638},"Read the latest",{"href":639,"dataGaName":640,"dataGaLocation":377},"/whats-new/","whats new",{"text":642,"config":643,"menu":645},"Company",{"dataNavLevelOne":644},"company",{"type":428,"columns":646},[647],{"items":648},[649,654,660,662,667,672,677,682,687,692],{"text":650,"config":651},"About",{"href":652,"dataGaName":653,"dataGaLocation":377},"/company/","about",{"text":655,"config":656,"footerGa":659},"Jobs",{"href":657,"dataGaName":658,"dataGaLocation":377},"/jobs/","jobs",{"dataGaName":658},{"text":621,"config":661},{"href":623,"dataGaName":624,"dataGaLocation":377},{"text":663,"config":664},"Leadership",{"href":665,"dataGaName":666,"dataGaLocation":377},"/company/team/e-group/","leadership",{"text":668,"config":669},"Handbook",{"href":670,"dataGaName":671,"dataGaLocation":377},"https://handbook.gitlab.com/","handbook",{"text":673,"config":674},"Investor relations",{"href":675,"dataGaName":676,"dataGaLocation":377},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":678,"config":679},"Trust Center",{"href":680,"dataGaName":681,"dataGaLocation":377},"/security/","trust center",{"text":683,"config":684},"AI Transparency Center",{"href":685,"dataGaName":686,"dataGaLocation":377},"/ai-transparency-center/","ai transparency center",{"text":688,"config":689},"Newsletter",{"href":690,"dataGaName":691,"dataGaLocation":377},"/company/contact/#contact-forms","newsletter",{"text":693,"config":694},"Press",{"href":695,"dataGaName":696,"dataGaLocation":377},"/press/","press",{"text":698,"config":699,"menu":700},"Contact us",{"dataNavLevelOne":644},{"type":428,"columns":701},[702],{"items":703},[704,709,714],{"text":705,"config":706},"Talk to sales",{"href":707,"dataGaName":708,"dataGaLocation":377},"/sales/","talk to sales",{"text":710,"config":711},"Support portal",{"href":712,"dataGaName":713,"dataGaLocation":377},"https://support.gitlab.com/hc/en-us","support portal",{"text":715,"config":716},"Customer portal",{"href":717,"dataGaName":718,"dataGaLocation":377},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":720,"login":721,"suggestions":728},"Close",{"text":722,"link":723},"To search repositories and projects, login to",{"text":724,"config":725},"gitlab.com",{"href":391,"dataGaName":726,"dataGaLocation":727},"search login","search",{"text":729,"default":730},"Suggestions",[731,733,737,739,743,747],{"text":408,"config":732},{"href":413,"dataGaName":408,"dataGaLocation":727},{"text":734,"config":735},"Code Suggestions (AI)",{"href":736,"dataGaName":734,"dataGaLocation":727},"/solutions/code-suggestions/",{"text":368,"config":738},{"href":445,"dataGaName":368,"dataGaLocation":727},{"text":740,"config":741},"GitLab on AWS",{"href":742,"dataGaName":740,"dataGaLocation":727},"/partners/technology-partners/aws/",{"text":744,"config":745},"GitLab on Google Cloud",{"href":746,"dataGaName":744,"dataGaLocation":727},"/partners/technology-partners/google-cloud-platform/",{"text":748,"config":749},"Why GitLab?",{"href":421,"dataGaName":748,"dataGaLocation":727},{"freeTrial":751,"mobileIcon":756,"desktopIcon":761,"secondaryButton":764},{"text":752,"config":753},"Start free trial",{"href":754,"dataGaName":382,"dataGaLocation":755},"https://gitlab.com/-/trials/new/","nav",{"altText":757,"config":758},"Gitlab Icon",{"src":759,"dataGaName":760,"dataGaLocation":755},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":757,"config":762},{"src":763,"dataGaName":760,"dataGaLocation":755},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":765,"config":766},"Get Started",{"href":767,"dataGaName":768,"dataGaLocation":755},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":770,"mobileIcon":774,"desktopIcon":776},{"text":771,"config":772},"Learn more about GitLab Duo",{"href":413,"dataGaName":773,"dataGaLocation":755},"gitlab duo",{"altText":757,"config":775},{"src":759,"dataGaName":760,"dataGaLocation":755},{"altText":757,"config":777},{"src":763,"dataGaName":760,"dataGaLocation":755},{"button":779,"mobileIcon":784,"desktopIcon":786},{"text":780,"config":781},"/switch",{"href":782,"dataGaName":783,"dataGaLocation":755},"#contact","switch",{"altText":757,"config":785},{"src":759,"dataGaName":760,"dataGaLocation":755},{"altText":757,"config":787},{"src":788,"dataGaName":760,"dataGaLocation":755},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":790,"mobileIcon":795,"desktopIcon":797},{"text":791,"config":792},"Back to pricing",{"href":525,"dataGaName":793,"dataGaLocation":755,"icon":794},"back to pricing","GoBack",{"altText":757,"config":796},{"src":759,"dataGaName":760,"dataGaLocation":755},{"altText":757,"config":798},{"src":763,"dataGaName":760,"dataGaLocation":755},{"title":800,"titleMobile":801,"button":802,"config":807},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":419,"config":803},{"href":804,"dataGaName":805,"dataGaLocation":806},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":808,"disabled":356},"release",{"data":810},{"text":811,"source":812,"edit":818,"contribute":823,"config":828,"items":833,"minimal":1043},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":813,"config":814},"View page source",{"href":815,"dataGaName":816,"dataGaLocation":817},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":819,"config":820},"Edit this page",{"href":821,"dataGaName":822,"dataGaLocation":817},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":824,"config":825},"Please contribute",{"href":826,"dataGaName":827,"dataGaLocation":817},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":829,"facebook":830,"youtube":831,"linkedin":832},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[834,881,935,979,1011],{"title":523,"links":835,"subMenu":850},[836,840,845],{"text":837,"config":838},"View plans",{"href":525,"dataGaName":839,"dataGaLocation":817},"view plans",{"text":841,"config":842},"Why Premium?",{"href":843,"dataGaName":844,"dataGaLocation":817},"/pricing/premium/","why premium",{"text":846,"config":847},"Why Ultimate?",{"href":848,"dataGaName":849,"dataGaLocation":817},"/pricing/ultimate/","why ultimate",[851],{"title":852,"links":853},"Contact Us",[854,857,859,861,866,871,876],{"text":855,"config":856},"Contact sales",{"href":707,"dataGaName":387,"dataGaLocation":817},{"text":710,"config":858},{"href":712,"dataGaName":713,"dataGaLocation":817},{"text":715,"config":860},{"href":717,"dataGaName":718,"dataGaLocation":817},{"text":862,"config":863},"Status",{"href":864,"dataGaName":865,"dataGaLocation":817},"https://status.gitlab.com/","status",{"text":867,"config":868},"Terms of use",{"href":869,"dataGaName":870,"dataGaLocation":817},"/terms/","terms of use",{"text":872,"config":873},"Privacy statement",{"href":874,"dataGaName":875,"dataGaLocation":817},"/privacy/","privacy statement",{"text":877,"config":878},"Cookie preferences",{"dataGaName":879,"dataGaLocation":817,"id":880,"isOneTrustButton":180},"cookie preferences","ot-sdk-btn",{"title":424,"links":882,"subMenu":891},[883,887],{"text":884,"config":885},"DevSecOps platform",{"href":406,"dataGaName":886,"dataGaLocation":817},"devsecops platform",{"text":888,"config":889},"AI-Assisted Development",{"href":413,"dataGaName":890,"dataGaLocation":817},"ai-assisted development",[892],{"title":893,"links":894},"Topics",[895,900,905,910,915,920,925,930],{"text":896,"config":897},"CICD",{"href":898,"dataGaName":899,"dataGaLocation":817},"/topics/ci-cd/","cicd",{"text":901,"config":902},"GitOps",{"href":903,"dataGaName":904,"dataGaLocation":817},"/topics/gitops/","gitops",{"text":906,"config":907},"DevOps",{"href":908,"dataGaName":909,"dataGaLocation":817},"/topics/devops/","devops",{"text":911,"config":912},"Version Control",{"href":913,"dataGaName":914,"dataGaLocation":817},"/topics/version-control/","version control",{"text":916,"config":917},"DevSecOps",{"href":918,"dataGaName":919,"dataGaLocation":817},"/topics/devsecops/","devsecops",{"text":921,"config":922},"Cloud Native",{"href":923,"dataGaName":924,"dataGaLocation":817},"/topics/cloud-native/","cloud native",{"text":926,"config":927},"AI for Coding",{"href":928,"dataGaName":929,"dataGaLocation":817},"/topics/devops/ai-for-coding/","ai for coding",{"text":931,"config":932},"Agentic AI",{"href":933,"dataGaName":934,"dataGaLocation":817},"/topics/agentic-ai/","agentic ai",{"title":936,"links":937},"Solutions",[938,940,942,947,951,954,958,961,963,966,969,974],{"text":467,"config":939},{"href":462,"dataGaName":467,"dataGaLocation":817},{"text":456,"config":941},{"href":440,"dataGaName":441,"dataGaLocation":817},{"text":943,"config":944},"Agile development",{"href":945,"dataGaName":946,"dataGaLocation":817},"/solutions/agile-delivery/","agile delivery",{"text":948,"config":949},"SCM",{"href":452,"dataGaName":950,"dataGaLocation":817},"source code management",{"text":896,"config":952},{"href":445,"dataGaName":953,"dataGaLocation":817},"continuous integration & delivery",{"text":955,"config":956},"Value stream management",{"href":495,"dataGaName":957,"dataGaLocation":817},"value stream management",{"text":901,"config":959},{"href":960,"dataGaName":904,"dataGaLocation":817},"/solutions/gitops/",{"text":505,"config":962},{"href":508,"dataGaName":509,"dataGaLocation":817},{"text":964,"config":965},"Small business",{"href":514,"dataGaName":515,"dataGaLocation":817},{"text":967,"config":968},"Public sector",{"href":520,"dataGaName":521,"dataGaLocation":817},{"text":970,"config":971},"Education",{"href":972,"dataGaName":973,"dataGaLocation":817},"/solutions/education/","education",{"text":975,"config":976},"Financial services",{"href":977,"dataGaName":978,"dataGaLocation":817},"/solutions/finance/","financial services",{"title":528,"links":980},[981,983,985,987,990,992,995,997,999,1001,1003,1005,1007,1009],{"text":541,"config":982},{"href":543,"dataGaName":544,"dataGaLocation":817},{"text":546,"config":984},{"href":548,"dataGaName":549,"dataGaLocation":817},{"text":551,"config":986},{"href":553,"dataGaName":554,"dataGaLocation":817},{"text":556,"config":988},{"href":558,"dataGaName":989,"dataGaLocation":817},"docs",{"text":579,"config":991},{"href":581,"dataGaName":582,"dataGaLocation":817},{"text":993,"config":994},"What's new",{"href":639,"dataGaName":640,"dataGaLocation":817},{"text":574,"config":996},{"href":576,"dataGaName":577,"dataGaLocation":817},{"text":593,"config":998},{"href":595,"dataGaName":596,"dataGaLocation":817},{"text":601,"config":1000},{"href":603,"dataGaName":604,"dataGaLocation":817},{"text":606,"config":1002},{"href":608,"dataGaName":609,"dataGaLocation":817},{"text":611,"config":1004},{"href":613,"dataGaName":614,"dataGaLocation":817},{"text":616,"config":1006},{"href":618,"dataGaName":619,"dataGaLocation":817},{"text":621,"config":1008},{"href":623,"dataGaName":624,"dataGaLocation":817},{"text":626,"config":1010},{"href":628,"dataGaName":629,"dataGaLocation":817},{"title":642,"links":1012},[1013,1015,1017,1019,1021,1023,1027,1032,1034,1036,1038],{"text":650,"config":1014},{"href":652,"dataGaName":644,"dataGaLocation":817},{"text":655,"config":1016},{"href":657,"dataGaName":658,"dataGaLocation":817},{"text":663,"config":1018},{"href":665,"dataGaName":666,"dataGaLocation":817},{"text":668,"config":1020},{"href":670,"dataGaName":671,"dataGaLocation":817},{"text":673,"config":1022},{"href":675,"dataGaName":676,"dataGaLocation":817},{"text":1024,"config":1025},"Sustainability",{"href":1026,"dataGaName":1024,"dataGaLocation":817},"/sustainability/",{"text":1028,"config":1029},"Diversity, inclusion and belonging (DIB)",{"href":1030,"dataGaName":1031,"dataGaLocation":817},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":678,"config":1033},{"href":680,"dataGaName":681,"dataGaLocation":817},{"text":688,"config":1035},{"href":690,"dataGaName":691,"dataGaLocation":817},{"text":693,"config":1037},{"href":695,"dataGaName":696,"dataGaLocation":817},{"text":1039,"config":1040},"Modern Slavery Transparency Statement",{"href":1041,"dataGaName":1042,"dataGaLocation":817},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1044},[1045,1048,1051],{"text":1046,"config":1047},"Terms",{"href":869,"dataGaName":870,"dataGaLocation":817},{"text":1049,"config":1050},"Cookies",{"dataGaName":879,"dataGaLocation":817,"id":880,"isOneTrustButton":180},{"text":1052,"config":1053},"Privacy",{"href":874,"dataGaName":875,"dataGaLocation":817},[1055],{"id":1056,"title":7,"body":355,"config":1057,"content":1059,"description":355,"extension":1063,"meta":1064,"navigation":180,"path":1065,"seo":1066,"stem":1067,"__hash__":1068},"blogAuthors/en-us/blog/authors/dov-hershkovitch.yml",{"template":1058},"BlogAuthor",{"name":7,"config":1060},{"headshot":1061,"ctfId":1062},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665628/Blog/Author%20Headshots/dhershkovitch-headshot.png","dhershkovitch","yml",{},"/en-us/blog/authors/dov-hershkovitch",{},"en-us/blog/authors/dov-hershkovitch","Iz4JuWpp9w9MyL2i-FC6CmJS1rnfmg76IL873W1AcMU",[1070,1079,1087],{"title":1071,"description":1072,"heroImage":1073,"category":351,"date":1074,"authors":1075,"slug":1078,"externalUrl":355},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[1076,1077],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1080,"description":1081,"heroImage":1082,"category":351,"date":1083,"authors":1084,"slug":1086,"externalUrl":355},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[1085],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1088,"description":1089,"heroImage":1090,"category":351,"date":1091,"authors":1092,"slug":1094,"externalUrl":355},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[1093],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1096},[1097,1111,1123,1135],{"id":1098,"categories":1099,"header":1101,"text":1102,"button":1103,"image":1108},"ai-modernization",[1100],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1104,"config":1105},"Get your AI maturity score",{"href":1106,"dataGaName":1107,"dataGaLocation":582},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1109},{"src":1110},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1112,"categories":1113,"header":1115,"text":1102,"button":1116,"image":1120},"devops-modernization",[1114,919],"product","Are you just managing tools or shipping innovation?",{"text":1117,"config":1118},"Get your DevOps maturity score",{"href":1119,"dataGaName":1107,"dataGaLocation":582},"/assessments/devops-modernization-assessment/",{"config":1121},{"src":1122},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1124,"categories":1125,"header":1127,"text":1102,"button":1128,"image":1132},"security-modernization",[1126],"security","Are you trading speed for security?",{"text":1129,"config":1130},"Get your security maturity score",{"href":1131,"dataGaName":1107,"dataGaLocation":582},"/assessments/security-modernization-assessment/",{"config":1133},{"src":1134},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1136,"paths":1137,"header":1140,"text":1141,"button":1142,"image":1147},"github-azure-migration",[1138,1139],"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":1143,"config":1144},"See how GitLab compares to GitHub",{"href":1145,"dataGaName":1146,"dataGaLocation":582},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1148},{"src":1122},{"header":1150,"blurb":1151,"button":1152,"secondaryButton":1157},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1153,"config":1154},"Get your free trial",{"href":1155,"dataGaName":382,"dataGaLocation":1156},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":855,"config":1158},{"href":707,"dataGaName":387,"dataGaLocation":1156},1786803770678]