O Que É um Monorepo?
Um monorepo é um único repositório que abriga muitos projetos ou serviços juntos, compartilhando um histórico e um único lugar para coordenar mudanças.
Um monorepo coloca múltiplos projetos, bibliotecas e serviços em um repositório em vez de espalhá-los por muitos. Ele facilita mudanças transversais e o compartilhamento de código, mas também exige um ferramental mais inteligente, especialmente no CI, para que uma mudança em um canto não reconstrua tudo.
O que é um monorepo
Em um monorepo, vários projetos distintos vivem sob um repositório, frequentemente em diretórios separados. Eles compartilham um histórico de commits, um conjunto de branches e um lugar para issues e reviews. As empresas adotam monorepos para tornar o compartilhamento de código e as mudanças atômicas entre projetos diretos.
Benefícios e desafios
A vantagem é o versionamento unificado, a refatoração fácil através de fronteiras e o ferramental compartilhado. O desafio é a escala: o repositório cresce muito, e um CI ingênuo construiria e testaria tudo a cada mudança. Monorepos eficazes dependem de um ferramental que entenda as fronteiras dos projetos.
Construindo apenas o que mudou
A técnica-chave de CI é detectar quais arquivos mudaram e rodar apenas os projetos afetados. Filtros de caminho limitam um workflow a um diretório para que mudanças não relacionadas não o disparem.
on:
push:
paths:
- "services/api/**"Monorepos em CI/CD
Sem cuidado, os pipelines de monorepo se tornam lentos e caros à medida que cada commit se espalha por todos os projetos. Filtros de caminho, detecção de mudanças e cache de build mantêm as execuções proporcionais ao que realmente mudou. Runners gerenciados que escalam a concorrência ajudam aqui, já que um monorepo pode disparar muitos jobs independentes de uma vez.
Dicas de CI para monorepo
- Use filtros de caminho para que workflows rodem apenas para os projetos afetados.
- Faça cache de builds e dependências para evitar trabalho redundante.
- Paralelize jobs de projetos independentes para feedback mais rápido.
- Mantenha o histórico raso no CI para acelerar checkouts de um repositório grande.
Principais conclusões
- Um monorepo abriga muitos projetos em um repositório e histórico.
- Ele facilita o compartilhamento e a refatoração, mas exige um ferramental de CI inteligente.
- Filtros de caminho e cache mantêm os pipelines proporcionais às mudanças.