It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

SonarQube is in platfoarm foar kwaliteitsfersekering foar iepen boarne koade dat in breed oanbod fan programmeartalen stipet en rapportaazje leveret oer metriken lykas koadeduplikaasje, neilibjen fan kodearringnormen, testdekking, koadekompleksiteit, potensjele bugs, en mear. SonarQube visualisearret analyseresultaten maklik en lit jo de dynamyk fan projektûntwikkeling oer de tiid folgje.

Doel: Toan ûntwikkelders de status fan boarnekoade kwaliteitskontrôle yn SonarQube.

D'r binne twa oplossingen:

  • In skript útfiere om de kwaliteitskontrôlestatus fan boarnekoade yn SonarQube te kontrolearjen. As de kwaliteitskontrôle fan 'e boarnekoade yn SonarQube net trochgiet, mislearje dan de gearkomste.
  • Lit de kwaliteitskontrôlestatus fan boarnekoade sjen op 'e haadprojektside.

SonarQube ynstalleare

Om sonarqube te ynstallearjen fan rpm-pakketten, sille wy it repository brûke https://harbottle.gitlab.io/harbottle-main.

Litte wy it pakket ynstallearje mei it repository foar CentOS 7.

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

Wy ynstallearje sonarqube sels.

yum install -y sonarqube

Tidens de ynstallaasje wurde de measte plugins ynstalleare, mar jo moatte findbugs en pmd ynstallearje

yum install -y sonarqube-findbugs sonarqube-pmd

Starte de tsjinst en foegje it ta oan it opstarten

systemctl start sonarqube
systemctl enable sonarqube

As it lang duorret om te laden, foegje dan in willekeurige nûmergenerator /dev/./urandom ta oan 'e ein fan' e opsjes sonar.web.javaOpts

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

In skript útfiere om de status fan boarnekoade kwaliteitskontrôle te kontrolearjen yn SonarQube.

Spitigernôch is de plugin sonar-break-maven-plugin in lange tiid net bywurke. Dus litte wy ús eigen skript skriuwe.

Foar testen sille wy it repository brûke https://github.com/uweplonus/spotbugs-examples.

Ymportearje yn Gitlab. Foegje it .gitlab-ci.yml-bestân ta:

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

De .gitlab-ci.yml triem is net perfekt. Teste as skennen taken yn sonarqube einige mei de status: "SUKSES". Oant no ta binne der gjin oare statusen. Sa gau as der binne oare statusen, Ik sil korrigearje .gitlab-ci.yml yn dizze post.

De boarnekoade kwaliteitskontrôlestatus werjaan op 'e haadprojektside

Ynstallearje de plugin foar SonarQube

yum install -y sonarqube-qualinsight-badges

Wy geane nei SonarQube at http://172.26.9.115:9000/
Meitsje in gewoane brûker, bygelyks "badges".
Oanmelde by SonarQube ûnder dizze brûker.

It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

Gean nei "Myn akkount", meitsje in nij token, bygelyks mei de namme "read_all_repository" en klik op "Genereate".

It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

Wy sjogge dat der in token is ferskynd. Hy sil mar 1 kear ferskine.

Oanmelde as behearder.

Gean nei Konfiguraasje -> SVG Badges

It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

Kopiearje dit token yn it fjild "Activity badge token" en klikje op de knop opslaan.

It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

Gean nei Administration -> Feiligens -> Tastimmingssjabloanen -> Standert sjabloan (en oare sjabloanen dy't jo hawwe).

De badges-brûker moat it karfakje "Blêdzje" ynskeakele hawwe.

Testen.

Litte wy bygelyks it projekt nimme https://github.com/jitpack/maven-simple.

Litte wy dit projekt ymportearje.

Foegje de .gitlab-ci.yml-bestân ta oan de projektroot mei de folgjende ynhâld.

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

Yn SonarQube sil it projekt der sa útsjen:

It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

Foegje tassen ta oan README.md en se sille der sa útsjen:

It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

De werjeftekoade fan de badges sjocht der sa út:

It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

It parsearjen fan de tekenrige werjaan fan 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.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-проекта)

Wêr te krijen / kontrolearje Project Key en projekt id.

Project Key is rjochts ûnder. De URL befettet de projekt-id.

It werjaan fan boarnekoade kwaliteitskontrôlestatus yn SonarQube oan ûntwikkelders

Opsjes foar it krijen fan metriken kinne wêze sjoch hjir.

Alle pull-oanfragen foar ferbetteringen, bug fixes yntsjinje by dit repository.

Telegram petear oer SonarQube https://t.me/sonarqube_ru
Telegram petear oer DevSecOps - feilige DevOps https://t.me/sec_devops

Boarne: www.habr.com

Add a comment