Visão Geral do SonarQube
SonarQube é uma ferramenta open source para gerenciamento de qualidade de código, projetada para identificar falhas, vulnerabilidades e desvios de padrões em projetos de software. Ele se integra a sistemas de CI/CD como GitLab e Jenkins para realizar verificações contínuas após commits ou builds.
| Ferramentas de Análise de Código Conhecidas |
|---|
| SonarQube |
| Checkmarx |
| Fortify |
| Coverity |
Requisitos para Instalação do SonarQube
Para uma instância de pequena escala (individual ou equipe reduzida), é recomendado no mínimo 2 GB de RAM no servidor SonarQube, com 1 GB de RAM livre no sistema operacional. Para ambientes de produção maiores, recomenda-se 16 GB de RAM.
Pré-requisitos de Software
Versão 8.9 LTS: requer JDK 11 e banco de dados PostgreSQL.
Versão 7.7: requer JDK 8 e banco de dados MySQL (versão 5.6 ou superior).
Instalação do SonarQube com PostgreSQL (Versão 8.9 LTS)
Preparação do Ambiente
# Desativar firewall e SELinux para ambiente de teste
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
Instalação do Banco de Dados PostgreSQL
# Instalar dependências e PostgreSQL
apt-get update
apt-get install -y openjdk-11-jdk postgresql postgresql-contrib
# Configurar banco de dados e usuário
sudo -u postgres psql -c "CREATE DATABASE sonar_db WITH ENCODING 'UTF8';"
sudo -u postgres psql -c "CREATE USER sonar_user WITH PASSWORD 'SenhaSegura789';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE sonar_db TO sonar_user;"
Instalação do SonarQube com MySQL (Versão 7.7)
Configuração do Banco de Dados MySQL
# Instalar dependências e MySQL 5.7
yum install -y java wget
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
yum install -y mysql-community-server
# Iniciar e habilitar o serviço
systemctl start mysqld
systemctl enable mysqld
# Encontrar senha temporária e executar instalação segura
grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
# Criar banco de dados e usuário para SonarQube
mysql -u root -p -e "CREATE DATABASE sonar_db CHARACTER SET utf8mb4;"
mysql -u root -p -e "GRANT ALL PRIVILEGES ON sonar_db.* TO 'sonar_user'@'localhost' IDENTIFIED BY 'SenhaForte123';"
Instalação e Configuração do SonarQube
# Baixar e extrair o SonarQube
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
unzip sonarqube-7.7.zip -d /opt/
ln -s /opt/sonarqube-7.7 /opt/sonar
useradd sonar
chown -R sonar:sonar /opt/sonar
# Configurar conexão com o banco de dados
sed -i 's|#sonar.jdbc.username=.*|sonar.jdbc.username=sonar_user|' /opt/sonar/conf/sonar.properties
sed -i 's|#sonar.jdbc.password=.*|sonar.jdbc.password=SenhaForte123|' /opt/sonar/conf/sonar.properties
sed -i 's|#sonar.jdbc.url=.*|sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar_db?useUnicode=true\&characterEncoding=utf8|' /opt/sonar/conf/sonar.properties
# Iniciar o serviço (deve ser executado como usuário comum)
su - sonar -c '/opt/sonar/bin/linux-x86-64/sonar.sh start'
Acesse a interface web em http://servidor:9000. Credenciais padrão: usuário admin, senha admin.
Gerenciamento de Plugins
Para instalar o plugin de localização em português, navegue até Administration > Marketplace, pesquise por "Portuguese Language Pack" e clique em Instal. Reinicie o SonarQube após a instalação.
# Instalar plugins manualmente (exemplo)
tar xf sonar_plugins.tar.gz -C /opt/sonar/extensions/plugins/
chown -R sonar:sonar /opt/sonar/extensions/plugins/
/opt/sonar/bin/linux-x86-64/sonar.sh restart
Criação de Porjetos e Análise
Análise de Projeto Java com Maven
Primeiro, gere um token de autenticação na interface do SonarQube em My Account > Security.
# Comando para análise via Maven
mvn sonar:sonar \
-Dsonar.projectKey=projeto-exemplo \
-Dsonar.host.url=http://sonar.example.com:9000 \
-Dsonar.login=seu_token_aqui
Integração com Jenkins
No Jenkins, adicioen um passo de build "Invoke top-level Maven targets" com o seguinte comando:
clean package sonar:sonar -Dsonar.projectKey=${JOB_BASE_NAME} -Dsonar.host.url=http://sonar.example.com:9000 -Dsonar.login=seu_token_aqui