Skip to content
Latchkey

O que e um service container na CI? Bancos de dados para seus testes

Um service container e um continer de apoio - um banco de dados, cache ou fila - que seu provedor de CI inicia ao lado do seu job para que os testes de integracao tenham algo real com que conversar.

Muitos testes precisam de uma dependencia viva: um banco de dados Postgres, um cache Redis, um message broker. Em vez de instalar e gerenciar isso no runner, os sistemas de CI permitem que voce declare service containers. O provedor os inicia ao lado do seu job, configura a rede e os desativa depois.

O problema que resolvem

Testes de integracao sao muito mais valiosos quando rodam contra o mecanismo de banco de dados real, e nao contra um mock. Service containers tornam isso barato e repetivel - um Postgres limpo a cada execucao, sem poluir o host.

Como os jobs os alcancam

O servico e acessivel pela rede por um hostname (muitas vezes o label do servico). Sua configuracao de teste aponta para esse host e a porta mapeada, e se conecta como faria com qualquer banco de dados.

Um exemplo de GitHub Actions

Em um workflow voce adiciona um bloco services: com uma imagem postgres, env para a senha e um mapeamento de porta. O runner o inicia antes dos seus steps; os testes se conectam a ele pelo hostname do servico.

A prontidao importa

  • Um banco de dados pode aceitar conexoes apenas depois de terminar a inicializacao.
  • Health checks ou um loop de espera evitam flakes de "connection refused".
  • Popule dados iniciais em um init step para que os testes partam de um estado conhecido.

Service containers e confiabilidade

Baixar e iniciar imagens de servico adiciona tempo e uma falha transitoria ocasional. Runners gerenciados fazem cache das imagens de servico comuns e reexecutam automaticamente blips de registry, para que um pull lento ou instavel nao reprove uma execucao de teste que estaria verde.

Principais conclusões

  • Um service container e uma dependencia gerenciada pela CI (DB, cache, fila) para testes.
  • Os jobs o alcancam pela rede via hostname e porta.
  • Aguarde a prontidao para evitar flakiness de connection-refused.

Guias relacionados