Pular para o conteúdo

apps/infrastructure/sonarqube

178 · Infraestrutura em Docker · ≈ 7 min de estudo

SonarQube — quality gate como barreira de merge

SonarQube analisa o código sem executá-lo e classifica o que encontra por impacto em confiabilidade, segurança e manutenibilidade, com um quality gate que aprova ou reprova cada análise. Aqui ele roda com PostgreSQL, recebe a análise do scanner oficial e decide, pela Web API, se o serviço de transferências pode ser integrado. Use como etapa de CI: gate reprovado bloqueia o merge.

passos
6
arquivos
8
testes
0
tecnologias
5
Infraestrutura realTypeScriptBunPostgreSQLSonarQubeDocker
Baixar cartão

Cenário

Um serviço de transferências PIX e TED entra em revisão antes de subir para produção. src/service_transfer.ts carrega defeitos plantados — senha do PSP no código, valores ordenados como texto, || com os dois lados iguais que rejeita toda TED, variável atribuída e nunca lida, função de tarifa copiada e aninhamento profundo. O gate do banco exige nota A em confiabilidade, segurança e manutenibilidade e no máximo 3% de linhas duplicadas: o serviço defeituoso reprova em confiabilidade e segurança; src/service_transfer_reviewed.ts, a mesma lógica depois da revisão, passa.

> service_transfer.ts quebra de propósito as regras do repositório e desliga o lint para si. Ele é o objeto da análise, não um exemplo a copiar.

Planta

Sequência
10/10
troca a senha admin padrão e cria o gate Bank1gera token da execução2docker run com projectKey e sources3envia o relatório da análise4id da tarefa no compute engine5grava medidas e issues6espera a tarefa terminar (api/ce/task)7status do gate e issues abertas8ERROR ou OK, com as condições violadas9revoga o token10demo / CISonarQubesonar-scanner-cliPostgreSQL
10

10 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Análise estática de um serviço de transferências

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    adminLogin troca a senha padrão admin/admin no primeiro boot; nas execuções seguintes ela já está trocada

  2. 02

    bankGateEnsure cria o gate Bank só com condições sobre o código inteiro e o associa aos dois projetos

  3. 03

    tokenIssue gera um token por execução, revogado ao fim — token de scanner que não expira é credencial esperando vazar

  4. 04

    scannerRun roda sonar-scanner-cli na rede do host, com o token por variável de ambiente, e lê o id da tarefa que o servidor enfileirou

  5. 05

    analysisWait espera o compute engine terminar: ler o gate antes devolve a análise anterior

  6. 06

    gateStatus e issuesList trazem o veredito e as regras que o explicam

apps/infrastructure/sonarqube

8 arquivos

src/

  • service_transfer.tsServiço sob análise, com os defeitos plantados
  • service_transfer_reviewed.tsO mesmo serviço depois da revisão
  • sonar_api.tsWeb API: senha do admin, token, gate, espera da análise, status e issues
  • scanner_run.tsRoda o scanner oficial e devolve a tarefa do compute engine
  • config_sonar.tsConfiguração validada do ambiente
  • demo.tsdemoAnalisa as duas versões e imprime o veredito de cada uma

./

  • sonar-project.propertiesPadrões do scanner quando rodado direto no diretório
  • docker-compose.ymlinfraSonarQube e PostgreSQL

Executar · com Docker

  1. sudo sysctl -w vm.max_map_count=262144
  2. docker compose up -d --wait# sobe PostgreSQL · SonarQube
  3. cp .env.example .env# variáveis de ambiente
  4. bun install# dependências
  5. bun run demo# roda o cenário
  6. bun run test# integração contra o serviço real

UI: http://localhost:9000 (admin, senha do SONAR_ADMIN_PASSWORD). O primeiro boot leva um ou dois minutos.

Requisitos
BunDocker
Sobe junto
PostgreSQLSonarQube

Por que se relacionam

O que cada defeito plantado vira no relatório

Defeito no código Regra Nota que derruba
Senha do PSP fixa no fonte typescript:S2068 Segurança
[100000, 20000, 5000].sort() typescript:S2871 Confiabilidade
rail === "pix" || rail === "pix" typescript:S1764 Confiabilidade
auditPrefix atribuído e nunca lido typescript:S1854 — (code smell)
Tarifa TED idêntica à PIX typescript:S4144 — (code smell)
Seis níveis de if aninhado typescript:S3776 — (code smell)

Teste rápido

Qual destes combina com SonarQube?

Próximo projeto · Infraestrutura em Dockerk6 — teste de carga como portão de CI
Esc

↑ ↓ navegarEnter abrir191 resultados