[{"data":1,"prerenderedAt":1240},["ShallowReactive",2],{"/blog/introducing-the-gitlab-ci-cd-catalog-beta":3,"navigation-en-us":454,"banner-en-us":881,"footer-en-us":891,"blog-post-authors-en-us-Itzik Gan Baruch":1135,"blog-related-posts-en-us-introducing-the-gitlab-ci-cd-catalog-beta":1150,"blog-promotions-en-us":1176,"next-steps-en-us":1230},{"id":4,"title":5,"authors":6,"body":8,"category":431,"date":432,"description":433,"extension":434,"externalUrl":435,"faq":435,"featured":436,"heroImage":437,"meta":438,"navigation":439,"path":440,"seo":441,"slug":445,"stem":446,"tags":447,"template":452,"updatedDate":435,"__hash__":453},"blogPosts/en-us/blog/introducing-the-gitlab-ci-cd-catalog-beta.md","Introducing the GitLab CI/CD Catalog Beta",[7],"Itzik Gan Baruch",{"type":9,"value":10,"toc":421},"minimark",[11,15,18,33,46,51,60,63,67,70,74,80,83,90,99,102,107,112,115,118,123,126,129,147,150,155,159,162,167,191,196,212,219,224,235,240,243,249,257,262,265,270,277,282,294,299,305,311,316,322,327,333,338,345,350,355,358,372,377,386,390,398,409],[12,13,14],"p",{},"DevSecOps is all about speed – achieving rapid progress in software development. To succeed in DevSecOps, organizations require a well-functioning CI/CD pipeline that teams can utilize to automate their development workflows.",[12,16,17],{},"However, crafting pipeline configurations with YAML can be intricate and challenging because YAML isn't a programming language, Developers may find themselves reinventing the wheel each time they try to create new configurations because they don't have visibility into existing configurations and work that others may have already done, resulting in inefficiency.",[12,19,20,26,27,32],{},[21,22,25],"a",{"href":23,"rel":24},"https://docs.gitlab.com/releases/16/gitlab-16-7-released/",[],"GitLab 16.7"," introduces the ",[21,28,31],{"href":29,"rel":30},"https://docs.gitlab.com/ci/components/#cicd-catalog",[],"CI/CD Catalog"," (Beta), with the goal of enhancing developer efficiency by addressing three main questions developers encounter when creating pipeline configurations:",[34,35,36,40,43],"ul",{},[37,38,39],"li",{},"Discoverability: Has someone already created a configuration for my task, and where can I find it?",[37,41,42],{},"Reusability: Once I find a suitable pipeline, how do I use it effectively?",[37,44,45],{},"Ease of contribution: I've created a useful configuration; how can I easily share it with the GitLab community?",[47,48,50],"h2",{"id":49},"what-is-the-gitlab-cicd-catalog","What is the GitLab CI/CD Catalog?",[12,52,53,54,59],{},"The CI/CD Catalog serves as a centralized hub for developers and organizations to share pre-existing ",[21,55,58],{"href":56,"rel":57},"https://docs.gitlab.com/ci/components/",[],"CI/CD components"," and to discover reusable configurations that others may have already developed. Every component published by users will be part of a public catalog accessible to all users, regardless of their organization or project.",[12,61,62],{},"This approach promotes cross-organization collaboration, allowing the entire GitLab community to benefit from the wealth of CI components available. It's a powerful step forward in sharing knowledge among GitLab users, enabling developers to harness the collective expertise of the platform.",[47,64,66],{"id":65},"easy-component-creation-and-publishing","Easy component creation and publishing",[12,68,69],{},"In addition to reusing components, developers can contribute to the GitLab CI/CD community by creating their own components and publishing them in the catalog. This ensures that others can benefit from their expertise and encourages collaboration across the platform.",[47,71,73],{"id":72},"how-to-discover-and-use-components","How to discover and use components",[12,75,76],{},[77,78,79],"strong",{},"1. Opening the CI/CD Component Catalog",[12,81,82],{},"Click on “Search or go to...”",[12,84,85],{},[86,87],"img",{"alt":88,"src":89},"component catalog","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750099406962.png",[12,91,92,93,98],{},"Open the catalog by navigating to “Explore > CI/CD Catalog” or visit this ",[21,94,97],{"href":95,"rel":96},"https://gitlab.com/explore/catalog",[],"catalog page",".",[12,100,101],{},"Upon accessing the catalog, you'll find a list of CI/CD components projects contributed by your team, organization, or the wider GitLab community.",[12,103,104],{},[86,105],{"alt":88,"src":106},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750099406963.png",[12,108,109],{},[77,110,111],{},"2. Browsing components",[12,113,114],{},"Navigate through the list of components in the CI/CD Catalog or use the Search bar to find components related to a specific topic.",[12,116,117],{},"Each component project contains one or multiple components. Opening a component project will display its documentation, providing details on all available components. This includes insights into how to use each component and understanding the expected input parameters.",[12,119,120],{},[77,121,122],{},"3. Include the selected components in your .gitlab-ci.yml",[12,124,125],{},"Now that you've explored the catalog and selected the desired CI/CD components, integrate them into your project's CI/CD pipeline.",[12,127,128],{},"Follow these steps to update your .gitlab-ci.yml file:",[130,131,132,135,138,141,144],"ol",{},[37,133,134],{},"Open the .gitlab-ci.yml file in your project for editing.",[37,136,137],{},"Use the include keyword to add the selected components to your CI configuration.",[37,139,140],{},"Ensure that the paths to the component YAML files are correct and specify the appropriate version for each component.",[37,142,143],{},"In case the components have input parameters, review the component’s documentation to understand which inputs are required, and add them to your CI configuration.",[37,145,146],{},"Save and commit your changes to the .gitlab-ci.yml file.",[12,148,149],{},"Here is an example of YAML code that demonstrates how to include a few components and use them with input parameters.",[12,151,152],{},[86,153],{"alt":88,"src":154},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2023-12-19_at_1.15.48_PM_aHR0cHM6_1750099406965.png",[47,156,158],{"id":157},"how-to-create-and-publish-components","How to create and publish components",[12,160,161],{},"Have you crafted a valuable configuration that you'd like to share and contribute to your team or the GitLab community? Here are the six steps to make it happen:",[12,163,164],{},[77,165,166],{},"Step 1: Create a new project and set it as a component project",[130,168,169,176,179,182,185,188],{},[37,170,171,172,175],{},"On the left sidebar, select ",[77,173,174],{},"Search or go to"," and find your project.",[37,177,178],{},"On the left sidebar, select Settings > General.",[37,180,181],{},"Expand Visibility, project features, permissions.",[37,183,184],{},"Scroll down to CI/CD Catalog resource and select the toggle to set the project as a CI/CD Catalog resource.",[37,186,187],{},"Ensure that your project description is filled out; this information will be showcased in the catalog, providing users with insights into the purpose and functionality of your components.",[37,189,190],{},"Create a .gitlab-ci.yml file in the root of the repository. You will need this file to test and release the components as described in steps 4 and 5 below. Note: This step only needs to be done once for any project that contains components.",[12,192,193],{},[77,194,195],{},"Step 2: Create the components",[130,197,198,201,204],{},[37,199,200],{},"Create a /templates folder in the root directory of the project.",[37,202,203],{},"In this templates directory, create one YAML template file (ending in .yml) for each component.",[37,205,206,207,211],{},"The template can optionally include a description of input arguments using the ",[208,209,210],"code",{},"spec"," keyword if the component requires input parameters, and the definition of jobs, that may include references to values using the interpolation format $[[ inputs.input-name ]]. Ensure you use three dash lines between the spec header, and job definitions.",[12,213,214,215,218],{},"Here is an example of a ",[208,216,217],{},"deploy.yml"," template that gets input parameters:",[12,220,221],{},[86,222],{"alt":88,"src":223},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2023-12-19_at_11.34.20_AM_aHR0cHM6_1750099406966.png",[12,225,226,227,230,231,234],{},"In this template, we've defined two input parameters, ",[208,228,229],{},"stage"," and ",[208,232,233],{},"environment",", both with default values. In the content section, a job is defined that interpolates these input arguments.",[12,236,237],{},[77,238,239],{},"Step 3: Create components documentation",[12,241,242],{},"Create a README.md file in the root of the project, including information about the components. Explain the component's functionality, detail input parameters, and provide illustrative examples. This ensures clarity for component consumers on how to use them.",[12,244,245,246],{},"This is an example of component documentation:\n",[86,247],{"alt":88,"src":248},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750099406967.png",[12,250,251,252,256],{},"Additional information can be found in our ",[21,253,58],{"href":254,"rel":255},"https://docs.gitlab.com/ci/components/#components-repository",[]," documentation.",[12,258,259],{},[77,260,261],{},"Step 4: Add tests to the components (recommended)",[12,263,264],{},"Developing a component follows a standard software development cycle with stages like build, test, and deploy. It's highly recommended to test your components before publishing them. Check out this example test, which queries the GitLab REST API to check whether a component job has been added to the pipeline. Feel free to use it, and consider adding more tests to ensure your components work as expected.",[12,266,267],{},[86,268],{"alt":88,"src":269},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2023-12-19_at_12.32.53_PM_aHR0cHM6_1750099406968.png",[12,271,272,273,276],{},"Include all your test jobs in the ",[77,274,275],{},".gitlab-ci.yml"," file in your Catalog project.",[12,278,279],{},[77,280,281],{},"Step 5: Prepare your CI/CD configuration for publishing",[130,283,284],{},[37,285,286,287,289,290,293],{},"Create a release job in the ",[77,288,275],{}," file in the component project using the ",[208,291,292],{},"Release"," keyword.  See the job example:",[12,295,296],{},[86,297],{"alt":88,"src":298},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2023-12-19_at_12.34.27_PM_aHR0cHM6_1750099406969.png",[12,300,301,304],{},[77,302,303],{},"Note:"," Do not \"create release\" from GitLab UI since this soon won't be supported for a Component Catalog.",[130,306,308],{"start":307},2,[37,309,310],{},"We recommend adding this rule in the Release job; this will automatically trigger the Release job only when creating a git tag starts with digits in the project, following semantic release conventions (1.0.0 for example).",[12,312,313],{},[86,314],{"alt":88,"src":315},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2023-12-19_at_1.21.30_PM_aHR0cHM6_1750099406970.png",[130,317,319],{"start":318},3,[37,320,321],{},"So this is how we recommend your job to look:",[12,323,324],{},[86,325],{"alt":88,"src":326},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2023-12-19_at_12.37.09_PM_aHR0cHM6_1750099406970.png",[130,328,330],{"start":329},4,[37,331,332],{},"To manually release components, add manual rule as below, so when the pipeline is triggered, someone will need to manually run the release job.",[12,334,335],{},[86,336],{"alt":88,"src":337},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2023-12-19_at_12.38.18_PM_aHR0cHM6_1750099406971.png",[12,339,340,341,344],{},"Here is the release job with the ",[208,342,343],{},"when:manual"," rule:",[12,346,347],{},[86,348],{"alt":88,"src":349},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099407/Blog/Content%20Images/Blog/Content%20Images/Screenshot_2023-12-19_at_12.41.00_PM_aHR0cHM6_1750099406972.png",[12,351,352],{},[77,353,354],{},"Step 6: Publish your components",[12,356,357],{},"Once you are satisfied with your components, and all tests have passed successfully, it's time to publish a new version by creating a git tag, so they will be available in the CI/CD Catalog.",[130,359,360,363,369],{},[37,361,362],{},"Create a Git tag using the semantic versioning format \"MAJOR.MINOR.PATCH\".",[37,364,365,366,98],{},"You can create tags through the UI by navigating to Code -> Tags -> New Tag, or via the CLI using ",[208,367,368],{},"git tag",[37,370,371],{},"Creating the tag will trigger a pipeline that runs the Release job if all tests pass successfully. The component project will then be assigned the version you defined in the tag, and it will appear in the catalog.",[373,374,376],"h3",{"id":375},"example-projects","Example projects",[34,378,379],{},[37,380,381],{},[21,382,385],{"href":383,"rel":384},"https://gitlab.com/components",[],"GitLab official components",[373,387,389],{"id":388},"documentation","Documentation",[12,391,392,393,397],{},"For more details on using components from the CI/CD Catalog and maximizing their potential within your projects, refer to the official ",[21,394,396],{"href":29,"rel":395},[],"CI/CD Catalog documentation",". This documentation provides in-depth insights into the functionality.",[399,400,401],"blockquote",{},[12,402,403,408],{},[21,404,407],{"href":405,"rel":406},"https://gitlab.navattic.com/cicd-catalog",[],"Take a tour"," of the GitLab CI/CD Catalog.",[12,410,411],{},[412,413,414,415,420],"em",{},"A special thank you to Dov Hershkovitch and ",[21,416,419],{"href":417,"rel":418},"https://gitlab.com/fabiopitino",[],"Fabio Pitino"," for their invaluable content reviews and contributions to this blog post.",{"title":422,"searchDepth":307,"depth":307,"links":423},"",[424,425,426,427],{"id":49,"depth":307,"text":50},{"id":65,"depth":307,"text":66},{"id":72,"depth":307,"text":73},{"id":157,"depth":307,"text":158,"children":428},[429,430],{"id":375,"depth":318,"text":376},{"id":388,"depth":318,"text":389},"engineering","2023-12-21","Discover, reuse, and contribute CI/CD components effortlessly, enhancing collaboration and efficiency when creating pipeline configurations.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099399/Blog/Hero%20Images/Blog/Hero%20Images/security-pipelines_4UHVIJlePT8rEzjvYkGYvi_1750099398604.jpg",{},true,"/en-us/blog/introducing-the-gitlab-ci-cd-catalog-beta",{"title":5,"description":433,"ogTitle":5,"ogDescription":433,"noIndex":436,"ogImage":437,"ogUrl":442,"ogSiteName":443,"ogType":444,"canonicalUrls":442},"https://about.gitlab.com/blog/introducing-the-gitlab-ci-cd-catalog-beta","https://about.gitlab.com","article","introducing-the-gitlab-ci-cd-catalog-beta","en-us/blog/introducing-the-gitlab-ci-cd-catalog-beta",[448,449,450,451],"CI/CD","news","DevOps","tutorial","BlogPost","fUw_O5DS4UASutGiPFEENPocqWySkRaNaT5gVlkroUU",{"logo":455,"freeTrial":460,"sales":465,"login":470,"items":475,"search":801,"minimal":832,"duo":851,"switchNav":860,"pricingDeployment":871},{"config":456},{"href":457,"dataGaName":458,"dataGaLocation":459},"/","gitlab logo","header",{"text":461,"config":462},"Get free trial",{"href":463,"dataGaName":464,"dataGaLocation":459},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":466,"config":467},"Request a demo",{"href":468,"dataGaName":469,"dataGaLocation":459},"/sales/?contact-topic=request-demo","sales",{"text":471,"config":472},"Sign in",{"href":473,"dataGaName":474,"dataGaLocation":459},"https://gitlab.com/users/sign_in/","sign in",[476,505,604,609,723,779],{"text":477,"config":478,"menu":480},"Platform",{"dataNavLevelOne":479},"platform",{"type":481,"columns":482},"cards",[483,489,497],{"title":477,"description":484,"link":485},"The intelligent orchestration platform for DevSecOps",{"text":486,"config":487},"Explore our Platform",{"href":488,"dataGaName":479,"dataGaLocation":459},"/platform/",{"title":490,"description":491,"link":492},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":493,"config":494},"Meet GitLab Duo",{"href":495,"dataGaName":496,"dataGaLocation":459},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":498,"description":499,"link":500},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":501,"config":502},"Learn more",{"href":503,"dataGaName":504,"dataGaLocation":459},"/why-gitlab/","why gitlab",{"text":506,"left":439,"config":507,"menu":509},"Product",{"dataNavLevelOne":508},"solutions",{"type":510,"link":511,"columns":515,"feature":583},"lists",{"text":512,"config":513},"View all Solutions",{"href":514,"dataGaName":508,"dataGaLocation":459},"/solutions/",[516,539,562],{"title":517,"description":518,"link":519,"items":524},"Automation","CI/CD and automation to accelerate deployment",{"config":520},{"icon":521,"href":522,"dataGaName":523,"dataGaLocation":459},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[525,528,531,535],{"text":448,"config":526},{"href":527,"dataGaLocation":459,"dataGaName":448},"/solutions/continuous-integration/",{"text":490,"config":529},{"href":495,"dataGaLocation":459,"dataGaName":530},"gitlab duo agent platform - product menu",{"text":532,"config":533},"Source Code Management",{"href":534,"dataGaLocation":459,"dataGaName":532},"/solutions/source-code-management/",{"text":536,"config":537},"Automated Software Delivery",{"href":522,"dataGaLocation":459,"dataGaName":538},"Automated software delivery",{"title":540,"description":541,"link":542,"items":547},"Security","Deliver code faster without compromising security",{"config":543},{"href":544,"dataGaName":545,"dataGaLocation":459,"icon":546},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[548,552,557],{"text":549,"config":550},"Application Security Testing",{"href":544,"dataGaName":551,"dataGaLocation":459},"Application security testing",{"text":553,"config":554},"Software Supply Chain Security",{"href":555,"dataGaLocation":459,"dataGaName":556},"/solutions/supply-chain/","Software supply chain security",{"text":558,"config":559},"Software Compliance",{"href":560,"dataGaName":561,"dataGaLocation":459},"/solutions/software-compliance/","software compliance",{"title":563,"link":564,"items":569},"Measurement",{"config":565},{"icon":566,"href":567,"dataGaName":568,"dataGaLocation":459},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[570,574,578],{"text":571,"config":572},"Visibility & Measurement",{"href":567,"dataGaLocation":459,"dataGaName":573},"Visibility and Measurement",{"text":575,"config":576},"Value Stream Management",{"href":577,"dataGaLocation":459,"dataGaName":575},"/solutions/value-stream-management/",{"text":579,"config":580},"Analytics & Insights",{"href":581,"dataGaLocation":459,"dataGaName":582},"/solutions/analytics-and-insights/","Analytics and insights",{"title":584,"type":510,"items":585},"GitLab for",[586,592,598],{"text":587,"config":588},"Enterprise",{"icon":589,"href":590,"dataGaLocation":459,"dataGaName":591},"Building","/enterprise/","enterprise",{"text":593,"config":594},"Small Business",{"icon":595,"href":596,"dataGaLocation":459,"dataGaName":597},"Work","/small-business/","small business",{"text":599,"config":600},"Public Sector",{"icon":601,"href":602,"dataGaLocation":459,"dataGaName":603},"Organization","/solutions/public-sector/","public sector",{"text":605,"config":606},"Pricing",{"href":607,"dataGaName":608,"dataGaLocation":459,"dataNavLevelOne":608},"/pricing/","pricing",{"text":610,"config":611,"menu":613},"Resources",{"dataNavLevelOne":612},"resources",{"type":510,"link":614,"columns":618,"feature":712},{"text":615,"config":616},"View all resources",{"href":617,"dataGaName":612,"dataGaLocation":459},"/resources/",[619,652,679],{"title":620,"items":621},"Getting started",[622,627,632,637,642,647],{"text":623,"config":624},"Install",{"href":625,"dataGaName":626,"dataGaLocation":459},"/install/","install",{"text":628,"config":629},"Quick start guides",{"href":630,"dataGaName":631,"dataGaLocation":459},"/get-started/","quick setup checklists",{"text":633,"config":634},"Learn",{"href":635,"dataGaLocation":459,"dataGaName":636},"https://university.gitlab.com/","learn",{"text":638,"config":639},"Product documentation",{"href":640,"dataGaName":641,"dataGaLocation":459},"https://docs.gitlab.com/","product documentation",{"text":643,"config":644},"Best practice videos",{"href":645,"dataGaName":646,"dataGaLocation":459},"/getting-started-videos/","best practice videos",{"text":648,"config":649},"Integrations",{"href":650,"dataGaName":651,"dataGaLocation":459},"/integrations/","integrations",{"title":653,"items":654},"Discover",[655,660,665,670,674],{"text":656,"config":657},"Customer success stories",{"href":658,"dataGaName":659,"dataGaLocation":459},"/customers/","customer success stories",{"text":661,"config":662},"Blog",{"href":663,"dataGaName":664,"dataGaLocation":459},"/blog/","blog",{"text":666,"config":667},"Demo Hub",{"href":668,"dataGaName":669,"dataGaLocation":459},"/demo-hub/","demo hub",{"text":671,"config":672},"The Source",{"href":673,"dataGaName":664,"dataGaLocation":459},"/the-source/",{"text":675,"config":676},"Remote",{"href":677,"dataGaName":678,"dataGaLocation":459},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":680,"items":681},"Connect",[682,687,692,697,702,707],{"text":683,"config":684},"GitLab Services",{"href":685,"dataGaName":686,"dataGaLocation":459},"/services/","services",{"text":688,"config":689},"Contribute",{"href":690,"dataGaName":691,"dataGaLocation":459},"https://contributors.gitlab.com","contribute",{"text":693,"config":694},"Community",{"href":695,"dataGaName":696,"dataGaLocation":459},"/community/","community",{"text":698,"config":699},"Forum",{"href":700,"dataGaName":701,"dataGaLocation":459},"https://forum.gitlab.com/","forum",{"text":703,"config":704},"Events",{"href":705,"dataGaName":706,"dataGaLocation":459},"/events/","events",{"text":708,"config":709},"Partners",{"href":710,"dataGaName":711,"dataGaLocation":459},"/partners/","partners",{"config":713,"title":716,"text":717,"link":718},{"background":714,"textColor":715},"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":719,"config":720},"Read the latest",{"href":721,"dataGaName":722,"dataGaLocation":459},"/whats-new/","whats new",{"text":724,"config":725,"menu":727},"Company",{"dataNavLevelOne":726},"company",{"type":510,"columns":728},[729],{"items":730},[731,736,742,744,749,754,759,764,769,774],{"text":732,"config":733},"About",{"href":734,"dataGaName":735,"dataGaLocation":459},"/company/","about",{"text":737,"config":738,"footerGa":741},"Jobs",{"href":739,"dataGaName":740,"dataGaLocation":459},"/jobs/","jobs",{"dataGaName":740},{"text":703,"config":743},{"href":705,"dataGaName":706,"dataGaLocation":459},{"text":745,"config":746},"Leadership",{"href":747,"dataGaName":748,"dataGaLocation":459},"/company/team/e-group/","leadership",{"text":750,"config":751},"Handbook",{"href":752,"dataGaName":753,"dataGaLocation":459},"https://handbook.gitlab.com/","handbook",{"text":755,"config":756},"Investor relations",{"href":757,"dataGaName":758,"dataGaLocation":459},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":760,"config":761},"Trust Center",{"href":762,"dataGaName":763,"dataGaLocation":459},"/security/","trust center",{"text":765,"config":766},"AI Transparency Center",{"href":767,"dataGaName":768,"dataGaLocation":459},"/ai-transparency-center/","ai transparency center",{"text":770,"config":771},"Newsletter",{"href":772,"dataGaName":773,"dataGaLocation":459},"/company/contact/#contact-forms","newsletter",{"text":775,"config":776},"Press",{"href":777,"dataGaName":778,"dataGaLocation":459},"/press/","press",{"text":780,"config":781,"menu":782},"Contact us",{"dataNavLevelOne":726},{"type":510,"columns":783},[784],{"items":785},[786,791,796],{"text":787,"config":788},"Talk to sales",{"href":789,"dataGaName":790,"dataGaLocation":459},"/sales/","talk to sales",{"text":792,"config":793},"Support portal",{"href":794,"dataGaName":795,"dataGaLocation":459},"https://support.gitlab.com/hc/en-us","support portal",{"text":797,"config":798},"Customer portal",{"href":799,"dataGaName":800,"dataGaLocation":459},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":802,"login":803,"suggestions":810},"Close",{"text":804,"link":805},"To search repositories and projects, login to",{"text":806,"config":807},"gitlab.com",{"href":473,"dataGaName":808,"dataGaLocation":809},"search login","search",{"text":811,"default":812},"Suggestions",[813,815,819,821,825,829],{"text":490,"config":814},{"href":495,"dataGaName":490,"dataGaLocation":809},{"text":816,"config":817},"Code Suggestions (AI)",{"href":818,"dataGaName":816,"dataGaLocation":809},"/solutions/code-suggestions/",{"text":448,"config":820},{"href":527,"dataGaName":448,"dataGaLocation":809},{"text":822,"config":823},"GitLab on AWS",{"href":824,"dataGaName":822,"dataGaLocation":809},"/partners/technology-partners/aws/",{"text":826,"config":827},"GitLab on Google Cloud",{"href":828,"dataGaName":826,"dataGaLocation":809},"/partners/technology-partners/google-cloud-platform/",{"text":830,"config":831},"Why GitLab?",{"href":503,"dataGaName":830,"dataGaLocation":809},{"freeTrial":833,"mobileIcon":838,"desktopIcon":843,"secondaryButton":846},{"text":834,"config":835},"Start free trial",{"href":836,"dataGaName":464,"dataGaLocation":837},"https://gitlab.com/-/trials/new/","nav",{"altText":839,"config":840},"Gitlab Icon",{"src":841,"dataGaName":842,"dataGaLocation":837},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":839,"config":844},{"src":845,"dataGaName":842,"dataGaLocation":837},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":847,"config":848},"Get Started",{"href":849,"dataGaName":850,"dataGaLocation":837},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":852,"mobileIcon":856,"desktopIcon":858},{"text":853,"config":854},"Learn more about GitLab Duo",{"href":495,"dataGaName":855,"dataGaLocation":837},"gitlab duo",{"altText":839,"config":857},{"src":841,"dataGaName":842,"dataGaLocation":837},{"altText":839,"config":859},{"src":845,"dataGaName":842,"dataGaLocation":837},{"button":861,"mobileIcon":866,"desktopIcon":868},{"text":862,"config":863},"/switch",{"href":864,"dataGaName":865,"dataGaLocation":837},"#contact","switch",{"altText":839,"config":867},{"src":841,"dataGaName":842,"dataGaLocation":837},{"altText":839,"config":869},{"src":870,"dataGaName":842,"dataGaLocation":837},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":872,"mobileIcon":877,"desktopIcon":879},{"text":873,"config":874},"Back to pricing",{"href":607,"dataGaName":875,"dataGaLocation":837,"icon":876},"back to pricing","GoBack",{"altText":839,"config":878},{"src":841,"dataGaName":842,"dataGaLocation":837},{"altText":839,"config":880},{"src":845,"dataGaName":842,"dataGaLocation":837},{"title":882,"titleMobile":883,"button":884,"config":889},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":501,"config":885},{"href":886,"dataGaName":887,"dataGaLocation":888},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":890,"disabled":436},"release",{"data":892},{"text":893,"source":894,"edit":900,"contribute":905,"config":910,"items":915,"minimal":1124},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":895,"config":896},"View page source",{"href":897,"dataGaName":898,"dataGaLocation":899},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":901,"config":902},"Edit this page",{"href":903,"dataGaName":904,"dataGaLocation":899},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":906,"config":907},"Please contribute",{"href":908,"dataGaName":909,"dataGaLocation":899},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":911,"facebook":912,"youtube":913,"linkedin":914},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[916,963,1016,1060,1092],{"title":605,"links":917,"subMenu":932},[918,922,927],{"text":919,"config":920},"View plans",{"href":607,"dataGaName":921,"dataGaLocation":899},"view plans",{"text":923,"config":924},"Why Premium?",{"href":925,"dataGaName":926,"dataGaLocation":899},"/pricing/premium/","why premium",{"text":928,"config":929},"Why Ultimate?",{"href":930,"dataGaName":931,"dataGaLocation":899},"/pricing/ultimate/","why ultimate",[933],{"title":934,"links":935},"Contact Us",[936,939,941,943,948,953,958],{"text":937,"config":938},"Contact sales",{"href":789,"dataGaName":469,"dataGaLocation":899},{"text":792,"config":940},{"href":794,"dataGaName":795,"dataGaLocation":899},{"text":797,"config":942},{"href":799,"dataGaName":800,"dataGaLocation":899},{"text":944,"config":945},"Status",{"href":946,"dataGaName":947,"dataGaLocation":899},"https://status.gitlab.com/","status",{"text":949,"config":950},"Terms of use",{"href":951,"dataGaName":952,"dataGaLocation":899},"/terms/","terms of use",{"text":954,"config":955},"Privacy statement",{"href":956,"dataGaName":957,"dataGaLocation":899},"/privacy/","privacy statement",{"text":959,"config":960},"Cookie preferences",{"dataGaName":961,"dataGaLocation":899,"id":962,"isOneTrustButton":439},"cookie preferences","ot-sdk-btn",{"title":506,"links":964,"subMenu":973},[965,969],{"text":966,"config":967},"DevSecOps platform",{"href":488,"dataGaName":968,"dataGaLocation":899},"devsecops platform",{"text":970,"config":971},"AI-Assisted Development",{"href":495,"dataGaName":972,"dataGaLocation":899},"ai-assisted development",[974],{"title":975,"links":976},"Topics",[977,982,987,991,996,1001,1006,1011],{"text":978,"config":979},"CICD",{"href":980,"dataGaName":981,"dataGaLocation":899},"/topics/ci-cd/","cicd",{"text":983,"config":984},"GitOps",{"href":985,"dataGaName":986,"dataGaLocation":899},"/topics/gitops/","gitops",{"text":450,"config":988},{"href":989,"dataGaName":990,"dataGaLocation":899},"/topics/devops/","devops",{"text":992,"config":993},"Version Control",{"href":994,"dataGaName":995,"dataGaLocation":899},"/topics/version-control/","version control",{"text":997,"config":998},"DevSecOps",{"href":999,"dataGaName":1000,"dataGaLocation":899},"/topics/devsecops/","devsecops",{"text":1002,"config":1003},"Cloud Native",{"href":1004,"dataGaName":1005,"dataGaLocation":899},"/topics/cloud-native/","cloud native",{"text":1007,"config":1008},"AI for Coding",{"href":1009,"dataGaName":1010,"dataGaLocation":899},"/topics/devops/ai-for-coding/","ai for coding",{"text":1012,"config":1013},"Agentic AI",{"href":1014,"dataGaName":1015,"dataGaLocation":899},"/topics/agentic-ai/","agentic ai",{"title":1017,"links":1018},"Solutions",[1019,1021,1023,1028,1032,1035,1039,1042,1044,1047,1050,1055],{"text":549,"config":1020},{"href":544,"dataGaName":549,"dataGaLocation":899},{"text":538,"config":1022},{"href":522,"dataGaName":523,"dataGaLocation":899},{"text":1024,"config":1025},"Agile development",{"href":1026,"dataGaName":1027,"dataGaLocation":899},"/solutions/agile-delivery/","agile delivery",{"text":1029,"config":1030},"SCM",{"href":534,"dataGaName":1031,"dataGaLocation":899},"source code management",{"text":978,"config":1033},{"href":527,"dataGaName":1034,"dataGaLocation":899},"continuous integration & delivery",{"text":1036,"config":1037},"Value stream management",{"href":577,"dataGaName":1038,"dataGaLocation":899},"value stream management",{"text":983,"config":1040},{"href":1041,"dataGaName":986,"dataGaLocation":899},"/solutions/gitops/",{"text":587,"config":1043},{"href":590,"dataGaName":591,"dataGaLocation":899},{"text":1045,"config":1046},"Small business",{"href":596,"dataGaName":597,"dataGaLocation":899},{"text":1048,"config":1049},"Public sector",{"href":602,"dataGaName":603,"dataGaLocation":899},{"text":1051,"config":1052},"Education",{"href":1053,"dataGaName":1054,"dataGaLocation":899},"/solutions/education/","education",{"text":1056,"config":1057},"Financial services",{"href":1058,"dataGaName":1059,"dataGaLocation":899},"/solutions/finance/","financial services",{"title":610,"links":1061},[1062,1064,1066,1068,1071,1073,1076,1078,1080,1082,1084,1086,1088,1090],{"text":623,"config":1063},{"href":625,"dataGaName":626,"dataGaLocation":899},{"text":628,"config":1065},{"href":630,"dataGaName":631,"dataGaLocation":899},{"text":633,"config":1067},{"href":635,"dataGaName":636,"dataGaLocation":899},{"text":638,"config":1069},{"href":640,"dataGaName":1070,"dataGaLocation":899},"docs",{"text":661,"config":1072},{"href":663,"dataGaName":664,"dataGaLocation":899},{"text":1074,"config":1075},"What's new",{"href":721,"dataGaName":722,"dataGaLocation":899},{"text":656,"config":1077},{"href":658,"dataGaName":659,"dataGaLocation":899},{"text":675,"config":1079},{"href":677,"dataGaName":678,"dataGaLocation":899},{"text":683,"config":1081},{"href":685,"dataGaName":686,"dataGaLocation":899},{"text":688,"config":1083},{"href":690,"dataGaName":691,"dataGaLocation":899},{"text":693,"config":1085},{"href":695,"dataGaName":696,"dataGaLocation":899},{"text":698,"config":1087},{"href":700,"dataGaName":701,"dataGaLocation":899},{"text":703,"config":1089},{"href":705,"dataGaName":706,"dataGaLocation":899},{"text":708,"config":1091},{"href":710,"dataGaName":711,"dataGaLocation":899},{"title":724,"links":1093},[1094,1096,1098,1100,1102,1104,1108,1113,1115,1117,1119],{"text":732,"config":1095},{"href":734,"dataGaName":726,"dataGaLocation":899},{"text":737,"config":1097},{"href":739,"dataGaName":740,"dataGaLocation":899},{"text":745,"config":1099},{"href":747,"dataGaName":748,"dataGaLocation":899},{"text":750,"config":1101},{"href":752,"dataGaName":753,"dataGaLocation":899},{"text":755,"config":1103},{"href":757,"dataGaName":758,"dataGaLocation":899},{"text":1105,"config":1106},"Sustainability",{"href":1107,"dataGaName":1105,"dataGaLocation":899},"/sustainability/",{"text":1109,"config":1110},"Diversity, inclusion and belonging (DIB)",{"href":1111,"dataGaName":1112,"dataGaLocation":899},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":760,"config":1114},{"href":762,"dataGaName":763,"dataGaLocation":899},{"text":770,"config":1116},{"href":772,"dataGaName":773,"dataGaLocation":899},{"text":775,"config":1118},{"href":777,"dataGaName":778,"dataGaLocation":899},{"text":1120,"config":1121},"Modern Slavery Transparency Statement",{"href":1122,"dataGaName":1123,"dataGaLocation":899},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1125},[1126,1129,1132],{"text":1127,"config":1128},"Terms",{"href":951,"dataGaName":952,"dataGaLocation":899},{"text":1130,"config":1131},"Cookies",{"dataGaName":961,"dataGaLocation":899,"id":962,"isOneTrustButton":439},{"text":1133,"config":1134},"Privacy",{"href":956,"dataGaName":957,"dataGaLocation":899},[1136],{"id":1137,"title":7,"body":435,"config":1138,"content":1140,"description":435,"extension":1144,"meta":1145,"navigation":439,"path":1146,"seo":1147,"stem":1148,"__hash__":1149},"blogAuthors/en-us/blog/authors/itzik-gan-baruch.yml",{"template":1139},"BlogAuthor",{"name":7,"config":1141},{"headshot":1142,"ctfId":1143},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658921/Blog/Author%20Headshots/iganbaruch-headshot.jpg","iganbaruch","yml",{},"/en-us/blog/authors/itzik-gan-baruch",{},"en-us/blog/authors/itzik-gan-baruch","bz9VMiTQ1ixvnoxUFk0jiUcnLG3oQsymgXNCqyRqfsk",[1151,1160,1168],{"title":1152,"description":1153,"heroImage":1154,"category":431,"date":1155,"authors":1156,"slug":1159,"externalUrl":435},"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",[1157,1158],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1161,"description":1162,"heroImage":1163,"category":431,"date":1164,"authors":1165,"slug":1167,"externalUrl":435},"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",[1166],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1169,"description":1170,"heroImage":1171,"category":431,"date":1172,"authors":1173,"slug":1175,"externalUrl":435},"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",[1174],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1177},[1178,1192,1204,1216],{"id":1179,"categories":1180,"header":1182,"text":1183,"button":1184,"image":1189},"ai-modernization",[1181],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1185,"config":1186},"Get your AI maturity score",{"href":1187,"dataGaName":1188,"dataGaLocation":664},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1190},{"src":1191},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1193,"categories":1194,"header":1196,"text":1183,"button":1197,"image":1201},"devops-modernization",[1195,1000],"product","Are you just managing tools or shipping innovation?",{"text":1198,"config":1199},"Get your DevOps maturity score",{"href":1200,"dataGaName":1188,"dataGaLocation":664},"/assessments/devops-modernization-assessment/",{"config":1202},{"src":1203},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1205,"categories":1206,"header":1208,"text":1183,"button":1209,"image":1213},"security-modernization",[1207],"security","Are you trading speed for security?",{"text":1210,"config":1211},"Get your security maturity score",{"href":1212,"dataGaName":1188,"dataGaLocation":664},"/assessments/security-modernization-assessment/",{"config":1214},{"src":1215},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1217,"paths":1218,"header":1221,"text":1222,"button":1223,"image":1228},"github-azure-migration",[1219,1220],"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":1224,"config":1225},"See how GitLab compares to GitHub",{"href":1226,"dataGaName":1227,"dataGaLocation":664},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1229},{"src":1203},{"header":1231,"blurb":1232,"button":1233,"secondaryButton":1238},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1234,"config":1235},"Get your free trial",{"href":1236,"dataGaName":464,"dataGaLocation":1237},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":937,"config":1239},{"href":789,"dataGaName":469,"dataGaLocation":1237},1786803752777]