Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

SonarQube platformek pêbaweriya kalîteya koda çavkaniyek vekirî ye ku gelek cûrbecûr zimanên bernamekirinê piştgirî dike û raporên li ser metrîkên wekî dubarekirina kodê, lihevhatina standardên kodkirinê, vegirtina ceribandinê, tevliheviya kodê, xeletiyên potansiyel û hêj bêtir peyda dike. SonarQube bi hêsanî encamên analîzê xuya dike û dihêle hûn dînamîkên pêşkeftina projeyê bi demê re bişopînin.

Armanc: Di SonarQube de rewşa kontrolkirina kalîteya koda çavkaniyê nîşanî pêşdebiran bidin.

Du çareserî hene:

  • Skrîptek bimeşînin da ku rewşa kontrolkirina kalîteya koda çavkaniyê li SonarQube kontrol bikin. Ger kontrolkirina kalîteyê ya koda çavkaniyê di SonarQube de derbas nebe, wê hingê civîn têk diçin.
  • Li ser rûpela projeyê ya sereke statûya kontrolkirina kalîteya koda çavkaniyê nîşan bide.

Sazkirina SonarQube

Ji bo sazkirina sonarqube ji pakêtên rpm, em ê depoyê bikar bînin https://harbottle.gitlab.io/harbottle-main.

Ka em pakêtê bi depoya ji bo CentOS 7 saz bikin.

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

Em sonarqube bi xwe saz dikin.

yum install -y sonarqube

Di dema sazkirinê de, pir pêvekan dê bêne saz kirin, lê hûn hewce ne ku findbugs û pmd saz bikin

yum install -y sonarqube-findbugs sonarqube-pmd

Karûbar dest pê bikin û wê li destpêkê zêde bikin

systemctl start sonarqube
systemctl enable sonarqube

Ger barkirina wê demek dirêj bigire, wê hingê afirînerek hejmarên bêserûber /dev/./urandom li dawiya vebijarkan zêde bikin sonar.web.javaOpts

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

Ji bo kontrolkirina rewşa kontrolkirina kalîteya koda çavkaniyê di SonarQube de skrîptek dimeşîne.

Mixabin, pêveka sonar-break-maven-plugin ji bo demek dirêj ve nehatiye nûve kirin. Ji ber vê yekê em senaryoya xwe binivîsin.

Ji bo ceribandinê em ê depoyê bikar bînin https://github.com/uweplonus/spotbugs-examples.

Import nav Gitlab. Pelê .gitlab-ci.yml zêde bikin:

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

Pelê .gitlab-ci.yml ne bêkêmasî ye. Ger peywirên şopandinê di sonarqube de bi statûya: "SERKEFTIN" qediyan ceribandin. Heta niha tu statuyên din tunene. Hema statûyên din hebin ez ê di vê nivîsê de .gitlab-ci.yml rast bikim.

Li ser rûpela projeyê ya sereke statûya kontrolkirina kalîteya koda çavkaniyê nîşan dide

Sazkirina pêvekê ji bo SonarQube

yum install -y sonarqube-qualinsight-badges

Em diçin SonarQube li http://172.26.9.115:9000/
Bikarhênerek birêkûpêk biafirînin, mînakî "nîşan".
Di bin vê bikarhênerê de têkevin SonarQube.

Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

Herin "Hesabê min", nîşanek nû biafirînin, mînakî bi navê "read_all_repository" û "Çêkirin" bikirtînin.

Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

Em dibînin ku nîşanek derketiye. Ew ê tenê 1 car xuya bibe.

Têkeve wekî rêveber.

Herin Veavakirin -> Nîşaneyên SVG

Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

Vê nîşanê li qada "Nîşana nîşana Çalakiyê" kopî bikin û bişkoja tomarkirinê bikirtînin.

Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

Herin Rêvebir -> Ewlekarî -> Şablonên Destûr -> Şablonên xwerû (û şablonên din ên ku hûn ê hebin).

Bikarhênerê nîşanan divê qutiya kontrolê ya "Browse" veqetandibe.

Testkirin.

Mînak, em projeyê bigirin https://github.com/jitpack/maven-simple.

Werin em vê projeyê îthal bikin.

Bi naveroka jêrîn pelê .gitlab-ci.yml li koka projeyê zêde bikin.

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

Di SonarQube de proje dê bi vî rengî xuya bike:

Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

Kulîlkan li README.md zêde bikin û ew ê bi vî rengî xuya bikin:

Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

Koda nîşandana nîşanan wiha xuya dike:

Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

Parvekirina rêzika nîşana nîşanan:

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

Ku meriv Mifteya Projeyê û nasnameya projeyê li ku derê bigire/kontrol bike.

Project Key li binê rastê ye. Di URL-ê de nasnameya projeyê heye.

Nîşandana rewşa kontrolkirina kalîteya koda çavkaniyê ya li SonarQube ji pêşdebiran re

Vebijarkên ji bo bidestxistina metrîkan dikarin bibin li vir binihêrin.

Hemî daxwazên ji bo çêtirkirinan, rastkirina xeletiyan dikişînin bişînin vê depoyê.

Di derbarê SonarQube de sohbeta Telegramê https://t.me/sonarqube_ru
Danûstandina Telegram di derbarê DevSecOps - DevOps ewledar https://t.me/sec_devops

Source: www.habr.com

Add a comment