ci: job e2e que sobe o compose e prova que os traces chegam - #5
Conversation
O job `test` roda contra um Postgres avulso e nunca sobe o compose: nada no CI cobria Dockerfile, entrypoint, migrate no boot ou a cadeia de observabilidade. A migracao do Jaeger para v2 foi validada so na minha maquina — este job passa isso para o CI. O passo central consulta a API do Jaeger e exige ao menos um trace do servico labtelemetry. Sem ele, uma quebra no exporter OTel ou no receptor OTLP passa despercebida indefinidamente. Usa as portas alternativas via variaveis de override, o que de quebra exercita esse mecanismo do compose. Passos validados localmente antes do push, incluindo o caminho de falha: com o container do Jaeger parado, o passo de traces sai com exit 1.
Na primeira execucao verde o job passou vendo apenas spans `SELECT`: os do psycopg sao exportados antes dos do Django, e a assercao original aceitava qualquer trace. Uma quebra na instrumentacao HTTP teria passado. Agora exige ao menos um span `GET ...` de servidor. O loop de retry ja existente absorve a latencia do BatchSpanProcessor — a espera aumenta um pouco, a assercao nao encurta.
O job pegou um bug na primeira execução
Causa raiz: o git registrava Ou seja: Corrigido em duas camadas:
Verificado com clone limpo local antes do push, e depois no runner. Assertion apertada após a primeira execução verdeO job passou de primeira vendo apenas spans Agora exige ao menos um span A cadeia inteira coberta: Django HTTP, psycopg, e o span manual Custo52 segundos, em paralelo com |
Contexto
O job
testroda contra um Postgres avulso e nunca sobe o compose. Isso deixava sem cobertura, no CI:Dockerfilee odocker-entrypoint.shmigrateno boot do containerA migração do Jaeger para v2 (
3e26446) foi validada só na minha máquina, manualmente. Este job move essa validação para o CI.O que o job faz
docker compose up -d --buildcom portas alternativas — o que de quebra exercita as variáveis de override do composesleepfixo)/api/summary/devolve sensores e leituras > 0labtelemetryO passo 6 é o ponto: sem ele, uma quebra no exporter OTel ou no receptor OTLP passa despercebida indefinidamente — foi exatamente o tipo de coisa que só peguei rodando à mão.
Verificação antes do push
Todos os passos foram executados localmente contra o stack real, incluindo o caminho de falha:
5 traces, operacoes: ['GET api/summary/', 'INSERT', 'SELECT', 'summary']— passou em ~2s::error::nenhum trace ... chegou ao JaegerGate que não sabe reprovar é decoração; este reprova.
Custo
~2-3 min por run (build da imagem + subida do stack), em paralelo com
lintetest.timeout-minutes: 15como teto.