Como você monitora a qualidade e desempenho das suas aplicações? Neste artigo entenderemos como o SonarQube no Azure pode trazer visibilidade aos problemas das suas aplicações e te ajudar a identificar pontos de melhorias, correções de vulnerabilidades e a investir em testes automatizados.
SonarQube
O SonarQube é uma plataforma opensource desenvolvida pela SonarSource para inspeção contínua da qualidade de código, executando revisões automáticas com análise de detecção de códigos duplicados, bugs, code smells e vulnerabilidades de segurança em mais de 20 linguagens de programação. É praticamente uma ferramenta obrigatória em times de desenvolvimento.
Com aproximadamente R$ 150,00 mensais é possível instalar e utilizar essa ferramenta espetacular no Azure.
Instalando o SonarQube no Azure
Neste exemplo, utilizaremos a versão v7.7 pois as versões superiores não funcionam no Service Plan do Azure para contêineres, isso ocorre porque o ElasticSearch foi incluído na versão v7.8 em diante, o que requer a configuração da variável de ambiente vm.max_map_count = 262144, que só funciona em VM ou em uma infraestrutura Kubernetes.
O template do SonarQube instala um Service Plan Linux, um banco SQL Server e um app service linux. Para configurar, clique no link abaixo:
https://azure.microsoft.com/pt-br/resources/templates/webapp-linux-sonarqube-azuresql
Ao abrir o link, clique em Implantar no Azure, onde será redirecionado para o portal e a tela abaixo será exibida:
- Region: Região onde o SonarQube será instalado, neste template é fixado a região (US) East US.
- Site Name: Nome do recurso no Azure. Neste exemplo utilizaremos o nome sonarqube-teste.
- Sonarqube Image Version: Versão do Sonar. Utilizaremos a versão 7.7 Community.
- Service Plan Pricing Tier: Camada do Service Plan Linux. Neste exemplo utilizaremos a camada Basic 2.
- Sql Server Administrator Username: Usuário de acesso ao SQL Server do SonarQube.
- Sql Server Administrator Password: Senha de acesso ao SQL Server do SonarQube.
- Sql Database Sku Name: Camada de preço do SQL Azure. Por padrã, seguiremos com GP_Gen4_1, depois reduziremos nas configurações do SQL Azure.
- Location: Local de instalação do resource group.
Logo após as configurações, clique em Create para provisionar a infraestrutura.
Com o SonarQube instalado, é necessário reduzir a camada do Azure SQL. Clique no banco SQL criado, em seguida em Compute + storage e selecione a camada Standard limitando em 10 DTUs.
Configurando a aplicação SonarQube
Abra a aplicação criada no Azure (sonarqube-teste) e aguarde o carregamento dos parâmetros iniciais. Em seguida clique no menu Log In e entre com o usuário (admin) e senha (admin) padrão:
Logo após o login, troque sua senha por uma mais forte por questão de segurança.
Em seguida, clique em My Acount, depois em Generate Tokens e escolha um nome para o seu token. Clique em Generate e guarde o token gerado, ele será utilizado para realizar a comunicação e autorização entre o Azure DevOps e o SonarQube:
Clique em Administration, depois em Projects, depois em Management e por fim em Create Project para criar um projeto privado que receberá o relatório do Sonar. Guarde a key do projeto:
Configurando o Azure DevOps
Para configurar a comunicação com o SonarQube é necessário instalar a extensão do Marketplace no Azure DevOps, clicando em Extensions na configuração da sua organização:
Abra o link https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube e cliquem em Get it free:
Logo após a instalação, é necessário configurar a conexão com o SonarQube. Clique nas configurações do seu projeto no Azure DevOps e selecione Service connections:
Clique em New service connection, selecione SonarQube e configure as informações abaixo:
- Server Url: Url da aplicação criada no Azure.
- Token: Token criado no SonarQube.
- Service connection name: Nome da conexão.
Com a conexão realizada, é necessário a criação de um novo pipeline (supondo que existe um repositório de uma aplicação em .NET no seu Azure DevOps). No repositório da aplicação, clique em Set up build:
E configure o YAML conforme o código abaixo:
- branches_include: Configura a branch que será analisada pelo Sonar.
- steps_task_SonarQubePrepare@4: Configura a comunicação com o SonarQube antes da compilação da aplicação.
- inputs_SonarQube: Código do Service Connection criado.
- inputs_projectKey: Key do projeto criado no SonarQube.
- inputs_projectName: Nome do projeto criado no SonarQube.
- task_DotNetCoreCLI@2: Realiza do build da solução.
- task_SonarQubeAnalyze@4: Realiza o análise de todo código pelo SonarQube.
- task_SonarQubePublish@4: Realiza a publicação da análise coletada.
E finalmente, execute o pipeline do repositório:
Após o build, é possível analisar a coleta realizada na aplicação do SonarQube e tomar as decisões com o time. Neste exemplo, é visível que é preciso corrigir várias vulnerabilidades, bugs, code smells e criar testes de unidade e de integração para entrar na cobertura de testes.
Finalizando
Neste artigo aprendemos a forma mais simples de utilizar o SonarQube no Azure, uma excelente ferramenta com um custo muito baixo e que está em constante evolução. Vale muito a pena utilizá-la em seus projetos, para que não tenha simplesmente um código que funcione, mas um código que funcione bem, de fácil manutenção, seguro, com qualidade e seguindo todo um conjunto de boas práticas.