Instalação
Docker
Podemos só rodar o comando docker para subir o SonarQube e ter um primeiro contato mas o problema de fazer isso é que perdemos todos os dados assim que destruirmos o conteiner.
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:lts-community
Ficando disponível em localhost:9000 com o user: admin
e password admin
.
Poderíamos subir ele pré configurado utilizando um docker compose para subir todo um ambiente preparado para uso.
services:
sonarqube:
image: sonarqube:lts-community
depends_on:
- db
networks:
- sonarnet
environment:
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONAR_ADMIN_USERNAME=admin
- SONAR_ADMIN_PASSWORD=admin
ports:
- "9000:9000"
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_extensions:/opt/sonarqube/extensions
db:
image: postgres:13-alpine
container_name: sonarqube_db
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
- POSTGRES_DB=sonar
volumes:
- postgresql_data:/var/lib/postgresql/data
networks:
sonarnet:
volumes:
sonarqube_conf:
sonarqube_data:
sonarqube_logs:
sonarqube_extensions:
postgresql_data:
Volumes do SonarQube:
-
sonarqube_conf:/opt/sonarqube/conf
: As configurações personalizadas do SonarQube são preservadas. Se você alterar configurações como a URL do banco de dados ou parâmetros de autenticação, essas mudanças não serão perdidas quando o contêiner for reiniciado. -
sonarqube_data:/opt/sonarqube/data
: Guarda dados persistentes do SonarQube, incluindo índices, históricos de análise, e outros dados processados. -
sonarqube_logs:/opt/sonarqube/logs
: Armazena os logs gerados pelo SonarQube. -
sonarqube_extensions:/opt/sonarqube/extensions
: Guarda plugins e extensões instalados no SonarQube. -
postgresql_data:/var/lib/postgresql/data
: Armazena os dados do banco de dados PostgreSQL, incluindo tabelas, índices, e registros.
Existem outras instalações que podem ser direto como serviço na sua máquina local ou no servidor.
Kubernetes
Vamos direto para a documentação de instalação no kubernetes.
Para instalação em um cluster podemos usar o helm. Instalando em um cluster pessoal na máquina local.
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
helm repo update
kubectl create namespace sonarqube
helm show values sonarqube/sonarqube > values.yaml
# Faça uma análise do values.yaml e veja se tem algo que gostaria de mudar como por adicionar o ingress, número de replicas, namespace do prometheus, etc.
# Se o repositórios do projeto estão em algum servidor git fora do cluster, será necessário configurar o ingress para que possa receber os relatórios do scanner.
helm upgrade --install -n sonarqube sonarqube sonarqube/sonarqube
❯ kubectl get all -n sonarqube
NAME READY STATUS RESTARTS AGE
pod/sonarqube-postgresql-0 1/1 Running 6 (25m ago) 41h
pod/sonarqube-sonarqube-0 1/1 Running 6 (25m ago) 41h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sonarqube-postgresql ClusterIP 10.107.128.240 <none> 5432/TCP 41h
service/sonarqube-postgresql-headless ClusterIP None <none> 5432/TCP 41h
service/sonarqube-sonarqube ClusterIP 10.100.238.187 <none> 9000/TCP 41h
NAME READY AGE
statefulset.apps/sonarqube-postgresql 1/1 41h
statefulset.apps/sonarqube-sonarqube 1/1 41h
# Só expondo o serviço localmente para ter acesso
kubectl port-forward -n sonarqube svc/sonarqube-sonarqube 9000:9000
Depois de alterar a senha chegamos na parte principal.
SonarCloud
Caso queira usar o SonarQube como SAS é só criar uma conta no SonarCloud que tudo estará pronto e sem mistério. Pode fazer o login com a conta do github, gitlab, azure devops e até sso.
Componentes
Observando a imagem abaixo podemos entender que o scanner é quem faz o a análise estática e envia o report para o server que mantém os dados em um database. Uma vez com o relatório, o servidor propõe melhorias e correções que devem ser feitas baseado em regras.
É necessário realizar o scanner durante a pipeline e já podemos nesse instante reprovar o pull request caso o código tenha problemas. O relatório deve ser enviado ao SonarQube para que os membros da equipe possam ver a classificação, olhar as recomendações de correção e os motivos que o código não passou.