
Module 11 Lesson 5: Global Monorepo
Master the massive. Explore the orchestration of a 100-service monorepo using Parent/Child pipelines, dynamic generation, and advanced caching to keep a large team synchronized.
Module 11 Lesson 5: Case Study: Global Monorepo
In this final study, we look at "OmniCorp," a company that keeps all its services (Auth, Payment, Search, Shipping, etc.) in One single Git repository.
1. The Challenge
- CI/CD Bloat: A standard pipeline would have 500+ jobs and take 4 hours.
- Merge Conflicts: 200 developers are pushing to the same repo every day.
- Network: Cloning the repo takes 10 minutes.
2. The Solution: Dynamic Orchestration
- Shallow Clones: Use
GIT_DEPTH: 1to only download the latest files. - Path-Based Triggers: Only run jobs for services that actually changed (Review Module 4, Lesson 2).
- Parent/Child Pipelines: The master YAML is only 20 lines. It just "Dispatches" work to the sub-folders.
3. The Blueprint (.gitlab-ci.yml)
# Master Parent Pipeline
include:
- local: ci-configs/common.yml
dispatch-payment:
trigger:
include: services/payment/.gitlab-ci.yml
strategy: depend
rules:
- changes: [services/payment/**/*]
dispatch-search:
trigger:
include: services/search/.gitlab-ci.yml
strategy: depend
rules:
- changes: [services/search/**/*]
4. The "Matrix" Optimization
For services that run on multiple OS versions (Windows, Linux, MacOS), the team uses the parallel: matrix keyword to generate 3 jobs from one single description. This ensures that "OmniCorp" apps work everywhere without writing 3 separate YAML files.
Exercise: The Orchestrator's Puzzle
- Service Alpha changed, triggering a Child pipeline. That child fails. Does the Parent pipeline show "Success" or "Failure"? (Review
strategy: depend). - Why is the
changes:rule the most important line in a Monorepo pipeline? - Imagine a developer changes a "Shared Library" in the
/libsfolder. How many child pipelines should be triggered? (How would you write that rule?) - Research: What is "Distributed Build Caching" (e.g., Bazel or Nx) and how does it integrate with GitLab CI?
Summary
You have completed Module 11: Real-World Case Studies. You have seen how GitLab CI/CD adapts to every environment, from the small JS startup and the legacy PHP shop to the highly secure bank and the global enterprise monorepo.
Next Module: The final quest: Module 12: Capstone Project: Enterprise CI/CD Pipeline.