[{"data":1,"prerenderedAt":1038},["ShallowReactive",2],{"/blog/cross-project-pipeline":3,"navigation-en-us":256,"banner-en-us":682,"footer-en-us":692,"blog-post-authors-en-us-Itzik Gan Baruch":933,"blog-related-posts-en-us-cross-project-pipeline":948,"blog-promotions-en-us":974,"next-steps-en-us":1028},{"id":4,"title":5,"authors":6,"body":8,"category":232,"date":233,"description":234,"extension":235,"externalUrl":236,"faq":236,"featured":237,"heroImage":238,"meta":239,"navigation":240,"path":241,"seo":242,"slug":246,"stem":247,"tags":248,"template":254,"updatedDate":236,"__hash__":255},"blogPosts/en-us/blog/cross-project-pipeline.md","How to trigger multiple pipelines using GitLab CI/CD",[7],"Itzik Gan Baruch",{"type":9,"value":10,"toc":221},"minimark",[11,25,37,42,56,60,68,72,93,97,105,115,118,121,125,128,135,138,144,148,151,157,160,164,167,173,176,180,190,193,198,207],[12,13,14,19,20,24],"p",{},[15,16,18],"a",{"href":17},"/solutions/continuous-integration/","Continuous integration (CI)"," is the practice of ",[15,21,23],{"href":22},"/topics/ci-cd/","automating code building and testing"," before it is\nmerged into the master or default branch. This allows developers to merge code early and frequently, while\nmitigating the risk of introducing new bugs into the master source code repository.",[12,26,27,28,31,32,36],{},"While CI verifies that new code won't break when integrated with other code in the same repo, having\nall tests pass on that repo is only the first step. After running CI on the code, it is important to\ndeploy and run tests in a live environment. Moving from ",[15,29,30],{"href":17},"CI to continuous delivery and deployment (CD)","\nis ",[15,33,35],{"href":34},"/topics/devops/","the next step of DevOps maturity",". Deploying and then testing again allows code in one project\nto be tested together with other components and services which may be managed in other projects.",[38,39,41],"h2",{"id":40},"why-do-i-need-to-verify-that-my-code-works-with-other-components","Why do I need to verify that my code works with other components?",[12,43,44,45,49,50,55],{},"A good example could be a\nmicroservices architecture. Usually, different ",[15,46,48],{"href":47},"/topics/microservices/","microservices"," are managed in\ndifferent ",[15,51,54],{"href":52,"rel":53},"https://docs.gitlab.com/user/project/",[],"projects"," – each microservice has its own\nrepository and own pipeline. It's also very common for different teams to be\nresponsible for different microservices and their pipeline configurations. As a developer you will\nwant to confirm that your code changes don't break functionality of the dependent microservices.\nTherefore, you will want to execute tests on those microservices in addition to your project tests.",[38,57,59],{"id":58},"the-cross-project-pipeline","The cross-project pipeline",[12,61,62,63,67],{},"When running your ",[15,64,66],{"href":65},"/topics/ci-cd/cicd-pipeline/","project pipeline",", you also want to trigger cross-project or multi-project pipelines,\nwhich will eventually deploy and test the latest version of all dependent microservices. To\nachieve this goal you need an easy, flexible and convenient way to trigger other\npipelines as part of your project CI. GitLab CI/CD offers an easy way to run a cross-project\npipeline by simply adding a pipeline trigger job in the CI configuration file.",[38,69,71],{"id":70},"gitlab-cicd-configuration-file","GitLab CI/CD configuration file",[12,73,74,75,83,84,86,87,92],{},"In GitLab CI/CD, pipelines, and their component jobs and stages, are defined in\nthe ",[15,76,79],{"href":77,"rel":78},"https://docs.gitlab.com/ci/yaml/",[],[80,81,82],"code",{},".gitlab-ci.yml"," file for each project. The\nfile is part of the project repository. It is fully versioned and developers can edit it with any\ncommon IDE of their choice. They do not have to ask the system admin or DevOps team to make\nchanges in the pipeline configuration as it is self-service. The ",[80,85,82],{}," file defines the structure\nand order of the pipelines and determines what to execute\nusing ",[15,88,91],{"href":89,"rel":90},"https://docs.gitlab.com/runner/",[],"GitLab Runner"," (the agent that runs the jobs), and what\ndecisions to make when specific conditions are encountered, like when a process succeeds or fails.",[38,94,96],{"id":95},"add-a-cross-project-pipeline-triggering-job","Add a cross-project pipeline triggering job",[12,98,99,100,104],{},"Since GitLab 11.8, GitLab provides a new CI/CD configuration syntax for triggering cross-project\npipelines found in the ",[15,101,103],{"href":77,"rel":102},[],"pipeline configuration file",".\nThe following code illustrates configuring a bridge job to trigger a downstream pipeline:",[106,107,113],"pre",{"className":108,"code":110,"language":111,"meta":112},[109],"language-text","//job1 is a job in the upstream project\ndeploy:\n    stage: Deploy\n    script: this is my script\n\n//job2 is a bridge job in the upstream project which triggers cross-project pipeline\nAndroid:\n    stage: Trigger-cross-projects\n            trigger: mobile/android\n","text","",[80,114,110],{"__ignoreMap":112},[12,116,117],{},"In the example above, as soon as the deploy job succeeds in the deploy stage, the Android\nbridge job is going to be started. The initial status of this job will be pending. GitLab will\ncreate a downstream pipeline in the mobile/android project and, as soon as the pipeline gets created,\nthe Android job will succeed. In this case mobile/android is a full path to that project.",[12,119,120],{},"The user who created the upstream pipeline needs to have access rights to the downstream\nproject (mobile/android in this case). If a downstream project cannot be found, or a user does not\nhave access rights to create a pipeline there, the Android job will be marked as failed.",[38,122,124],{"id":123},"browse-from-upstream-pipeline-graphs-to-downstream","Browse from upstream pipeline graphs to downstream",[12,126,127],{},"GitLab CI/CD makes it possible to visualize the pipeline configuration. In the below illustration, the\nbuild, test, and deploy stages are parts of the upstream project. Once the deploy job succeeds, four\ncross-projects will be triggered in parallel and you will be able to browse to them by clicking on\none of the downstream jobs.",[12,129,130],{},[131,132],"img",{"alt":133,"src":134},"Build, test and deploy stages","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397889/blog/Content%20Images/Cross-proj-img1.png",[12,136,137],{},"In the below illustration the Service – Finance downstream pipeline is visible. We can now scroll\nleft to the upstream pipeline, scroll right back to the downstream pipeline or select another\ndownstream pipeline.",[12,139,140],{},[131,141],{"alt":142,"src":143},"Service – Finance pipeline","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397890/blog/Content%20Images/Cross-proj-img2.png",[38,145,147],{"id":146},"specifying-a-downstream-pipeline-branch","Specifying a downstream pipeline branch",[12,149,150],{},"It is possible to specify a branch name that a downstream pipeline will use:",[106,152,155],{"className":153,"code":154,"language":111,"meta":112},[109],"trigger:\n     project: mobile/android\n     branch: stable-11-2\n",[80,156,154],{"__ignoreMap":112},[12,158,159],{},"Use a project keyword to specify the full path to a downstream project. Use a branch keyword to\nspecify a branch name. GitLab will use a commit that is currently on the HEAD of the branch\nwhen creating a downstream pipeline.",[38,161,163],{"id":162},"passing-variables-to-a-downstream-pipeline","Passing variables to a downstream pipeline",[12,165,166],{},"Sometimes you might want to pass variables to a downstream pipeline. You can do that using\nthe variables keyword, just like you would when defining a regular job.",[106,168,171],{"className":169,"code":170,"language":111,"meta":112},[109],"Android:\n           variable:\n         ENVIRONMENT: ‘This is the variable value for the downstream pipeline’\n           stage: Trigger-cross-projects\n           trigger: mobile/android\n",[80,172,170],{"__ignoreMap":112},[12,174,175],{},"The ENVIRONMENT variable will be passed to every job defined in a downstream pipeline. It will be\navailable as an environment variable when GitLab Runner picks a job.",[38,177,179],{"id":178},"cross-project-pipeline-summary","Cross-project pipeline summary",[12,181,182,183,185,186,189],{},"The ",[80,184,82],{}," file defines the order of the CI/CD stages, which jobs to execute, and at which\nconditions to run or skip a job's execution. Adding a 'bridge job' with the ",[80,187,188],{},"trigger"," keyword to\nthis file can be used to trigger cross-project pipelines. We can pass parameters to jobs in\ndownstream pipelines, and even define a branch that a downstream pipeline will use.",[12,191,192],{},"Pipelines can be complex structures with many sequential and parallel jobs, and as we just\nlearned, sometimes they can trigger downstream pipelines. To make it easier to understand the\nflow of a pipeline, including its downstream pipelines, GitLab has pipeline graphs for viewing\npipelines and each pipeline's status.",[12,194,195],{},[131,196],{"alt":142,"src":197},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397890/blog/Content%20Images/Cross-proj-img4.png",[12,199,200,201,206],{},"Hey community, what else would you like me to explain in a blog post? Let me know in the comments or tweet us ",[15,202,205],{"href":203,"rel":204},"https://twitter.com/gitlab",[],"@gitlab",".",[12,208,209,210,215,216],{},"Cover image by ",[15,211,214],{"href":212,"rel":213},"https://unsplash.com/@realaxer",[],"Tian Kuan"," on ",[15,217,220],{"href":218,"rel":219},"https://unsplash.com",[],"Unsplash",{"title":112,"searchDepth":222,"depth":222,"links":223},2,[224,225,226,227,228,229,230,231],{"id":40,"depth":222,"text":41},{"id":58,"depth":222,"text":59},{"id":70,"depth":222,"text":71},{"id":95,"depth":222,"text":96},{"id":123,"depth":222,"text":124},{"id":146,"depth":222,"text":147},{"id":162,"depth":222,"text":163},{"id":178,"depth":222,"text":179},"engineering","2019-07-24","Discover how to trigger and visualize pipelines when you set up GitLab CI/CD across multiple projects.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666903/Blog/Hero%20Images/pipeline.jpg",{},true,"/en-us/blog/cross-project-pipeline",{"title":5,"description":234,"ogTitle":5,"ogDescription":234,"noIndex":237,"ogImage":238,"ogUrl":243,"ogSiteName":244,"ogType":245,"canonicalUrls":243},"https://about.gitlab.com/blog/cross-project-pipeline","https://about.gitlab.com","article","cross-project-pipeline","en-us/blog/cross-project-pipeline",[249,250,251,252,253],"CI/CD","DevOps","features","testing","workflow","BlogPost","aLGDdlVuBG8L39MqkOeJThd0J3Lc-rcSEn5Lf7fhsCM",{"logo":257,"freeTrial":262,"sales":267,"login":272,"items":277,"search":602,"minimal":633,"duo":652,"switchNav":661,"pricingDeployment":672},{"config":258},{"href":259,"dataGaName":260,"dataGaLocation":261},"/","gitlab logo","header",{"text":263,"config":264},"Get free trial",{"href":265,"dataGaName":266,"dataGaLocation":261},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":268,"config":269},"Request a demo",{"href":270,"dataGaName":271,"dataGaLocation":261},"/sales/?contact-topic=request-demo","sales",{"text":273,"config":274},"Sign in",{"href":275,"dataGaName":276,"dataGaLocation":261},"https://gitlab.com/users/sign_in/","sign in",[278,307,405,410,524,580],{"text":279,"config":280,"menu":282},"Platform",{"dataNavLevelOne":281},"platform",{"type":283,"columns":284},"cards",[285,291,299],{"title":279,"description":286,"link":287},"The intelligent orchestration platform for DevSecOps",{"text":288,"config":289},"Explore our Platform",{"href":290,"dataGaName":281,"dataGaLocation":261},"/platform/",{"title":292,"description":293,"link":294},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":295,"config":296},"Meet GitLab Duo",{"href":297,"dataGaName":298,"dataGaLocation":261},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":300,"description":301,"link":302},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":303,"config":304},"Learn more",{"href":305,"dataGaName":306,"dataGaLocation":261},"/why-gitlab/","why gitlab",{"text":308,"left":240,"config":309,"menu":311},"Product",{"dataNavLevelOne":310},"solutions",{"type":312,"link":313,"columns":317,"feature":384},"lists",{"text":314,"config":315},"View all Solutions",{"href":316,"dataGaName":310,"dataGaLocation":261},"/solutions/",[318,340,363],{"title":319,"description":320,"link":321,"items":326},"Automation","CI/CD and automation to accelerate deployment",{"config":322},{"icon":323,"href":324,"dataGaName":325,"dataGaLocation":261},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[327,329,332,336],{"text":249,"config":328},{"href":17,"dataGaLocation":261,"dataGaName":249},{"text":292,"config":330},{"href":297,"dataGaLocation":261,"dataGaName":331},"gitlab duo agent platform - product menu",{"text":333,"config":334},"Source Code Management",{"href":335,"dataGaLocation":261,"dataGaName":333},"/solutions/source-code-management/",{"text":337,"config":338},"Automated Software Delivery",{"href":324,"dataGaLocation":261,"dataGaName":339},"Automated software delivery",{"title":341,"description":342,"link":343,"items":348},"Security","Deliver code faster without compromising security",{"config":344},{"href":345,"dataGaName":346,"dataGaLocation":261,"icon":347},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[349,353,358],{"text":350,"config":351},"Application Security Testing",{"href":345,"dataGaName":352,"dataGaLocation":261},"Application security testing",{"text":354,"config":355},"Software Supply Chain Security",{"href":356,"dataGaLocation":261,"dataGaName":357},"/solutions/supply-chain/","Software supply chain security",{"text":359,"config":360},"Software Compliance",{"href":361,"dataGaName":362,"dataGaLocation":261},"/solutions/software-compliance/","software compliance",{"title":364,"link":365,"items":370},"Measurement",{"config":366},{"icon":367,"href":368,"dataGaName":369,"dataGaLocation":261},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[371,375,379],{"text":372,"config":373},"Visibility & Measurement",{"href":368,"dataGaLocation":261,"dataGaName":374},"Visibility and Measurement",{"text":376,"config":377},"Value Stream Management",{"href":378,"dataGaLocation":261,"dataGaName":376},"/solutions/value-stream-management/",{"text":380,"config":381},"Analytics & Insights",{"href":382,"dataGaLocation":261,"dataGaName":383},"/solutions/analytics-and-insights/","Analytics and insights",{"title":385,"type":312,"items":386},"GitLab for",[387,393,399],{"text":388,"config":389},"Enterprise",{"icon":390,"href":391,"dataGaLocation":261,"dataGaName":392},"Building","/enterprise/","enterprise",{"text":394,"config":395},"Small Business",{"icon":396,"href":397,"dataGaLocation":261,"dataGaName":398},"Work","/small-business/","small business",{"text":400,"config":401},"Public Sector",{"icon":402,"href":403,"dataGaLocation":261,"dataGaName":404},"Organization","/solutions/public-sector/","public sector",{"text":406,"config":407},"Pricing",{"href":408,"dataGaName":409,"dataGaLocation":261,"dataNavLevelOne":409},"/pricing/","pricing",{"text":411,"config":412,"menu":414},"Resources",{"dataNavLevelOne":413},"resources",{"type":312,"link":415,"columns":419,"feature":513},{"text":416,"config":417},"View all resources",{"href":418,"dataGaName":413,"dataGaLocation":261},"/resources/",[420,453,480],{"title":421,"items":422},"Getting started",[423,428,433,438,443,448],{"text":424,"config":425},"Install",{"href":426,"dataGaName":427,"dataGaLocation":261},"/install/","install",{"text":429,"config":430},"Quick start guides",{"href":431,"dataGaName":432,"dataGaLocation":261},"/get-started/","quick setup checklists",{"text":434,"config":435},"Learn",{"href":436,"dataGaLocation":261,"dataGaName":437},"https://university.gitlab.com/","learn",{"text":439,"config":440},"Product documentation",{"href":441,"dataGaName":442,"dataGaLocation":261},"https://docs.gitlab.com/","product documentation",{"text":444,"config":445},"Best practice videos",{"href":446,"dataGaName":447,"dataGaLocation":261},"/getting-started-videos/","best practice videos",{"text":449,"config":450},"Integrations",{"href":451,"dataGaName":452,"dataGaLocation":261},"/integrations/","integrations",{"title":454,"items":455},"Discover",[456,461,466,471,475],{"text":457,"config":458},"Customer success stories",{"href":459,"dataGaName":460,"dataGaLocation":261},"/customers/","customer success stories",{"text":462,"config":463},"Blog",{"href":464,"dataGaName":465,"dataGaLocation":261},"/blog/","blog",{"text":467,"config":468},"Demo Hub",{"href":469,"dataGaName":470,"dataGaLocation":261},"/demo-hub/","demo hub",{"text":472,"config":473},"The Source",{"href":474,"dataGaName":465,"dataGaLocation":261},"/the-source/",{"text":476,"config":477},"Remote",{"href":478,"dataGaName":479,"dataGaLocation":261},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":481,"items":482},"Connect",[483,488,493,498,503,508],{"text":484,"config":485},"GitLab Services",{"href":486,"dataGaName":487,"dataGaLocation":261},"/services/","services",{"text":489,"config":490},"Contribute",{"href":491,"dataGaName":492,"dataGaLocation":261},"https://contributors.gitlab.com","contribute",{"text":494,"config":495},"Community",{"href":496,"dataGaName":497,"dataGaLocation":261},"/community/","community",{"text":499,"config":500},"Forum",{"href":501,"dataGaName":502,"dataGaLocation":261},"https://forum.gitlab.com/","forum",{"text":504,"config":505},"Events",{"href":506,"dataGaName":507,"dataGaLocation":261},"/events/","events",{"text":509,"config":510},"Partners",{"href":511,"dataGaName":512,"dataGaLocation":261},"/partners/","partners",{"config":514,"title":517,"text":518,"link":519},{"background":515,"textColor":516},"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":520,"config":521},"Read the latest",{"href":522,"dataGaName":523,"dataGaLocation":261},"/whats-new/","whats new",{"text":525,"config":526,"menu":528},"Company",{"dataNavLevelOne":527},"company",{"type":312,"columns":529},[530],{"items":531},[532,537,543,545,550,555,560,565,570,575],{"text":533,"config":534},"About",{"href":535,"dataGaName":536,"dataGaLocation":261},"/company/","about",{"text":538,"config":539,"footerGa":542},"Jobs",{"href":540,"dataGaName":541,"dataGaLocation":261},"/jobs/","jobs",{"dataGaName":541},{"text":504,"config":544},{"href":506,"dataGaName":507,"dataGaLocation":261},{"text":546,"config":547},"Leadership",{"href":548,"dataGaName":549,"dataGaLocation":261},"/company/team/e-group/","leadership",{"text":551,"config":552},"Handbook",{"href":553,"dataGaName":554,"dataGaLocation":261},"https://handbook.gitlab.com/","handbook",{"text":556,"config":557},"Investor relations",{"href":558,"dataGaName":559,"dataGaLocation":261},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":561,"config":562},"Trust Center",{"href":563,"dataGaName":564,"dataGaLocation":261},"/security/","trust center",{"text":566,"config":567},"AI Transparency Center",{"href":568,"dataGaName":569,"dataGaLocation":261},"/ai-transparency-center/","ai transparency center",{"text":571,"config":572},"Newsletter",{"href":573,"dataGaName":574,"dataGaLocation":261},"/company/contact/#contact-forms","newsletter",{"text":576,"config":577},"Press",{"href":578,"dataGaName":579,"dataGaLocation":261},"/press/","press",{"text":581,"config":582,"menu":583},"Contact us",{"dataNavLevelOne":527},{"type":312,"columns":584},[585],{"items":586},[587,592,597],{"text":588,"config":589},"Talk to sales",{"href":590,"dataGaName":591,"dataGaLocation":261},"/sales/","talk to sales",{"text":593,"config":594},"Support portal",{"href":595,"dataGaName":596,"dataGaLocation":261},"https://support.gitlab.com/hc/en-us","support portal",{"text":598,"config":599},"Customer portal",{"href":600,"dataGaName":601,"dataGaLocation":261},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":603,"login":604,"suggestions":611},"Close",{"text":605,"link":606},"To search repositories and projects, login to",{"text":607,"config":608},"gitlab.com",{"href":275,"dataGaName":609,"dataGaLocation":610},"search login","search",{"text":612,"default":613},"Suggestions",[614,616,620,622,626,630],{"text":292,"config":615},{"href":297,"dataGaName":292,"dataGaLocation":610},{"text":617,"config":618},"Code Suggestions (AI)",{"href":619,"dataGaName":617,"dataGaLocation":610},"/solutions/code-suggestions/",{"text":249,"config":621},{"href":17,"dataGaName":249,"dataGaLocation":610},{"text":623,"config":624},"GitLab on AWS",{"href":625,"dataGaName":623,"dataGaLocation":610},"/partners/technology-partners/aws/",{"text":627,"config":628},"GitLab on Google Cloud",{"href":629,"dataGaName":627,"dataGaLocation":610},"/partners/technology-partners/google-cloud-platform/",{"text":631,"config":632},"Why GitLab?",{"href":305,"dataGaName":631,"dataGaLocation":610},{"freeTrial":634,"mobileIcon":639,"desktopIcon":644,"secondaryButton":647},{"text":635,"config":636},"Start free trial",{"href":637,"dataGaName":266,"dataGaLocation":638},"https://gitlab.com/-/trials/new/","nav",{"altText":640,"config":641},"Gitlab Icon",{"src":642,"dataGaName":643,"dataGaLocation":638},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":640,"config":645},{"src":646,"dataGaName":643,"dataGaLocation":638},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":648,"config":649},"Get Started",{"href":650,"dataGaName":651,"dataGaLocation":638},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":653,"mobileIcon":657,"desktopIcon":659},{"text":654,"config":655},"Learn more about GitLab Duo",{"href":297,"dataGaName":656,"dataGaLocation":638},"gitlab duo",{"altText":640,"config":658},{"src":642,"dataGaName":643,"dataGaLocation":638},{"altText":640,"config":660},{"src":646,"dataGaName":643,"dataGaLocation":638},{"button":662,"mobileIcon":667,"desktopIcon":669},{"text":663,"config":664},"/switch",{"href":665,"dataGaName":666,"dataGaLocation":638},"#contact","switch",{"altText":640,"config":668},{"src":642,"dataGaName":643,"dataGaLocation":638},{"altText":640,"config":670},{"src":671,"dataGaName":643,"dataGaLocation":638},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":673,"mobileIcon":678,"desktopIcon":680},{"text":674,"config":675},"Back to pricing",{"href":408,"dataGaName":676,"dataGaLocation":638,"icon":677},"back to pricing","GoBack",{"altText":640,"config":679},{"src":642,"dataGaName":643,"dataGaLocation":638},{"altText":640,"config":681},{"src":646,"dataGaName":643,"dataGaLocation":638},{"title":683,"titleMobile":684,"button":685,"config":690},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":303,"config":686},{"href":687,"dataGaName":688,"dataGaLocation":689},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":691,"disabled":237},"release",{"data":693},{"text":694,"source":695,"edit":701,"contribute":706,"config":711,"items":715,"minimal":922},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":696,"config":697},"View page source",{"href":698,"dataGaName":699,"dataGaLocation":700},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":702,"config":703},"Edit this page",{"href":704,"dataGaName":705,"dataGaLocation":700},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":707,"config":708},"Please contribute",{"href":709,"dataGaName":710,"dataGaLocation":700},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":203,"facebook":712,"youtube":713,"linkedin":714},"https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[716,763,814,858,890],{"title":406,"links":717,"subMenu":732},[718,722,727],{"text":719,"config":720},"View plans",{"href":408,"dataGaName":721,"dataGaLocation":700},"view plans",{"text":723,"config":724},"Why Premium?",{"href":725,"dataGaName":726,"dataGaLocation":700},"/pricing/premium/","why premium",{"text":728,"config":729},"Why Ultimate?",{"href":730,"dataGaName":731,"dataGaLocation":700},"/pricing/ultimate/","why ultimate",[733],{"title":734,"links":735},"Contact Us",[736,739,741,743,748,753,758],{"text":737,"config":738},"Contact sales",{"href":590,"dataGaName":271,"dataGaLocation":700},{"text":593,"config":740},{"href":595,"dataGaName":596,"dataGaLocation":700},{"text":598,"config":742},{"href":600,"dataGaName":601,"dataGaLocation":700},{"text":744,"config":745},"Status",{"href":746,"dataGaName":747,"dataGaLocation":700},"https://status.gitlab.com/","status",{"text":749,"config":750},"Terms of use",{"href":751,"dataGaName":752,"dataGaLocation":700},"/terms/","terms of use",{"text":754,"config":755},"Privacy statement",{"href":756,"dataGaName":757,"dataGaLocation":700},"/privacy/","privacy statement",{"text":759,"config":760},"Cookie preferences",{"dataGaName":761,"dataGaLocation":700,"id":762,"isOneTrustButton":240},"cookie preferences","ot-sdk-btn",{"title":308,"links":764,"subMenu":773},[765,769],{"text":766,"config":767},"DevSecOps platform",{"href":290,"dataGaName":768,"dataGaLocation":700},"devsecops platform",{"text":770,"config":771},"AI-Assisted Development",{"href":297,"dataGaName":772,"dataGaLocation":700},"ai-assisted development",[774],{"title":775,"links":776},"Topics",[777,781,786,789,794,799,804,809],{"text":778,"config":779},"CICD",{"href":22,"dataGaName":780,"dataGaLocation":700},"cicd",{"text":782,"config":783},"GitOps",{"href":784,"dataGaName":785,"dataGaLocation":700},"/topics/gitops/","gitops",{"text":250,"config":787},{"href":34,"dataGaName":788,"dataGaLocation":700},"devops",{"text":790,"config":791},"Version Control",{"href":792,"dataGaName":793,"dataGaLocation":700},"/topics/version-control/","version control",{"text":795,"config":796},"DevSecOps",{"href":797,"dataGaName":798,"dataGaLocation":700},"/topics/devsecops/","devsecops",{"text":800,"config":801},"Cloud Native",{"href":802,"dataGaName":803,"dataGaLocation":700},"/topics/cloud-native/","cloud native",{"text":805,"config":806},"AI for Coding",{"href":807,"dataGaName":808,"dataGaLocation":700},"/topics/devops/ai-for-coding/","ai for coding",{"text":810,"config":811},"Agentic AI",{"href":812,"dataGaName":813,"dataGaLocation":700},"/topics/agentic-ai/","agentic ai",{"title":815,"links":816},"Solutions",[817,819,821,826,830,833,837,840,842,845,848,853],{"text":350,"config":818},{"href":345,"dataGaName":350,"dataGaLocation":700},{"text":339,"config":820},{"href":324,"dataGaName":325,"dataGaLocation":700},{"text":822,"config":823},"Agile development",{"href":824,"dataGaName":825,"dataGaLocation":700},"/solutions/agile-delivery/","agile delivery",{"text":827,"config":828},"SCM",{"href":335,"dataGaName":829,"dataGaLocation":700},"source code management",{"text":778,"config":831},{"href":17,"dataGaName":832,"dataGaLocation":700},"continuous integration & delivery",{"text":834,"config":835},"Value stream management",{"href":378,"dataGaName":836,"dataGaLocation":700},"value stream management",{"text":782,"config":838},{"href":839,"dataGaName":785,"dataGaLocation":700},"/solutions/gitops/",{"text":388,"config":841},{"href":391,"dataGaName":392,"dataGaLocation":700},{"text":843,"config":844},"Small business",{"href":397,"dataGaName":398,"dataGaLocation":700},{"text":846,"config":847},"Public sector",{"href":403,"dataGaName":404,"dataGaLocation":700},{"text":849,"config":850},"Education",{"href":851,"dataGaName":852,"dataGaLocation":700},"/solutions/education/","education",{"text":854,"config":855},"Financial services",{"href":856,"dataGaName":857,"dataGaLocation":700},"/solutions/finance/","financial services",{"title":411,"links":859},[860,862,864,866,869,871,874,876,878,880,882,884,886,888],{"text":424,"config":861},{"href":426,"dataGaName":427,"dataGaLocation":700},{"text":429,"config":863},{"href":431,"dataGaName":432,"dataGaLocation":700},{"text":434,"config":865},{"href":436,"dataGaName":437,"dataGaLocation":700},{"text":439,"config":867},{"href":441,"dataGaName":868,"dataGaLocation":700},"docs",{"text":462,"config":870},{"href":464,"dataGaName":465,"dataGaLocation":700},{"text":872,"config":873},"What's new",{"href":522,"dataGaName":523,"dataGaLocation":700},{"text":457,"config":875},{"href":459,"dataGaName":460,"dataGaLocation":700},{"text":476,"config":877},{"href":478,"dataGaName":479,"dataGaLocation":700},{"text":484,"config":879},{"href":486,"dataGaName":487,"dataGaLocation":700},{"text":489,"config":881},{"href":491,"dataGaName":492,"dataGaLocation":700},{"text":494,"config":883},{"href":496,"dataGaName":497,"dataGaLocation":700},{"text":499,"config":885},{"href":501,"dataGaName":502,"dataGaLocation":700},{"text":504,"config":887},{"href":506,"dataGaName":507,"dataGaLocation":700},{"text":509,"config":889},{"href":511,"dataGaName":512,"dataGaLocation":700},{"title":525,"links":891},[892,894,896,898,900,902,906,911,913,915,917],{"text":533,"config":893},{"href":535,"dataGaName":527,"dataGaLocation":700},{"text":538,"config":895},{"href":540,"dataGaName":541,"dataGaLocation":700},{"text":546,"config":897},{"href":548,"dataGaName":549,"dataGaLocation":700},{"text":551,"config":899},{"href":553,"dataGaName":554,"dataGaLocation":700},{"text":556,"config":901},{"href":558,"dataGaName":559,"dataGaLocation":700},{"text":903,"config":904},"Sustainability",{"href":905,"dataGaName":903,"dataGaLocation":700},"/sustainability/",{"text":907,"config":908},"Diversity, inclusion and belonging (DIB)",{"href":909,"dataGaName":910,"dataGaLocation":700},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":561,"config":912},{"href":563,"dataGaName":564,"dataGaLocation":700},{"text":571,"config":914},{"href":573,"dataGaName":574,"dataGaLocation":700},{"text":576,"config":916},{"href":578,"dataGaName":579,"dataGaLocation":700},{"text":918,"config":919},"Modern Slavery Transparency Statement",{"href":920,"dataGaName":921,"dataGaLocation":700},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":923},[924,927,930],{"text":925,"config":926},"Terms",{"href":751,"dataGaName":752,"dataGaLocation":700},{"text":928,"config":929},"Cookies",{"dataGaName":761,"dataGaLocation":700,"id":762,"isOneTrustButton":240},{"text":931,"config":932},"Privacy",{"href":756,"dataGaName":757,"dataGaLocation":700},[934],{"id":935,"title":7,"body":236,"config":936,"content":938,"description":236,"extension":942,"meta":943,"navigation":240,"path":944,"seo":945,"stem":946,"__hash__":947},"blogAuthors/en-us/blog/authors/itzik-gan-baruch.yml",{"template":937},"BlogAuthor",{"name":7,"config":939},{"headshot":940,"ctfId":941},"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",[949,958,966],{"title":950,"description":951,"heroImage":952,"category":232,"date":953,"authors":954,"slug":957,"externalUrl":236},"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",[955,956],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":959,"description":960,"heroImage":961,"category":232,"date":962,"authors":963,"slug":965,"externalUrl":236},"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",[964],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":967,"description":968,"heroImage":969,"category":232,"date":970,"authors":971,"slug":973,"externalUrl":236},"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",[972],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":975},[976,990,1002,1014],{"id":977,"categories":978,"header":980,"text":981,"button":982,"image":987},"ai-modernization",[979],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":983,"config":984},"Get your AI maturity score",{"href":985,"dataGaName":986,"dataGaLocation":465},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":988},{"src":989},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":991,"categories":992,"header":994,"text":981,"button":995,"image":999},"devops-modernization",[993,798],"product","Are you just managing tools or shipping innovation?",{"text":996,"config":997},"Get your DevOps maturity score",{"href":998,"dataGaName":986,"dataGaLocation":465},"/assessments/devops-modernization-assessment/",{"config":1000},{"src":1001},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1003,"categories":1004,"header":1006,"text":981,"button":1007,"image":1011},"security-modernization",[1005],"security","Are you trading speed for security?",{"text":1008,"config":1009},"Get your security maturity score",{"href":1010,"dataGaName":986,"dataGaLocation":465},"/assessments/security-modernization-assessment/",{"config":1012},{"src":1013},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1015,"paths":1016,"header":1019,"text":1020,"button":1021,"image":1026},"github-azure-migration",[1017,1018],"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":1022,"config":1023},"See how GitLab compares to GitHub",{"href":1024,"dataGaName":1025,"dataGaLocation":465},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1027},{"src":1001},{"header":1029,"blurb":1030,"button":1031,"secondaryButton":1036},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1032,"config":1033},"Get your free trial",{"href":1034,"dataGaName":266,"dataGaLocation":1035},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":737,"config":1037},{"href":590,"dataGaName":271,"dataGaLocation":1035},1786803748630]