sábado, 20 de setembro de 2014

Meus primeiros passos com o Sonar

Configurando o Sonar e inspecionando um sistema

Nesse post vamos aprender a configurar o Sonar na sua máquina e disparar a inspeção para uma aplicação .NET de exemplo. Escrevi esse tutorial em 5 passos para permitir que o Sonar funcione como um serviço que não precisa de nenhuma permissão administrativa. Significa que todo esse procedimento poderá ser executado mesmo no seu local de trabalho. Agradeço a atenção e espero que se divirtam muito, nos próximos postos vou mostrar como incluir novos componentes no Sonar, como disparar e registrar os testes automatizados, e mais sobre o Sonar Snitch.

Um grande abraço a todos, e boa leitura.

1º Passo – Fazer os downloads iniciais

Baixar o Sonar - Versão 3.7
Baixar o Sonar Runner 2.4
Ambos no endereço abaixo:

Baixar alguma versão do Java, 6 ou superior.

Recomento utilizar uma estrutura de diretórios que unifique todos os downloads, isso vai ajudar na implantação da sua configuração em outras máquinas.

Por exemplo:
\\NOTE\Users\Erick\Desktop\Sonar
\\NOTE\Users\Erick\Desktop\Sonar\jre7
\\NOTE\Users\Erick\Desktop\Sonar\sonar-3.7.4
\\NOTE\Users\Erick\Desktop\Sonar\sonar-runner-2.4

Baixar o Plugin C# e copiar o arquivo .jar para a pasta de plugins do sonar.
.\sonar-3.7.4\extensions\plugins\sonar-csharp-plugin-3.2.1.jar

Baixar nossa aplicação de exemplo Sonar Snitch

O Sonar Snitch é uma aplicação que fiz que permite consultar as diferenças nos indicadores do Sonar em um intervalo de tempo qualquer. Vou comentar em outros posts sobre ela e como tirar melhor proveito dela para acompanhamento periódico.

No link acima clique em download para baixar todo o código fonte do projeto em um arquivo zip. Já estão versionados todos os arquivos de configuração para que a aplicação seja inspecionada no Sonar.

2º Passo – Configuração do Sonar (servidor)

O arquivo .\sonar-3.7.4\conf\sonar.properties

O arquivo sonar.properties contém as configurações somente desta instância do servidor do Sonar. É importante lembrar disso pois quando configurarmos o Sonar Runner vamos repetir algumas das configurações.

A principal configuração que temos que fazer aqui é o banco. Basta apontar para uma estrutura e o Sonar vai fazer o restante, vai criar toda a estrutura se for um banco novo, vai atualizar a estrutura, se necessário, caso seja uma atualização de versão.

É importante que na primeira utilização o banco esteja configurado com um usuário que tenha acesso para DDL, caso uma organização queira após sua configuração inicial, pode ser alterado para um usuário com acesso DML somente para evitar atualizações não esperadas.

Bom, vamos começar a configurar nosso servidor. Para isso vamos precisar decidir onde o banco será criado. O Sonar oferece suporte a uma bela gama de servidores, como Oracle, SQL Server, My SQL, PostgreSQL e o menos recomendado e que vem embutido nele para apresentações H2. Vamos seguir com o H2 nessa apresentação, pois já vem embutido e pode ser duplicado em qualquer lugar. Mas se pensa em usar o Sonar em qualquer lugar além de sua própria máquina esse banco não vai servir, porque não permite acesso remoto. Consulte nossa seção de configuração de bancos (em construção).

Procure no arquivo a configuração de credenciais e configure o usuário e senha. O exemplo está 
configurado para a configuração básica do H2.

#----- Credentials
# The schema must be created first.
sonar.jdbc.username: sonar
sonar.jdbc.password: sonar

Depois procure no arquivo a configuração para o banco H2 e descomente sua configuração padrão.
#----- Embedded database H2
# Comment the following line to deactivate the default embedded database.
sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar

Parabéns. Você configurou seu primeiro servidor Sonar pronto para ser executado em sua máquina. 

Vamos testar?
Abra a pasta .\sonar-3.7.4\bin\windows-x86-32 e execute o arquivo StartSonar.bat

Será iniciado um arquivo aplicativo Console que vai levantar o Sonar na porta 9000.
Console do Sonar monitorando a porta 9000

Com isso podemos usar qualquer navegador para acessar.
Dashboard web do Sonar

3º Passo – Configuração do Sonar Runner

