Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

SonarQube é uma plataforma aberta para garantir o controle contínuo da qualidade do código-fonte, suportando uma ampla gama de linguagens de programação e permitindo a geração de relatórios sobre métricas como duplicação de código, conformidade com padrões de codificação, cobertura de testes, complexidade do código, erros potenciais, etc. O SonarQube visualiza convenientemente os resultados da análise e permite rastrear a dinâmica de desenvolvimento do projeto ao longo do tempo.

Objetivo: Mostrar aos desenvolvedores o status do controle de qualidade do código-fonte no SonarQube.

Existem duas formas de resolver:

  • Executar um script para verificar o status do controle de qualidade do código-fonte no SonarQube. Se o controle de qualidade do código-fonte no SonarQube falhar, devemos falhar a compilação.
  • Exibir na página inicial do projeto o status do controle de qualidade do código-fonte.

Instalação do SonarQube

Para instalar o SonarQube a partir de pacotes RPM, utilizaremos o repositório https://harbottle.gitlab.io/harbottle-main.

Vamos instalar o pacote do repositório para o CentOS 7.

yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm

Instalando o próprio SonarQube.

yum install -y sonarqube

Durante a instalação, a maioria dos plugins será instalada, mas precisamos instalar o findbugs e o pmd separadamente.

yum install -y sonarqube-findbugs sonarqube-pmd

Iniciamos o serviço e adicionamos à inicialização automática.

systemctl start sonarqube
systemctl enable sonarqube

Se houver demora no carregamento, adicione ao final das opções sonar.web.javaOpts o gerador de números aleatórios /dev/./urandom.

sonar.web.javaOpts=outros parâmetros -Djava.security.egd=file:/dev/urandom

Execução do script para verificar o status do controle de qualidade do código-fonte no SonarQube.

Infelizmente, o plugin sonar-break-maven-plugin não foi atualizado há muito tempo. Portanto, vamos escrever nosso próprio script.

Para testes, utilizaremos o repositório https://github.com/uweplonus/spotbugs-examples.

Importamos para o GitLab. Adicionamos o arquivo .gitlab-ci.yml:

variáveis:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=~/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  SONAR_HOST_URL: "http://172.26.9.226:9000"
  LOGIN: "admin" # login do sonarqube
  PASSWORD: "admin" # senha do sonarqube

cache:
  paths:
    - .m2/repository

build:
  image: maven:3.3.9-jdk-8
  stage: build
  script:
    - apt install -y jq || true
    - mvn $MAVEN_CLI_OPTS -Dmaven.test.failure.ignore=true org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent clean verify org.jacoco:jacoco-maven-plugin:0.8.5:report
    - mvn $MAVEN_CLI_OPTS -Dmaven.test.skip=true verify sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$LOGIN -Dsonar.password=$PASSWORD -Dsonar.gitlab.project_id=$CI_PROJECT_PATH -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
    - export URL=$(cat target/sonar/report-task.txt | grep ceTaskUrl | cut -c11-) #URL onde o relatório é armazenado
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') #Status como SUCESSO, CANCALCADO, EM_ANDAMENTO ou FALHOU
          echo $status
          if [ ${status} == "SUCCESS" ];then
            echo "ANÁLISE SONAR SUCESSO";
            break
          fi
          sleep 5
      done
    - curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
    - export status=$(cat analysis.txt | jq -r '.task.status') #Status como SUCESSO, CANCALCADO ou FALHOU
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Obter o ID da análise
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "ANÁLISE SONAR REALIZADA COM SUCESSO...ANALISANDO RESULTADOS";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Resultado da análise como questões críticas, maiores e menores
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "\e[91mRESULTADOS SONAR FALHARAM";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #imprime as violações críticas, maiores e menores
          exit 1 #encerra a compilação para violações
        else
          echo -e "RESULTADOS SONAR COM SUCESSO";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0
        fi
      else
          echo -e "\e[91mANÁLISE SONAR FALHOU\e[0m";
          exit 1 #encerra a compilação por falha na Etapa 2
      fi
  tags:
    - docker

O arquivo .gitlab-ci.yml não é perfeito. Foi testado se as tarefas de verificação no sonarqube terminavam com o status: "SUCESSO". Até agora, não houve outros status. Assim que houver outros status, irei corrigir o .gitlab-ci.yml neste post.

Exibição na página inicial do projeto do status de controle de qualidade do código-fonte

Instalando o plugin para SonarQube

yum install -y sonarqube-qualinsight-badges

Acessamos o SonarQube no seguinte endereço http://172.26.9.115:9000/
Criamos um usuário comum, por exemplo, "badges".
Logamos com esse usuário no SonarQube.

Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

Entramos em "Minha conta", criamos um novo token, por exemplo, chamado "read_all_repository" e clicamos em "Gerar".

Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

Vemos que o token apareceu. Ele aparecerá apenas uma vez.

Entramos como administrador.

Vamos em Configuração -> SVG Badges

Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

Copiamos este token no campo "Activity badge token" e clicamos no botão salvar.

Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

Acesse Administração -> Segurança -> Modelos de Permissão -> Modelo padrão (e outros modelos que você tiver).

Para o usuário badges, é necessário marcar a opção "Browse".

Testes.

Como exemplo, vamos pegar um projeto. https://github.com/jitpack/maven-simple.

Importamos este projeto.

Adicione o arquivo .gitlab-ci.yml na raiz do projeto com o seguinte conteúdo.

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=~/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  SONAR_HOST_URL: "http://172.26.9.115:9000"
  LOGIN: "admin" # login do sonarqube
  PASSWORD: "admin" # senha do sonarqube

cache:
  paths:
    - .m2/repository

build:
  image: maven:3.3.9-jdk-8
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS -Dmaven.test.failure.ignore=true org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent clean verify org.jacoco:jacoco-maven-plugin:0.8.5:report
    - mvn $MAVEN_CLI_OPTS -Dmaven.test.skip=true verify sonar:sonar -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$LOGIN -Dsonar.password=$PASSWORD -Dsonar.gitlab.project_id=$CI_PROJECT_PATH -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
  tags:
    - docker

No SonarQube, o projeto ficará assim:

Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

Adicione badges no README.md e eles ficarão assim:

Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

O código de exibição dos badges fica assim:

Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

Análise da string de exibição dos badges:

[![Quality Gate](http://172.26.9.115:9000/api/badges/gate?key=com.github.jitpack:maven-simple)](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[![Nome](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-projeto)
[![Cobertura](http://172.26.9.115:9000/api/badges/measure?key=com.github.jitpack:maven-simple&metric=coverage)](http://172.26.9.115:9000/dashboard?id=com.github.jitpackmaven-simple)
[![Nome da Métrica](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=METRICA)](http://172.26.9.115:9000/dashboard?id=id-projeto)

Onde encontrar/verificar a Chave do Projeto e o id do projeto.

A Chave do Projeto está na parte inferior direita. O id do projeto está na URL.

Exiba aos desenvolvedores o status de controle de qualidade do código-fonte no SonarQube

As opções para obter métricas podem ser vistas aqui.

Todos os pull requests para melhorias, correções de bugs envie para este repositório.

Chat do Telegram sobre SonarQube https://t.me/sonarqube_ru
Chat do Telegram sobre DevSecOps — DevOps seguro https://t.me/sec_devops

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster