Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

SonarQube este o platformă de asigurare a calității codului sursă deschisă, care acceptă o gamă largă de limbaje de programare și oferă raportare asupra unor metrici precum duplicarea codului, conformitatea cu standardele de codare, acoperirea testelor, complexitatea codului, erori potențiale și multe altele. SonarQube vizualizează în mod convenabil rezultatele analizei și vă permite să urmăriți dinamica dezvoltării proiectelor în timp.

Obiectiv: Arătați dezvoltatorilor starea controlului calității codului sursă în SonarQube.

Există două soluții:

  • Rulați un script pentru a verifica starea controlului calității codului sursă în SonarQube. Dacă controlul de calitate al codului sursă în SonarQube nu trece, atunci eșuează asamblarea.
  • Afișați starea controlului calității codului sursă pe pagina principală a proiectului.

Instalarea SonarQube

Pentru a instala sonarqube din pachetele rpm, vom folosi depozitul https://harbottle.gitlab.io/harbottle-main.

Să instalăm pachetul cu depozitul pentru CentOS 7.

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

Instalăm sonarqube în sine.

yum install -y sonarqube

În timpul instalării, majoritatea pluginurilor vor fi instalate, dar trebuie să instalați findbugs și pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Lansați serviciul și adăugați-l la pornire

systemctl start sonarqube
systemctl enable sonarqube

Dacă încărcarea durează mult, adăugați un generator de numere aleatorii /dev/./urandom la sfârșitul opțiunilor sonar.web.javaOpts

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

Rularea unui script pentru a verifica starea controlului calității codului sursă în SonarQube.

Din păcate, pluginul sonar-break-maven-plugin nu a fost actualizat de mult. Deci, să scriem propriul nostru scenariu.

Pentru testare vom folosi depozitul https://github.com/uweplonus/spotbugs-examples.

Import în Gitlab. Adăugați fișierul .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

Fișierul .gitlab-ci.yml nu este perfect. Testat dacă sarcinile de scanare în sonarqube s-au încheiat cu starea: „SUCCES”. Până acum nu au existat alte stări. De îndată ce există alte stări, voi corecta .gitlab-ci.yml în această postare.

Afișarea stării controlului calității codului sursă pe pagina principală a proiectului

Instalarea pluginului pentru SonarQube

yum install -y sonarqube-qualinsight-badges

Mergem la SonarQube la http://172.26.9.115:9000/
Creați un utilizator obișnuit, de exemplu „insigne”.
Conectați-vă la SonarQube sub acest utilizator.

Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

Accesați „Contul meu”, creați un nou token, de exemplu cu numele „read_all_repository” și faceți clic pe „Generați”.

Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

Vedem că a apărut un simbol. Va apărea o singură dată.

Conectați-vă ca administrator.

Accesați Configurare -> Insigne SVG

Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

Copiați acest simbol în câmpul „Insignă de activitate” și faceți clic pe butonul de salvare.

Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

Accesați Administrare -> Securitate -> Șabloane de permisiuni -> Șablon implicit (și alte șabloane pe care le veți avea).

Utilizatorul de insigne trebuie să aibă bifată caseta „Răsfoiți”.

Testare.

De exemplu, să luăm proiectul https://github.com/jitpack/maven-simple.

Să importăm acest proiect.

Adăugați fișierul .gitlab-ci.yml la rădăcina proiectului cu următorul conținut.

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

În SonarQube, proiectul va arăta astfel:

Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

Adăugați bagaje pe README.md și vor arăta astfel:

Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

Codul de afișare a insignelor arată astfel:

Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

Analizând șirul de afișare a insignelor:

[![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-проекта)

De unde să obțineți/verificați Cheia proiectului și ID-ul proiectului.

Cheia de proiect este în dreapta jos. URL-ul conține ID-ul proiectului.

Afișarea stării de control al calității codului sursă în SonarQube pentru dezvoltatori

Opțiunile pentru obținerea de valori pot fi vezi aici.

Toate solicitările de extragere pentru îmbunătățiri, remedieri de erori trimiteți la acest depozit.

Chat Telegram despre SonarQube https://t.me/sonarqube_ru
Chat Telegram despre DevSecOps - DevOps securizat https://t.me/sec_devops

Sursa: www.habr.com

Adauga un comentariu