O Sonar Runner é o aplicativo que vai executar todos os processos de qualidade que você configurar e vai guardar o resultado no banco, apesar dele ter uma integração com o servidor web, ele não reaproveita suas configurações. 

Com isso vamos precisar configurar novamente o banco de dados, além de novas configurações como:
  • Local onde está o servidor do Sonar, mesmo que seja localhost
  • Todas as ferramentas externas necessárias para executar processos como:
    • FxCop
    • Gallio
  • Configurações padrões para os arquivos de projetos, tudo que for comum pode ficar aqui para não precisar ser replicado a cada sistema.

O arquivo .\sonar-runner-2.4\conf\sonar-runner.properties

Configurando o caminho do servidor do Sonar.
#----- Default SonarQube server
sonar.host.url=http://localhost:9000

Configurando o banco de dados, caso o H2 não esteja comentado, copie o texto abaixo.
#----- H2
sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar

Configurando o login e senha para o banco de dados.
#----- Global database settings
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

Opcional: já deixe configurado o encoding para UTF-8 aqui, para não precisar configurar esse item a cada projeto. Esse item é importante para evitar erros de caracteres especiais no código fonte registrado pelo sonar durante a inspeção no código.
#----- Default source code encoding
sonar.sourceEncoding=UTF-8 

4º Passo Configurando um disparador do sonar em arquivo .bat

É necessário executar o sonar-runner.bat para iniciar todo o processo de inspeção de um projeto. Porém esse arquivo precisa de algumas configurações em variáveis de ambiente definidas antes de ser executado.

Vamos então criar um arquivo bat que vai configurar nosso ambiente. E o melhor podemos configurar boa parte dos recursos direto em pastas de rede, isso é uma grande vantagem, pois depois que está configurado o ambiente ele vai funcionar de qualquer máquina ou processo, que tenha acesso à pasta de rede selecionada. Podendo até ser disparado em ambientes de integração contínua como o Microsoft TFS ou Hudson.

Vamos chamar esse arquivo de sonar.bat e definir as algumas variáveis de ambiente apontando para as pastas que configuramos. Veja o exemplo do arquivo abaixo:

SET JAVA_HOME=\\NOTE\Users\Erick\Desktop\Sonar\jre7
SET SONAR_RUNNER_HOME=\\NOTE\Users\Erick\Desktop\Sonar\sonar-runner-2.4
SET SONAR_RUNNER_OPTS=-Xmx512m -XX:MaxPermSize=128m
set path=%path%;\\NOTE\Users\Erick\Desktop\Sonar\sonar-runner-2.4\bin
sonar-runner.bat -X

5º e último passo, Configurando o cliente que será inspecionado

Vamos criar um arquivo de projeto que será inspecionado chamado “sonar-project.properties”. Esse nome é obrigatório e não deve ser alterado. Ele contém as informações do seu projeto que será cadastrado ou alterado no Sonar.

Criar um arquivo de texto novo com nome “sonar-project.properties” no mesmo diretório do arquivo solução da aplicação. No exemplo abaixo vamos ver a aplicação Sonar Snitch, que é uma ferramenta que consulta indicadores do Sonar, vamos conhecer a fundo essa ferramenta posterioremente, Veja os dados do arquivo abaixo:

# Required metadata
sonar.projectKey=my:SonarSnitch
sonar.projectName=Sonar Snitch
sonar.projectVersion=1.0

 # Path to the parent source code directory.
sonar.sources=.
sonar.language=cs

Depois de criar seu arquivo sonar-project.properties, vamos copiar o arquivo sonar.bat também para o diretório do arquivo solução.

A estrutura de arquivos para sua aplicação ficará semelhante a imagem abaixo:

Arquivos de inspeção junto do arquivo solução

Agora basta executar o arquivo sonar.bat e deixar a magia acontecer...

Iniciando a execução do console

Fim da execução do console

Ao final do processo a janela será encerrada e seu projeto será incluído automaticamente no Sonar.
Sistema registrado no Dashboard do Sonar

Visão geral de métricas do Sistema no Sonar

Por questões de direitos autorias e tamanhos de arquivos, não vou colocar todos os downloads juntos, Mas também para facilitar nossa configuração deixei todos os arquivos de configuração dentro de um arquivo zip. Clique aqui para fazer o download. Espero que isso facilite seu aprendizado.

Obrigado pela atenção,
Erick Ferreira Maruqes da Silva

2 comentários: