Runner dedicado é uma das decisões com maior impacto na performance do CI/CD em times pequenos.
A razão é simples: o custo do tempo perdido (fila, builds inconsistentes) costuma ser maior do que o custo de uma máquina bem configurada.
Este post faz parte da série:
Mapa da série CI/CD
1) Sinais de que você precisa de runner dedicado
Se você marcar “sim” para 2 ou mais itens, vale avaliar seriamente:
2) O que runner dedicado resolve (e o que não resolve)
Resolve:
- reduz fila (mais capacidade disponível)
- aumenta previsibilidade (hardware e rede estáveis)
- facilita cache local (especialmente Docker layers)
Não resolve sozinho:
- Dockerfile ruim
- cache keys mal desenhadas
- dependências instáveis
- excesso de jobs serializados
3) Planejamento mínimo (para não virar “runner lixeira 2.0”)
Defina classes de job e tags/labels:
lint-test (leve)
build-heavy (pesado)
docker (build de imagem)
macos (Apple)
linux-x64 / linux-arm64 (arquitetura)
A regra é: tags/labels precisam representar decisões operacionais.
Leitura complementar:
4) Estratégia recomendada para time pequeno
Um arranjo típico e eficiente:
- Runner compartilhado (fallback): jobs leves, filas aceitáveis.
- Runner dedicado (principal): builds pesados e jobs que impactam entrega.
- Runner macOS (dedicado): apenas quando necessário (iOS/macOS).
5) Segurança: o ponto que ninguém quer discutir (mas precisa)
Runner self-hosted executa código do seu repositório.
Em termos práticos:
- você está rodando scripts no seu ambiente
- se o runner é compartilhado entre projetos, aumenta superfície de risco
Práticas de mitigação:
- restringir runner a grupos/projetos necessários
- separar runners por sensibilidade
- preferir executor isolado (container) quando possível
- manter sistema atualizado e com monitoramento básico
Checklist final
Referências