CI/CD para monorrepositórios
Explore estratégias para otimizar processos de CI/CD em monorrepositórios, incluindo a execução seletiva de tarefas com base nos arquivos alterados.
CI/CD para monorrepositórios é uma aula grátis de CI/CD with GitHub Actions & DevOps Pipelines no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de CI/CD with GitHub Actions & DevOps Pipelines, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de CI/CD with GitHub Actions & DevOps Pipelines inclui 4 aulas no total.
O que é um monorepo?
Um monorepo é um único repositório que contém o código de vários projetos ou aplicativos. Em vez de ter repositórios separados para cada serviço ou biblioteca, tudo fica reunido.
Pense nele como uma grande biblioteca com muitos livros (projetos) em um único prédio (repositório), em vez de um prédio separado para cada livro. Essa abordagem tem vantagens e desvantagens, especialmente para CI/CD.
Desafios de CI/CD em monorepos
Embora os monorepos ofereçam benefícios, como o compartilhamento mais fácil de código, eles podem trazer desafios para os pipelines de Integração Contínua/Entrega Contínua (CI/CD):
- Compilações lentas: se cada alteração acionar uma compilação completa e uma suíte de testes para *todos* os projetos, os pipelines ficarão muito lentos.
- Desperdício de recursos: executar desnecessariamente trabalhos não relacionados consome minutos de compilação e recursos.
- Frustração dos desenvolvedores: ciclos longos de feedback podem reduzir a velocidade do desenvolvimento.
A necessidade de CI/CD seletivo
A chave para um CI/CD eficiente em monorepos é a seletividade. Queremos que nossos pipelines sejam inteligentes o suficiente para:
- Identificar *o que* foi alterado.
- Executar trabalhos de CI/CD *somente* para os projetos afetados por essas alterações.
Essa abordagem economiza tempo, reduz o consumo de recursos e fornece feedback mais rápido aos desenvolvedores.
Acionamento por caminhos: `on.paths`
As Ações do GitHub oferecem uma maneira poderosa de obter seletividade usando o filtro paths nos acionadores do fluxo de trabalho. Você pode especificar diretórios ou arquivos que, quando alterados, devem acionar um fluxo de trabalho.
Se um arquivo fora desses caminhos for alterado, o fluxo de trabalho não será executado. Isso é perfeito para monorepos!
on:
push:
branches:
- main
paths:
- 'apps/frontend/**'
- 'libs/shared/**'Filtro de caminhos em ação
Aqui está um fluxo de trabalho simples que só é executado quando alterações são enviadas para arquivos dentro do diretório apps/backend ou para um arquivo README.md específico.
Isso garante que somente os testes ou as compilações relevantes sejam acionados para seu serviço de back-end.
name: Backend CI
on:
push:
branches:
- main
paths:
- 'apps/backend/**'
- 'README.md'
jobs:
build-backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build backend app
run: echo "Building backend..."Ignorando caminhos: `paths-ignore`
Às vezes, você quer que um fluxo de trabalho seja executado para *a maioria* das alterações, mas deseja ignorá-lo quando somente determinados arquivos forem modificados (por exemplo, documentação e arquivos de registro). O filtro paths-ignore é perfeito para isso.
Ele funciona de forma semelhante a paths, mas especifica os arquivos que *não* devem acionar o fluxo de trabalho.
on:
pull_request:
branches:
- main
paths-ignore:
- 'docs/**'
- '**/*.md'Execuções seletivas dinâmicas com `git diff`
Para uma lógica mais complexa, você pode usar comandos do Git, como git diff, nas etapas do fluxo de trabalho para verificar dinamicamente as alterações. Isso permite criar condições personalizadas.
Por exemplo, você pode verificar se ocorreram alterações em uma pasta específica e definir uma variável de saída para decidir se um trabalho subsequente deve ser executado.
Exemplo de execução condicional de um trabalho
Esta etapa do fluxo de trabalho usa git diff para verificar se algum arquivo em apps/api/ foi alterado entre o commit atual e a ramificação base. Se tiver sido alterado, ela define a variável de saída api_changed como 'true'.
Essa saída pode então controlar se um trabalho de 'implantação da API' será executado.
jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
api_changed: ${{ steps.diff.outputs.api_changed }}
steps:
- uses: actions/checkout@v4
- name: Check API changes
id: diff
run: |
if git diff --quiet ${{ github.event.before }} ${{ github.sha }} -- apps/api/;
then
echo "api_changed=false" >> $GITHUB_OUTPUT
else
echo "api_changed=true" >> $GITHUB_OUTPUT
fi
deploy-api:
needs: check-changes
if: needs.check-changes.outputs.api_changed == 'true'
runs-on: ubuntu-latest
steps:
- name: Deploy API
run: echo "Deploying API..."Estrutura de monorepo para CI/CD
Uma estrutura organizada de monorepo simplifica bastante o CI/CD seletivo. Agrupar arquivos e projetos relacionados em diretórios bem definidos facilita o uso eficaz dos filtros paths.
/apps/frontend/apps/backend/libs/shared/docs
Uma separação clara permite direcionar os fluxos de trabalho com precisão.
Questionário sobre CI/CD em monorepos
Otimizar o CI/CD para monorepos é essencial para manter a velocidade dos desenvolvedores e usar os recursos com eficiência. Considere quais estratégias respondem melhor aos desafios de uma base de código grande e consolidada.
Recapitulação e próximos passos
Você aprendeu a lidar com os desafios de CI/CD em monorepos implementando a execução seletiva de trabalhos. Usando os filtros paths das Ações do GitHub e técnicas avançadas com git diff, você pode garantir que seus pipelines executem somente o que for necessário.
Isso resulta em feedback mais rápido, custos reduzidos e uma experiência de desenvolvimento mais fluida. Continue explorando maneiras de ajustar seus fluxos de trabalho para obter ainda mais eficiência!
Perguntas Frequentes
A aula “CI/CD para monorrepositórios” é grátis?
Sim — o texto completo de “CI/CD para monorrepositórios” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de CI/CD with GitHub Actions & DevOps Pipelines, atualize para CoddyKit PRO. O curso de CI/CD with GitHub Actions & DevOps Pipelines inclui 4 aulas no total.
O que vou aprender em “CI/CD para monorrepositórios”?
Explore estratégias para otimizar processos de CI/CD em monorrepositórios, incluindo a execução seletiva de tarefas com base nos arquivos alterados. Você pratica CI/CD with GitHub Actions & DevOps Pipelines com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar CI/CD with GitHub Actions & DevOps Pipelines?
Nenhuma experiência prévia é necessária. CI/CD with GitHub Actions & DevOps Pipelines no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “CI/CD para monorrepositórios”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de CI/CD with GitHub Actions & DevOps Pipelines?
Sim. Cada aula de CI/CD with GitHub Actions & DevOps Pipelines inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- CI/CD para monorrepositórios
- Fluxos de trabalho entre repositórios
- Gerenciamento centralizado de fluxos de trabalho
- Filtragem por caminho e compilações seletivas