Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

SonarQube estas malfermfonta koda kvalitcertigo-platformo, kiu subtenas ampleksan gamon de programlingvoj kaj disponigas raportadon pri mezuriloj kiel ekzemple koda duobligo, kodaj normoj-konformeco, testa priraportado, koda komplekseco, eblaj eraroj, kaj pli. SonarQube oportune bildigas analizrezultojn kaj permesas vin spuri la dinamikon de projekt-disvolviĝo laŭlonge de la tempo.

Celo: Montri al programistoj la staton de fontkoda kvalitkontrolo en SonarQube.

Estas du solvoj:

  • Rulu skripton por kontroli la staton de kontrolo de kvalito de fontkodo en SonarQube. Se la kvalita kontrolo de la fontkodo en SonarQube ne pasas, tiam malsukcesas la asembleon.
  • Montru staton de kontrolo de kvalito de fontkodo sur la ĉefa paĝo de la projekto.

Instalante SonarQube

Por instali sonarqube el rpm-pakaĵoj, ni uzos la deponejon https://harbottle.gitlab.io/harbottle-main.

Ni instalu la pakaĵon kun la deponejo por CentOS 7.

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

Ni instalas sonarqube mem.

yum install -y sonarqube

Dum instalado, plej multaj kromprogramoj estos instalitaj, sed vi devas instali findbugs kaj pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Lanĉu la servon kaj aldonu ĝin al ekfunkciigo

systemctl start sonarqube
systemctl enable sonarqube

Se necesas longa tempo por ŝargi, tiam aldonu hazardan nombrogeneratoron /dev/./urandom al la fino de la opcioj sonar.web.javaOpts

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

Ruli skripton por kontroli la staton de fontkoda kvalitkontrolo en SonarQube.

Bedaŭrinde, la kromaĵo sonar-break-maven-plugin ne estas ĝisdatigita delonge. Do ni skribu nian propran skripton.

Por testado ni uzos la deponejon https://github.com/uweplonus/spotbugs-examples.

Importado en Gitlab. Aldonu la dosieron .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

La dosiero .gitlab-ci.yml ne estas perfekta. Provita ĉu skanado de taskoj en sonarqube finiĝis kun la statuso: "SUKCESO". Ĝis nun ne estis aliaj statusoj. Tuj kiam estos aliaj statoj, mi korektos .gitlab-ci.yml en ĉi tiu afiŝo.

Montrante la fontkodon kvalitkontrolan statuson sur la ĉefa projekta paĝo

Instalante la kromprogramon por SonarQube

yum install -y sonarqube-qualinsight-badges

Ni iras al SonarQube ĉe http://172.26.9.115:9000/
Kreu kutiman uzanton, ekzemple "insignojn".
Ensalutu al SonarQube sub ĉi tiu uzanto.

Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

Iru al "Mia konto", kreu novan ĵetonon, ekzemple kun la nomo "read_all_repository" kaj alklaku "Generi".

Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

Ni vidas, ke ĵetono aperis. Li aperos nur 1 fojon.

Ensalutu kiel administranto.

Iru al Agordo -> SVG-insignoj

Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

Kopiu ĉi tiun ĵetonon en la kampon "Agadinsigna ĵetono" kaj alklaku la butonon konservi.

Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

Iru al Administrado -> Sekureco -> Permesaj Ŝablonoj -> Defaŭlta ŝablono (kaj aliaj ŝablonoj kiujn vi havos).

La uzanto de insignoj devas havi la markobutonon "Frumu" markita.

Testado.

Ekzemple, ni prenu la projekton https://github.com/jitpack/maven-simple.

Ni importu ĉi tiun projekton.

Aldonu la dosieron .gitlab-ci.yml al la projekta radiko kun la sekva enhavo.

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 la projekto aspektos jene:

Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

Aldonu sakojn al README.md kaj ili aspektos jene:

Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

La insignoj montras kodon jene:

Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

Analizante la insignojn montri ĉenon:

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

Kie akiri/kontroli Projektan Ŝlosilon kaj projektididentigilon.

Projekta Ŝlosilo estas malsupre dekstre. La URL enhavas la projektididentigilon.

Montrante fontkodan kvalitkontrolan statuson en SonarQube al programistoj

Opcioj por akiri metrikojn povas esti rigardu ĉi tien.

Ĉiuj tiraj petoj por plibonigoj, korektoj de cimoj submeti al ĉi tiu deponejo.

Telegram-babilado pri SonarQube https://t.me/sonarqube_ru
Telegram-babilado pri DevSecOps - sekura DevOps https://t.me/sec_devops

fonto: www.habr.com

Aldoni komenton