[{"data":1,"prerenderedAt":1003},["ShallowReactive",2],{"/blog/how-to-build-reusable-ci-templates":3,"navigation-en-us":218,"banner-en-us":645,"footer-en-us":655,"blog-post-authors-en-us-Dov Hershkovitch":898,"blog-related-posts-en-us-how-to-build-reusable-ci-templates":913,"blog-promotions-en-us":939,"next-steps-en-us":993},{"id":4,"title":5,"authors":6,"body":8,"category":198,"date":199,"description":200,"extension":201,"externalUrl":202,"faq":202,"featured":203,"heroImage":204,"meta":205,"navigation":38,"path":206,"seo":207,"slug":211,"stem":212,"tags":213,"template":216,"updatedDate":202,"__hash__":217},"blogPosts/en-us/blog/how-to-build-reusable-ci-templates.md","How to build more reusable CI/CD templates",[7],"Dov Hershkovitch",{"type":9,"value":10,"toc":187},"minimark",[11,21,24,39,44,47,50,53,74,79,100,104,112,116,119,163,166,170,173],[12,13,14,15,20],"p",{},"There are exciting new developments to share about our CI/CD templates features, known for their ability to get users up and running quickly with ",[16,17,19],"a",{"href":18},"/topics/ci-cd/","GitLab CI/CD",". Our goals for the immediate future are to evolve templates into CI/CD components (more details below) and, soon, to release a CI/CD components catalog to make the reusing and sharing of pipeline configurations easier and more efficient for developers, both inside of their organizations and with the wider developer community. The first step in our journey is to enable users to define inputs to any includable file, ultimately creating more powerful and reusable CI/CD templates.",[12,22,23],{},"Here is a short walkthrough on this capability:",[25,26,29],"figure",{"className":27},[28],"video_container",[30,31],"iframe",{"width":32,"height":33,"src":34,"title":35,"frameBorder":36,"allow":37,"allowFullScreen":38},1870,937,"https://www.youtube.com/embed/4ZRdgBy1n5E","","0","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",true,[40,41,43],"h2",{"id":42},"build-more-robust-and-isolated-cicd-templates","Build more robust and isolated CI/CD templates",[12,45,46],{},"In GitLab 15.11, we released, as Beta, the ability to define inputs to any includable file (any CI/CD file that you include in your pipeline). Until now, we've been leveraging environment variables to pass information. As an example, we used environment variables to pass information from an upstream pipeline to a downstream pipeline.",[12,48,49],{},"Using environment variables for passing information is like declaring global variables in programming languages – it has an effect on your entire pipeline, which means that the more variables we declare, the more we risk variable conflicts and increased variable scope.",[12,51,52],{},"Input parameters are similar to variables passed to the template but exist only inside a specific scope and don't affect other templates in your pipelines. There are several benefits of using inputs, including:",[54,55,56,60,68,71],"ol",{},[57,58,59],"li",{},"Inputs are not inherited from upstream includes and must be passed explicitly, which means they will never affect your entire pipeline.",[57,61,62,63,67],{},"Inputs have full support for CI/CD interpolation, which means you have complete flexibility to \"templatize\" your pipeline and use ",[64,65,66],"code",{},"$[[ inputs.* ]]"," across all keywords in your CI/CD configuration.",[57,69,70],{},"You can define mandatory and optional inputs to be used as part of your CI/CD templates.",[57,72,73],{},"You can define a default value for inputs.\nThis paradigm allows users to build more robust and isolated templates (which will soon evolve into components) and enables users to declare and enforce contracts.",[75,76,78],"h3",{"id":77},"add-your-inputs-and-let-us-know-what-you-think","Add your inputs and let us know what you think!",[12,80,81,82,87,88,93,94,99],{},"The ability to define inputs to a CI/CD configuration file is available right now and we'd love for users to dive in and begin adding inputs to templates. You can check out ",[16,83,86],{"href":84,"rel":85},"https://docs.gitlab.com/ci/yaml/includes/#define-input-parameters-with-specinputs",[],"the GitLab docs"," and review ",[16,89,92],{"href":90,"rel":91},"https://gitlab.com/grzesiek/ci-interpolation-example",[],"this example project"," to better understand how to use inputs as part of your daily workflow. If you use this feature and have feedback, please share it with us in this ",[16,95,98],{"href":96,"rel":97},"https://gitlab.com/gitlab-org/gitlab/-/issues/407556",[],"issue",".",[40,101,103],{"id":102},"whats-next-in-cicd-pipelines","What's next in CI/CD pipelines?",[12,105,106,107,99],{},"In GitLab 16.0, we are planning to release an experimental version of a CI/CD pipeline component, which will be the first building block of our CI/CD catalog. A pipeline component is a reusable, single-purpose building block that abstracts a single pipeline configuration unit away. To learn more, please check out this ",[16,108,111],{"href":109,"rel":110},"https://gitlab.com/gitlab-test-ci-catalog/catalog/ruby",[],"example project",[75,113,115],{"id":114},"why-are-we-moving-to-components","Why are we moving to components?",[12,117,118],{},"Components are preconfigured CI/CD files that automate the process of building, testing, and deploying software applications. CI/CD components provide:",[120,121,122,133,139,145,151,157],"ul",{},[57,123,124,128,129,132],{},[125,126,127],"strong",{},"Versioning",": Each component is tagged with a version number, so you can reference a specific version or always use the ",[64,130,131],{},"~latest"," version.",[57,134,135,138],{},[125,136,137],{},"Consistency",": CI/CD components ensure consistency in your CI/CD pipelines across different projects, teams, and environments. By using a standardized approach, developers can reduce errors and improve the quality of their code.",[57,140,141,144],{},[125,142,143],{},"Time-savings",": CI/CD components save time by automating repetitive tasks such as running tests, building artifacts, and deploying applications. This enables developers to focus on more important tasks, like writing code and fixing bugs.",[57,146,147,150],{},[125,148,149],{},"Reusability",": CI/CD components can be reused across multiple projects and teams, eliminating the need to create custom scripts for each project. This saves time and reduces the risk of errors.",[57,152,153,156],{},[125,154,155],{},"Scalability",": CI/CD components are scalable and can be used to manage pipeline processes of large and complex applications. This enables developers to easily manage their projects as they grow.",[57,158,159,162],{},[125,160,161],{},"Flexibility",": CI/CD components are highly customizable and can be adapted to suit the needs of different projects, teams, and environments. This allows developers to use the tools and processes that work best for them.",[12,164,165],{},"TL;DR: Using CI/CD components can help streamline the development process, save time, reduce errors, and improve the quality of code.",[75,167,169],{"id":168},"on-the-horizon-a-cicd-component-catalog","On the horizon: A CI/CD component catalog",[12,171,172],{},"To further streamline your development processes, improve the quality of your software delivery, and make it easier for developers to discover and use preconfigured components, we’ll be releasing the CI/CD component catalog, which will make using, creating, and sharing CI/CD components much more efficient and user-friendly, and we’re targeting release of this later this year. In the next months, we’ll be sharing more feature updates, blogs, docs, and demos to keep you posted on our journey toward CI/CD components and a CI/CD component catalog. We’re excited for you to test out the new capabilities as they drop, and we look forward to your feedback.",[12,174,175,176,181,182,99],{},"Cover image by ",[16,177,180],{"href":178,"rel":179},"https://www.pexels.com/@matreding/",[],"Mathias Reding"," on ",[16,183,186],{"href":184,"rel":185},"https://www.pexels.com/photo/background-of-abstract-modern-architectural-pattern-4386148/",[],"Pexels",{"title":35,"searchDepth":188,"depth":188,"links":189},2,[190,194],{"id":42,"depth":188,"text":43,"children":191},[192],{"id":77,"depth":193,"text":78},3,{"id":102,"depth":188,"text":103,"children":195},[196,197],{"id":114,"depth":193,"text":115},{"id":168,"depth":193,"text":169},"engineering","2023-05-01","Users can now define inputs to any includable CI/CD templates. Learn how and see what other CI/CD pipeline developments are coming.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682709/Blog/Hero%20Images/pexels-mathias-reding-4386148.jpg",{},"/en-us/blog/how-to-build-reusable-ci-templates",{"title":5,"description":200,"ogTitle":5,"ogDescription":200,"noIndex":203,"ogImage":204,"ogUrl":208,"ogSiteName":209,"ogType":210,"canonicalUrls":208},"https://about.gitlab.com/blog/how-to-build-reusable-ci-templates","https://about.gitlab.com","article","how-to-build-reusable-ci-templates","en-us/blog/how-to-build-reusable-ci-templates",[214,215],"CI/CD","DevOps","BlogPost","EIZpVSp4TozdbA2OjLpGk6DPW7YhfkGzBncD6Md0-bg",{"logo":219,"freeTrial":224,"sales":229,"login":234,"items":239,"search":565,"minimal":596,"duo":615,"switchNav":624,"pricingDeployment":635},{"config":220},{"href":221,"dataGaName":222,"dataGaLocation":223},"/","gitlab logo","header",{"text":225,"config":226},"Get free trial",{"href":227,"dataGaName":228,"dataGaLocation":223},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":230,"config":231},"Request a demo",{"href":232,"dataGaName":233,"dataGaLocation":223},"/sales/?contact-topic=request-demo","sales",{"text":235,"config":236},"Sign in",{"href":237,"dataGaName":238,"dataGaLocation":223},"https://gitlab.com/users/sign_in/","sign in",[240,269,368,373,487,543],{"text":241,"config":242,"menu":244},"Platform",{"dataNavLevelOne":243},"platform",{"type":245,"columns":246},"cards",[247,253,261],{"title":241,"description":248,"link":249},"The intelligent orchestration platform for DevSecOps",{"text":250,"config":251},"Explore our Platform",{"href":252,"dataGaName":243,"dataGaLocation":223},"/platform/",{"title":254,"description":255,"link":256},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":257,"config":258},"Meet GitLab Duo",{"href":259,"dataGaName":260,"dataGaLocation":223},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":262,"description":263,"link":264},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":265,"config":266},"Learn more",{"href":267,"dataGaName":268,"dataGaLocation":223},"/why-gitlab/","why gitlab",{"text":270,"left":38,"config":271,"menu":273},"Product",{"dataNavLevelOne":272},"solutions",{"type":274,"link":275,"columns":279,"feature":347},"lists",{"text":276,"config":277},"View all Solutions",{"href":278,"dataGaName":272,"dataGaLocation":223},"/solutions/",[280,303,326],{"title":281,"description":282,"link":283,"items":288},"Automation","CI/CD and automation to accelerate deployment",{"config":284},{"icon":285,"href":286,"dataGaName":287,"dataGaLocation":223},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[289,292,295,299],{"text":214,"config":290},{"href":291,"dataGaLocation":223,"dataGaName":214},"/solutions/continuous-integration/",{"text":254,"config":293},{"href":259,"dataGaLocation":223,"dataGaName":294},"gitlab duo agent platform - product menu",{"text":296,"config":297},"Source Code Management",{"href":298,"dataGaLocation":223,"dataGaName":296},"/solutions/source-code-management/",{"text":300,"config":301},"Automated Software Delivery",{"href":286,"dataGaLocation":223,"dataGaName":302},"Automated software delivery",{"title":304,"description":305,"link":306,"items":311},"Security","Deliver code faster without compromising security",{"config":307},{"href":308,"dataGaName":309,"dataGaLocation":223,"icon":310},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[312,316,321],{"text":313,"config":314},"Application Security Testing",{"href":308,"dataGaName":315,"dataGaLocation":223},"Application security testing",{"text":317,"config":318},"Software Supply Chain Security",{"href":319,"dataGaLocation":223,"dataGaName":320},"/solutions/supply-chain/","Software supply chain security",{"text":322,"config":323},"Software Compliance",{"href":324,"dataGaName":325,"dataGaLocation":223},"/solutions/software-compliance/","software compliance",{"title":327,"link":328,"items":333},"Measurement",{"config":329},{"icon":330,"href":331,"dataGaName":332,"dataGaLocation":223},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[334,338,342],{"text":335,"config":336},"Visibility & Measurement",{"href":331,"dataGaLocation":223,"dataGaName":337},"Visibility and Measurement",{"text":339,"config":340},"Value Stream Management",{"href":341,"dataGaLocation":223,"dataGaName":339},"/solutions/value-stream-management/",{"text":343,"config":344},"Analytics & Insights",{"href":345,"dataGaLocation":223,"dataGaName":346},"/solutions/analytics-and-insights/","Analytics and insights",{"title":348,"type":274,"items":349},"GitLab for",[350,356,362],{"text":351,"config":352},"Enterprise",{"icon":353,"href":354,"dataGaLocation":223,"dataGaName":355},"Building","/enterprise/","enterprise",{"text":357,"config":358},"Small Business",{"icon":359,"href":360,"dataGaLocation":223,"dataGaName":361},"Work","/small-business/","small business",{"text":363,"config":364},"Public Sector",{"icon":365,"href":366,"dataGaLocation":223,"dataGaName":367},"Organization","/solutions/public-sector/","public sector",{"text":369,"config":370},"Pricing",{"href":371,"dataGaName":372,"dataGaLocation":223,"dataNavLevelOne":372},"/pricing/","pricing",{"text":374,"config":375,"menu":377},"Resources",{"dataNavLevelOne":376},"resources",{"type":274,"link":378,"columns":382,"feature":476},{"text":379,"config":380},"View all resources",{"href":381,"dataGaName":376,"dataGaLocation":223},"/resources/",[383,416,443],{"title":384,"items":385},"Getting started",[386,391,396,401,406,411],{"text":387,"config":388},"Install",{"href":389,"dataGaName":390,"dataGaLocation":223},"/install/","install",{"text":392,"config":393},"Quick start guides",{"href":394,"dataGaName":395,"dataGaLocation":223},"/get-started/","quick setup checklists",{"text":397,"config":398},"Learn",{"href":399,"dataGaLocation":223,"dataGaName":400},"https://university.gitlab.com/","learn",{"text":402,"config":403},"Product documentation",{"href":404,"dataGaName":405,"dataGaLocation":223},"https://docs.gitlab.com/","product documentation",{"text":407,"config":408},"Best practice videos",{"href":409,"dataGaName":410,"dataGaLocation":223},"/getting-started-videos/","best practice videos",{"text":412,"config":413},"Integrations",{"href":414,"dataGaName":415,"dataGaLocation":223},"/integrations/","integrations",{"title":417,"items":418},"Discover",[419,424,429,434,438],{"text":420,"config":421},"Customer success stories",{"href":422,"dataGaName":423,"dataGaLocation":223},"/customers/","customer success stories",{"text":425,"config":426},"Blog",{"href":427,"dataGaName":428,"dataGaLocation":223},"/blog/","blog",{"text":430,"config":431},"Demo Hub",{"href":432,"dataGaName":433,"dataGaLocation":223},"/demo-hub/","demo hub",{"text":435,"config":436},"The Source",{"href":437,"dataGaName":428,"dataGaLocation":223},"/the-source/",{"text":439,"config":440},"Remote",{"href":441,"dataGaName":442,"dataGaLocation":223},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":444,"items":445},"Connect",[446,451,456,461,466,471],{"text":447,"config":448},"GitLab Services",{"href":449,"dataGaName":450,"dataGaLocation":223},"/services/","services",{"text":452,"config":453},"Contribute",{"href":454,"dataGaName":455,"dataGaLocation":223},"https://contributors.gitlab.com","contribute",{"text":457,"config":458},"Community",{"href":459,"dataGaName":460,"dataGaLocation":223},"/community/","community",{"text":462,"config":463},"Forum",{"href":464,"dataGaName":465,"dataGaLocation":223},"https://forum.gitlab.com/","forum",{"text":467,"config":468},"Events",{"href":469,"dataGaName":470,"dataGaLocation":223},"/events/","events",{"text":472,"config":473},"Partners",{"href":474,"dataGaName":475,"dataGaLocation":223},"/partners/","partners",{"config":477,"title":480,"text":481,"link":482},{"background":478,"textColor":479},"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":483,"config":484},"Read the latest",{"href":485,"dataGaName":486,"dataGaLocation":223},"/whats-new/","whats new",{"text":488,"config":489,"menu":491},"Company",{"dataNavLevelOne":490},"company",{"type":274,"columns":492},[493],{"items":494},[495,500,506,508,513,518,523,528,533,538],{"text":496,"config":497},"About",{"href":498,"dataGaName":499,"dataGaLocation":223},"/company/","about",{"text":501,"config":502,"footerGa":505},"Jobs",{"href":503,"dataGaName":504,"dataGaLocation":223},"/jobs/","jobs",{"dataGaName":504},{"text":467,"config":507},{"href":469,"dataGaName":470,"dataGaLocation":223},{"text":509,"config":510},"Leadership",{"href":511,"dataGaName":512,"dataGaLocation":223},"/company/team/e-group/","leadership",{"text":514,"config":515},"Handbook",{"href":516,"dataGaName":517,"dataGaLocation":223},"https://handbook.gitlab.com/","handbook",{"text":519,"config":520},"Investor relations",{"href":521,"dataGaName":522,"dataGaLocation":223},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":524,"config":525},"Trust Center",{"href":526,"dataGaName":527,"dataGaLocation":223},"/security/","trust center",{"text":529,"config":530},"AI Transparency Center",{"href":531,"dataGaName":532,"dataGaLocation":223},"/ai-transparency-center/","ai transparency center",{"text":534,"config":535},"Newsletter",{"href":536,"dataGaName":537,"dataGaLocation":223},"/company/contact/#contact-forms","newsletter",{"text":539,"config":540},"Press",{"href":541,"dataGaName":542,"dataGaLocation":223},"/press/","press",{"text":544,"config":545,"menu":546},"Contact us",{"dataNavLevelOne":490},{"type":274,"columns":547},[548],{"items":549},[550,555,560],{"text":551,"config":552},"Talk to sales",{"href":553,"dataGaName":554,"dataGaLocation":223},"/sales/","talk to sales",{"text":556,"config":557},"Support portal",{"href":558,"dataGaName":559,"dataGaLocation":223},"https://support.gitlab.com/hc/en-us","support portal",{"text":561,"config":562},"Customer portal",{"href":563,"dataGaName":564,"dataGaLocation":223},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":566,"login":567,"suggestions":574},"Close",{"text":568,"link":569},"To search repositories and projects, login to",{"text":570,"config":571},"gitlab.com",{"href":237,"dataGaName":572,"dataGaLocation":573},"search login","search",{"text":575,"default":576},"Suggestions",[577,579,583,585,589,593],{"text":254,"config":578},{"href":259,"dataGaName":254,"dataGaLocation":573},{"text":580,"config":581},"Code Suggestions (AI)",{"href":582,"dataGaName":580,"dataGaLocation":573},"/solutions/code-suggestions/",{"text":214,"config":584},{"href":291,"dataGaName":214,"dataGaLocation":573},{"text":586,"config":587},"GitLab on AWS",{"href":588,"dataGaName":586,"dataGaLocation":573},"/partners/technology-partners/aws/",{"text":590,"config":591},"GitLab on Google Cloud",{"href":592,"dataGaName":590,"dataGaLocation":573},"/partners/technology-partners/google-cloud-platform/",{"text":594,"config":595},"Why GitLab?",{"href":267,"dataGaName":594,"dataGaLocation":573},{"freeTrial":597,"mobileIcon":602,"desktopIcon":607,"secondaryButton":610},{"text":598,"config":599},"Start free trial",{"href":600,"dataGaName":228,"dataGaLocation":601},"https://gitlab.com/-/trials/new/","nav",{"altText":603,"config":604},"Gitlab Icon",{"src":605,"dataGaName":606,"dataGaLocation":601},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":603,"config":608},{"src":609,"dataGaName":606,"dataGaLocation":601},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":611,"config":612},"Get Started",{"href":613,"dataGaName":614,"dataGaLocation":601},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":616,"mobileIcon":620,"desktopIcon":622},{"text":617,"config":618},"Learn more about GitLab Duo",{"href":259,"dataGaName":619,"dataGaLocation":601},"gitlab duo",{"altText":603,"config":621},{"src":605,"dataGaName":606,"dataGaLocation":601},{"altText":603,"config":623},{"src":609,"dataGaName":606,"dataGaLocation":601},{"button":625,"mobileIcon":630,"desktopIcon":632},{"text":626,"config":627},"/switch",{"href":628,"dataGaName":629,"dataGaLocation":601},"#contact","switch",{"altText":603,"config":631},{"src":605,"dataGaName":606,"dataGaLocation":601},{"altText":603,"config":633},{"src":634,"dataGaName":606,"dataGaLocation":601},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":636,"mobileIcon":641,"desktopIcon":643},{"text":637,"config":638},"Back to pricing",{"href":371,"dataGaName":639,"dataGaLocation":601,"icon":640},"back to pricing","GoBack",{"altText":603,"config":642},{"src":605,"dataGaName":606,"dataGaLocation":601},{"altText":603,"config":644},{"src":609,"dataGaName":606,"dataGaLocation":601},{"title":646,"titleMobile":647,"button":648,"config":653},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":265,"config":649},{"href":650,"dataGaName":651,"dataGaLocation":652},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":654,"disabled":203},"release",{"data":656},{"text":657,"source":658,"edit":664,"contribute":669,"config":674,"items":679,"minimal":887},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":659,"config":660},"View page source",{"href":661,"dataGaName":662,"dataGaLocation":663},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":665,"config":666},"Edit this page",{"href":667,"dataGaName":668,"dataGaLocation":663},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":670,"config":671},"Please contribute",{"href":672,"dataGaName":673,"dataGaLocation":663},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":675,"facebook":676,"youtube":677,"linkedin":678},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[680,727,779,823,855],{"title":369,"links":681,"subMenu":696},[682,686,691],{"text":683,"config":684},"View plans",{"href":371,"dataGaName":685,"dataGaLocation":663},"view plans",{"text":687,"config":688},"Why Premium?",{"href":689,"dataGaName":690,"dataGaLocation":663},"/pricing/premium/","why premium",{"text":692,"config":693},"Why Ultimate?",{"href":694,"dataGaName":695,"dataGaLocation":663},"/pricing/ultimate/","why ultimate",[697],{"title":698,"links":699},"Contact Us",[700,703,705,707,712,717,722],{"text":701,"config":702},"Contact sales",{"href":553,"dataGaName":233,"dataGaLocation":663},{"text":556,"config":704},{"href":558,"dataGaName":559,"dataGaLocation":663},{"text":561,"config":706},{"href":563,"dataGaName":564,"dataGaLocation":663},{"text":708,"config":709},"Status",{"href":710,"dataGaName":711,"dataGaLocation":663},"https://status.gitlab.com/","status",{"text":713,"config":714},"Terms of use",{"href":715,"dataGaName":716,"dataGaLocation":663},"/terms/","terms of use",{"text":718,"config":719},"Privacy statement",{"href":720,"dataGaName":721,"dataGaLocation":663},"/privacy/","privacy statement",{"text":723,"config":724},"Cookie preferences",{"dataGaName":725,"dataGaLocation":663,"id":726,"isOneTrustButton":38},"cookie preferences","ot-sdk-btn",{"title":270,"links":728,"subMenu":737},[729,733],{"text":730,"config":731},"DevSecOps platform",{"href":252,"dataGaName":732,"dataGaLocation":663},"devsecops platform",{"text":734,"config":735},"AI-Assisted Development",{"href":259,"dataGaName":736,"dataGaLocation":663},"ai-assisted development",[738],{"title":739,"links":740},"Topics",[741,745,750,754,759,764,769,774],{"text":742,"config":743},"CICD",{"href":18,"dataGaName":744,"dataGaLocation":663},"cicd",{"text":746,"config":747},"GitOps",{"href":748,"dataGaName":749,"dataGaLocation":663},"/topics/gitops/","gitops",{"text":215,"config":751},{"href":752,"dataGaName":753,"dataGaLocation":663},"/topics/devops/","devops",{"text":755,"config":756},"Version Control",{"href":757,"dataGaName":758,"dataGaLocation":663},"/topics/version-control/","version control",{"text":760,"config":761},"DevSecOps",{"href":762,"dataGaName":763,"dataGaLocation":663},"/topics/devsecops/","devsecops",{"text":765,"config":766},"Cloud Native",{"href":767,"dataGaName":768,"dataGaLocation":663},"/topics/cloud-native/","cloud native",{"text":770,"config":771},"AI for Coding",{"href":772,"dataGaName":773,"dataGaLocation":663},"/topics/devops/ai-for-coding/","ai for coding",{"text":775,"config":776},"Agentic AI",{"href":777,"dataGaName":778,"dataGaLocation":663},"/topics/agentic-ai/","agentic ai",{"title":780,"links":781},"Solutions",[782,784,786,791,795,798,802,805,807,810,813,818],{"text":313,"config":783},{"href":308,"dataGaName":313,"dataGaLocation":663},{"text":302,"config":785},{"href":286,"dataGaName":287,"dataGaLocation":663},{"text":787,"config":788},"Agile development",{"href":789,"dataGaName":790,"dataGaLocation":663},"/solutions/agile-delivery/","agile delivery",{"text":792,"config":793},"SCM",{"href":298,"dataGaName":794,"dataGaLocation":663},"source code management",{"text":742,"config":796},{"href":291,"dataGaName":797,"dataGaLocation":663},"continuous integration & delivery",{"text":799,"config":800},"Value stream management",{"href":341,"dataGaName":801,"dataGaLocation":663},"value stream management",{"text":746,"config":803},{"href":804,"dataGaName":749,"dataGaLocation":663},"/solutions/gitops/",{"text":351,"config":806},{"href":354,"dataGaName":355,"dataGaLocation":663},{"text":808,"config":809},"Small business",{"href":360,"dataGaName":361,"dataGaLocation":663},{"text":811,"config":812},"Public sector",{"href":366,"dataGaName":367,"dataGaLocation":663},{"text":814,"config":815},"Education",{"href":816,"dataGaName":817,"dataGaLocation":663},"/solutions/education/","education",{"text":819,"config":820},"Financial services",{"href":821,"dataGaName":822,"dataGaLocation":663},"/solutions/finance/","financial services",{"title":374,"links":824},[825,827,829,831,834,836,839,841,843,845,847,849,851,853],{"text":387,"config":826},{"href":389,"dataGaName":390,"dataGaLocation":663},{"text":392,"config":828},{"href":394,"dataGaName":395,"dataGaLocation":663},{"text":397,"config":830},{"href":399,"dataGaName":400,"dataGaLocation":663},{"text":402,"config":832},{"href":404,"dataGaName":833,"dataGaLocation":663},"docs",{"text":425,"config":835},{"href":427,"dataGaName":428,"dataGaLocation":663},{"text":837,"config":838},"What's new",{"href":485,"dataGaName":486,"dataGaLocation":663},{"text":420,"config":840},{"href":422,"dataGaName":423,"dataGaLocation":663},{"text":439,"config":842},{"href":441,"dataGaName":442,"dataGaLocation":663},{"text":447,"config":844},{"href":449,"dataGaName":450,"dataGaLocation":663},{"text":452,"config":846},{"href":454,"dataGaName":455,"dataGaLocation":663},{"text":457,"config":848},{"href":459,"dataGaName":460,"dataGaLocation":663},{"text":462,"config":850},{"href":464,"dataGaName":465,"dataGaLocation":663},{"text":467,"config":852},{"href":469,"dataGaName":470,"dataGaLocation":663},{"text":472,"config":854},{"href":474,"dataGaName":475,"dataGaLocation":663},{"title":488,"links":856},[857,859,861,863,865,867,871,876,878,880,882],{"text":496,"config":858},{"href":498,"dataGaName":490,"dataGaLocation":663},{"text":501,"config":860},{"href":503,"dataGaName":504,"dataGaLocation":663},{"text":509,"config":862},{"href":511,"dataGaName":512,"dataGaLocation":663},{"text":514,"config":864},{"href":516,"dataGaName":517,"dataGaLocation":663},{"text":519,"config":866},{"href":521,"dataGaName":522,"dataGaLocation":663},{"text":868,"config":869},"Sustainability",{"href":870,"dataGaName":868,"dataGaLocation":663},"/sustainability/",{"text":872,"config":873},"Diversity, inclusion and belonging (DIB)",{"href":874,"dataGaName":875,"dataGaLocation":663},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":524,"config":877},{"href":526,"dataGaName":527,"dataGaLocation":663},{"text":534,"config":879},{"href":536,"dataGaName":537,"dataGaLocation":663},{"text":539,"config":881},{"href":541,"dataGaName":542,"dataGaLocation":663},{"text":883,"config":884},"Modern Slavery Transparency Statement",{"href":885,"dataGaName":886,"dataGaLocation":663},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":888},[889,892,895],{"text":890,"config":891},"Terms",{"href":715,"dataGaName":716,"dataGaLocation":663},{"text":893,"config":894},"Cookies",{"dataGaName":725,"dataGaLocation":663,"id":726,"isOneTrustButton":38},{"text":896,"config":897},"Privacy",{"href":720,"dataGaName":721,"dataGaLocation":663},[899],{"id":900,"title":7,"body":202,"config":901,"content":903,"description":202,"extension":907,"meta":908,"navigation":38,"path":909,"seo":910,"stem":911,"__hash__":912},"blogAuthors/en-us/blog/authors/dov-hershkovitch.yml",{"template":902},"BlogAuthor",{"name":7,"config":904},{"headshot":905,"ctfId":906},"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",[914,923,931],{"title":915,"description":916,"heroImage":917,"category":198,"date":918,"authors":919,"slug":922,"externalUrl":202},"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",[920,921],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":924,"description":925,"heroImage":926,"category":198,"date":927,"authors":928,"slug":930,"externalUrl":202},"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",[929],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":932,"description":933,"heroImage":934,"category":198,"date":935,"authors":936,"slug":938,"externalUrl":202},"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",[937],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":940},[941,955,967,979],{"id":942,"categories":943,"header":945,"text":946,"button":947,"image":952},"ai-modernization",[944],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":948,"config":949},"Get your AI maturity score",{"href":950,"dataGaName":951,"dataGaLocation":428},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":953},{"src":954},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":956,"categories":957,"header":959,"text":946,"button":960,"image":964},"devops-modernization",[958,763],"product","Are you just managing tools or shipping innovation?",{"text":961,"config":962},"Get your DevOps maturity score",{"href":963,"dataGaName":951,"dataGaLocation":428},"/assessments/devops-modernization-assessment/",{"config":965},{"src":966},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":968,"categories":969,"header":971,"text":946,"button":972,"image":976},"security-modernization",[970],"security","Are you trading speed for security?",{"text":973,"config":974},"Get your security maturity score",{"href":975,"dataGaName":951,"dataGaLocation":428},"/assessments/security-modernization-assessment/",{"config":977},{"src":978},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":980,"paths":981,"header":984,"text":985,"button":986,"image":991},"github-azure-migration",[982,983],"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":987,"config":988},"See how GitLab compares to GitHub",{"href":989,"dataGaName":990,"dataGaLocation":428},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":992},{"src":966},{"header":994,"blurb":995,"button":996,"secondaryButton":1001},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":997,"config":998},"Get your free trial",{"href":999,"dataGaName":228,"dataGaLocation":1000},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":701,"config":1002},{"href":553,"dataGaName":233,"dataGaLocation":1000},1786803751708]