Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

SonarQube es una plataforma abierta para garantizar el control continuo de la calidad del código fuente, que admite una amplia variedad de lenguajes de programación y permite obtener informes sobre métricas como la duplicación de código, cumplimiento de normas de codificación, cobertura de pruebas, complejidad del código, posibles errores, etc. SonarQube visualiza convenientemente los resultados del análisis y permite rastrear la dinámica del desarrollo del proyecto a lo largo del tiempo.

Objetivo: Mostrar a los desarrolladores el estado del control de calidad del código fuente en SonarQube.

Hay dos formas de resolverlo:

  • Ejecutar un script que verifique el estado del control de calidad del código fuente en SonarQube. Si el control de calidad del código fuente en SonarQube falla, se deberá fallar la compilación.
  • Mostrar en la página principal del proyecto el estado del control de calidad del código fuente.

Instalación de SonarQube

Para instalar SonarQube desde paquetes RPM, utilizaremos el repositorio. https://harbottle.gitlab.io/harbottle-main.

Instalaremos el paquete del repositorio para CentOS 7.

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

Instalamos SonarQube.

yum install -y sonarqube

Durante la instalación se instalarán la mayoría de los plugins, pero es necesario instalar FindBugs y PMD.

yum install -y sonarqube-findbugs sonarqube-pmd

Iniciamos el servicio y lo añadimos al inicio automático.

systemctl start sonarqube
systemctl enable sonarqube

Si tarda mucho en cargar, añada al final de las opciones sonar.web.javaOpts el generador de números aleatorios /dev/./urandom.

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

Ejecutar el script que verifica el estado del control de calidad del código fuente en SonarQube.

Desafortunadamente, el plugin sonar-break-maven-plugin no ha sido actualizado desde hace tiempo. Por lo tanto, escribiremos nuestro propio script.

Para la prueba utilizaremos el repositorio. https://github.com/uweplonus/spotbugs-examples.

Importamos en GitLab. Añadimos el archivo .gitlab-ci.yml:

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.226:9000"
  LOGIN: "admin" # login sonarqube
  PASSWORD: "admin" # password 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 where report gets stored
    - echo $URL
    - |
      while : ;do
          curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
          export status=$(cat analysis.txt | jq -r '.task.status') #Status as SUCCESS, CANCELED, IN_PROGRESS or FAILED
          echo $status
          if [ ${status} == "SUCCESS" ];then
            echo "SONAR ANALYSIS SUCCESS";
            break
          fi
          sleep 5
      done
    - curl -k -u "$LOGIN":"$PASSWORD" "$URL" -o analysis.txt
    - export status=$(cat analysis.txt | jq -r '.task.status') #Status as SUCCESS, CANCELED or FAILED
    - export analysisId=$(cat analysis.txt | jq -r '.task.analysisId') #Get the analysis Id
    - |
      if [ "$status" == "SUCCESS" ]; then
        echo -e "SONAR ANALYSIS SUCCESSFUL...ANALYSING RESULTS";
        curl -k -u "$LOGIN":"$PASSWORD" "$SONAR_HOST_URL/api/qualitygates/project_status?analysisId=$analysisId" -o result.txt; #Analysis result like critical, major and minor issues
        export result=$(cat result.txt | jq -r '.projectStatus.status');

        if [ "$result" == "ERROR" ];then
          echo -e "91mSONAR RESULTS FAILED";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')"; #prints the critical, major and minor violations
          exit 1 #breaks the build for violations
        else
          echo -e "SONAR RESULTS SUCCESSFUL";
          echo "$(cat result.txt | jq -r '.projectStatus.conditions')";
          exit 0
        fi
      else
          echo -e "e[91mSONAR ANALYSIS FAILEDe[0m";
          exit 1 #breaks the build for failure in Step2
      fi
  tags:
    - docker

El archivo .gitlab-ci.yml no es perfecto. Se probó si las tareas de verificación en sonarqube completaron con el estado: "SUCCESS". Hasta ahora no ha habido otros estados. Cuando haya otros estados, actualizaré el .gitlab-ci.yml en esta publicación.

Mostrar en la página principal del proyecto el estado del control de calidad del código fuente

Instalamos el complemento para SonarQube

yum install -y sonarqube-qualinsight-badges

Accedemos a SonarQube en la dirección http://172.26.9.115:9000/
Creamos un usuario normal, por ejemplo "badges".
Iniciamos sesión con este usuario en SonarQube.

Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

Vamos a "Mi cuenta", creamos un nuevo token, por ejemplo con el nombre "read_all_repository" y hacemos clic en "Generar".

Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

Vemos que ha aparecido el token. Solo aparecerá una vez.

Iniciamos sesión como administrador.

Vamos a Configuración -> SVG Badges

Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

Copiamos este token en el campo "Activity badge token" y hacemos clic en el botón guardar.

Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

Entramos en Administración -> Seguridad -> Plantillas de permisos -> Plantilla predeterminada (y otras plantillas que pueda tener).

Al usuario badges se le debe marcar la opción "Browse".

Pruebas.

Tomemos como ejemplo el proyecto https://github.com/jitpack/maven-simple.

Importamos este proyecto.

Agregamos el archivo .gitlab-ci.yml en la raíz del proyecto con el siguiente contenido.

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 de sonarqube
  PASSWORD: "admin" # contraseña de 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

En SonarQube, el proyecto se verá así:

Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

Agregamos badges en README.md y se verán así:

Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

El código de visualización de badges se ve así:

Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

Desglose de la cadena de visualización de 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)
[![Nombre](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-proyecto)
[![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)
[![Nombre de la Métrica](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=MÉTRICA)](http://172.26.9.115:9000/dashboard?id=id-proyecto)

Dónde encontrar/verificar el Project Key y el id-proyecto.

El Project Key se encuentra en la parte inferior derecha. En la URL está el id-proyecto.

Visualización del estado del control de calidad del código fuente a los desarrolladores en SonarQube

Las opciones para obtener métricas se pueden ver aquí.

Todos los pull requests para mejoras y corrección de errores envíalos a este repositorio.

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

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster