self hosted github runner
CI e build runners
Builds que terminam antes de você trocar de aba.
O que implantaríamos
€ 44,03/mês
€ 62,90−30% anual
Minutos de CI hospedados são medidos, enfileirados e lentos, e a curva de custo fica feia no momento em que o time é produtivo. Um par de instâncias com núcleos dedicados e NVMe rápido supera a maioria dos níveis hospedados e custa um valor fixo por mês, independentemente de quantas vezes você faz push. Virtualização aninhada está incluída, então Docker-in-Docker e suites de teste baseadas em KVM funcionam sem gambiarras.
Por que essa configuração
TORQUE dá a contagem de núcleos, Gen5 NVMe dá a vazão de artefatos, e virtualização aninhada não custa nada. Registre os runners no seu forge e cancele o plano hospedado.
O que implantaríamos
Dimensionamento
Dois núcleos dedicados e 4 GB por job concorrente é o mínimo; linguagens compiladas querem 4 núcleos e 8 GB. Um nó TORQUE de 32 núcleos, portanto, executa 8 jobs pesados ou cerca de 14 leves, não 32. O disco de rascunho importa mais do que qualquer um deles — reserve 30-50 GB por job concorrente em NVMe para camadas de imagem, árvores de dependência e saída de build. Adicione um núcleo por nó se os jobs precisarem de virtualização aninhada. O tempo de espera na fila, não a duração do job, indica quando adicionar um nó.
Virtualização aninhada, e quando você precisa dela
A maioria dos CI roda bem em um contêiner. Três casos precisam de um hipervisor real dentro do convidado: testar imagens de VM e cloud-init, rodar emuladores Android ou embarcados com aceleração KVM, e qualquer job onde um pull request não confiável executa código que não deve alcançar o runner. TORQUE expõe SVM ao convidado, então KVM funciona dentro do seu VPS e o emulador roda em velocidade nativa em vez de emulação por software, o que é uma diferença de cerca de uma ordem de magnitude em suites de teste Android. O custo é um núcleo de overhead para o hipervisor externo e disco ligeiramente mais lento no convidado interno. Orce para ambos.
O caminho do artefato geralmente é o gargalo
Perfile um pipeline lento e o passo de compilação raramente é a maior barra. Puxar imagens base, restaurar caches, enviar artefatos e empurrar o resultado é responsável pela maior parte do tempo de parede em builds típicos. Três correções, em ordem de retorno: mantenha um cache de pull-through de registro na mesma VLAN privada para que as camadas cheguem pela rede local em vez da internet pública; coloque o rascunho em NVMe para que a extração de camadas não seja limitada por seek; e torne a chave de cache precisa, para restaurar o que você precisa em vez de um arquivo monolítico. Núcleos Bergamo densos são baratos. Esperar pela rede não é.
O que dá errado
- Empilhar overlayfs sobre overlayfs para Docker-in-Docker. Drivers overlay aninhados são lentos e ocasionalmente corrompem camadas. Use um dispositivo de bloco dedicado dentro do job, ou execute o builder sobre KVM aninhado.
- Nunca fazer prune. Imagens órfãs, caches de build e volumes obsoletos preenchem o NVMe de rascunho em semanas, e o primeiro sintoma é um build falhando em uma etapa que funcionava há um ano. Faça prune por timer, não por falha.
- Deixar a transferência de cache exceder o tempo de build. Um cache de dependências de 3 GB puxado e enviado por job pode custar mais do que compilar do zero. Meça ambos e mantenha o cache na mesma VLAN privada dos runners.
Ajuste a máquina
- Tudo mais — Virtualização aninhada · Incluído
- Agendamento de CPU — Núcleos físicos dedicados · € 9
- Armazenamento e criptografia — ZFS com snapshots horários · € 7
Mais
Feito para trabalhos específicos
Hospedagem de servidor de jogos
Tick rate é um problema de thread única. Todo o resto é ruído.
VPS para trading e baixa latência
Distância até o mecanismo de matching, e nada entre você e o wire.
Endpoints privados de VPN e proxy
Sua própria saída, em uma jurisdição que você escolheu de propósito.
Seedboxes e armazenamento em massa
Terabytes que continuam baratos e uma porta que permanece aberta.
Nós workers Kubernetes
Barato por núcleo, denso e idêntico toda vez.
Inferência e fine-tuning de IA
Uma GPU inteira, passada diretamente, sob um compromisso que faz a matemática funcionar.