Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

SonarQube é unha plataforma de garantía de calidade de código de fonte aberta que admite unha ampla gama de linguaxes de programación e proporciona informes sobre métricas como a duplicación de código, o cumprimento dos estándares de codificación, a cobertura de probas, a complexidade do código, posibles erros e moito máis. SonarQube visualiza convenientemente os resultados da análise e permítelle seguir a dinámica do desenvolvemento do proxecto ao longo do tempo.

Obxectivo: mostrar aos desenvolvedores o estado do control de calidade do código fonte en SonarQube.

Hai dúas solucións:

  • Executa un script para comprobar o estado do control de calidade do código fonte en SonarQube. Se o control de calidade do código fonte en SonarQube non pasa, falla a montaxe.
  • Mostra o estado do control de calidade do código fonte na páxina principal do proxecto.

Instalación de SonarQube

Para instalar sonarqube desde paquetes rpm, utilizaremos o repositorio https://harbottle.gitlab.io/harbottle-main.

Imos instalar o paquete de repositorio para CentOS 7.

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

Instalamos o propio sonarqube.

yum install -y sonarqube

Durante a instalación, instalaranse a maioría dos complementos, pero cómpre instalar findbugs e pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Inicie o servizo e engádeo ao inicio

systemctl start sonarqube
systemctl enable sonarqube

Se leva moito tempo cargarse, engade un xerador de números aleatorios /dev/./urandom ao final das opcións sonar.web.javaOpts

sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom

Execución dun script para comprobar o estado do control de calidade do código fonte en SonarQube.

Desafortunadamente, o complemento sonar-break-maven-plugin non se actualizou desde hai moito tempo. Entón imos escribir o noso propio guión.

Para probar utilizaremos o repositorio https://github.com/uweplonus/spotbugs-examples.

Importando a Gitlab. Engade o ficheiro .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" # логин sonarqube
  PASSWORD: "admin" # пароль 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

O ficheiro .gitlab-ci.yml non é perfecto. Probouse se as tarefas de dixitalización en sonarqube remataron co estado: "ÉXITO". Polo de agora non houbo outros estados. En canto haxa outros estados, corrixirei .gitlab-ci.yml nesta publicación.

Mostrando o estado do control de calidade do código fonte na páxina principal do proxecto

Instalando o complemento para SonarQube

yum install -y sonarqube-qualinsight-badges

Imos a SonarQube en http://172.26.9.115:9000/
Crea un usuario habitual, por exemplo "insignias".
Inicie sesión en SonarQube con este usuario.

Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

Vai a "A miña conta", crea un novo token, por exemplo co nome "read_all_repository" e fai clic en "Xenerate".

Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

Vemos que apareceu unha ficha. Aparecerá só 1 vez.

Inicie sesión como administrador.

Vaia a Configuración -> Insignias SVG

Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

Copia este token no campo "Ficha de distintivo de actividade" e fai clic no botón Gardar.

Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

Vaia a Administración -> Seguridade -> Modelos de permisos -> Modelo predeterminado (e outros modelos que terá).

O usuario de distintivos debe ter marcada a caixa de verificación "Examinar".

Probando.

Por exemplo, tomemos o proxecto https://github.com/jitpack/maven-simple.

Imos importar este proxecto.

Engade o ficheiro .gitlab-ci.yml á raíz do proxecto co seguinte contido.

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" # логин sonarqube
  PASSWORD: "admin" # пароль 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 o proxecto terá o seguinte aspecto:

Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

Engade bolsas a README.md e terán o seguinte aspecto:

Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

O código de visualización dos distintivos ten o seguinte aspecto:

Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

Analizando a cadea de visualización de distintivos:

[![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.jitpack%3Amaven-simple)
[![Название](http://172.26.9.115:9000/api/badges/gate?key=Project Key)](http://172.26.9.115:9000/dashboard?id=id-проекта)
[![Coverage](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.jitpack%3Amaven-simple)
[![Название Метрики](http://172.26.9.115:9000/api/badges/measure?key=Project Key&metric=МЕТРИКА)](http://172.26.9.115:9000/dashboard?id=id-проекта)

Onde obter/verificar a clave do proxecto e a identificación do proxecto.

A clave do proxecto está na parte inferior dereita. O URL contén o ID do proxecto.

Mostrando o estado do control de calidade do código fonte en SonarQube aos desenvolvedores

As opcións para obter métricas poden ser mira aquí.

Todas as solicitudes de extracción de melloras, correccións de erros enviar 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

Fonte: www.habr.com

Engadir un comentario