SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

SonarQube on avatud lähtekoodiga kvaliteedi tagamise platvorm, mis toetab laia valikut programmeerimiskeeli ja pakub aruandeid selliste mõõdikute kohta nagu koodi dubleerimine, koodide järgimine, testi katvus, koodi keerukus, võimalikud vead ja palju muud. SonarQube visualiseerib mugavalt analüüsitulemusi ja võimaldab jälgida projekti arendamise dünaamikat ajas.

Eesmärk: näidata arendajatele SonarQube'i lähtekoodi kvaliteedikontrolli olekut.

Lahendusi on kaks:

  • Käivitage skript, et kontrollida SonarQube'i lähtekoodi kvaliteedikontrolli olekut. Kui SonarQube'i lähtekoodi kvaliteedikontroll ei läbi, siis kokkupanek ebaõnnestub.
  • Kuva lähtekoodi kvaliteedikontrolli olek projekti põhilehel.

SonarQube'i installimine

Sonarqube'i installimiseks rpm-pakettidest kasutame hoidlat https://harbottle.gitlab.io/harbottle-main.

Installime paketi koos CentOS 7 hoidlaga.

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

Paigaldame sonarqube ise.

yum install -y sonarqube

Installimise ajal installitakse enamik pistikprogramme, kuid peate installima findbugs ja pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Käivitage teenus ja lisage see käivitamisse

systemctl start sonarqube
systemctl enable sonarqube

Kui laadimine võtab kaua aega, lisage valikute sonar.web.javaOpts lõppu juhuslike arvude generaator /dev/./urandom

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

Skripti käitamine, et kontrollida SonarQube'i lähtekoodi kvaliteedikontrolli olekut.

Kahjuks pole sonar-break-maven-plugin pluginat pikka aega uuendatud. Nii et kirjutame oma stsenaariumi.

Testimiseks kasutame hoidlat https://github.com/uweplonus/spotbugs-examples.

Importimine Gitlabi. Lisage fail .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

Gitlab-ci.yml fail pole täiuslik. Testitud, kas sonarqube'i skannimistoimingud lõppesid olekuga "ÕNNEKUS". Seni pole muid staatusi olnud. Niipea, kui on muid olekuid, parandan selles postituses faili .gitlab-ci.yml.

Lähtekoodi kvaliteedikontrolli oleku kuvamine projekti põhilehel

SonarQube'i pistikprogrammi installimine

yum install -y sonarqube-qualinsight-badges

Me läheme SonarQube'i kell http://172.26.9.115:9000/
Looge tavaline kasutaja, näiteks "märgid".
Logige selle kasutaja all SonarQube'i sisse.

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Minge "Minu kontole", looge uus luba, näiteks nimega "read_all_repository" ja klõpsake "Loo".

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Näeme, et on ilmunud märk. Ta ilmub ainult 1 kord.

Logi sisse administraatorina.

Avage Seadistused -> SVG märgid

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Kopeerige see tunnus väljale „Tegevusmärgi tunnus” ja klõpsake nuppu Salvesta.

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Avage Haldus -> Turvalisus -> Loamallid -> Vaikimisi mall (ja muud mallid, mis teil on).

Märkide kasutajal peab olema märkeruut "Sirvi".

Testimine.

Näiteks võtame projekti https://github.com/jitpack/maven-simple.

Impordime selle projekti.

Lisage faili .gitlab-ci.yml projekti juure järgmise sisuga.

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

SonarQube'is näeb projekt välja järgmine:

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Lisage kotid saidile README.md ja need näevad välja järgmised:

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Märgi kuvamiskood näeb välja järgmine:

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Märkide kuvamise stringi sõelumine:

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

Kust saada/kontrollida projektivõtit ja projekti ID.

Projekti võti on paremas alanurgas. URL sisaldab projekti ID-d.

SonarQube'i lähtekoodi kvaliteedikontrolli oleku kuvamine arendajatele

Mõõdikute saamise võimalused võivad olla vaata siia.

Kõik täiustuste ja veaparanduste taotlused esitage sellesse hoidlasse.

Telegrami vestlus SonarQube'i kohta https://t.me/sonarqube_ru
Telegrami vestlus DevSecOpsi kohta – turvaline DevOps https://t.me/sec_devops

Allikas: www.habr.com

Lisa kommentaar