Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Ang SonarQube usa ka open source code quality assurance platform nga nagsuporta sa usa ka halapad nga programming language ug naghatag ug report sa metrics sama sa code duplication, coding standards compliance, test coverage, code complexity, potential bugs, ug uban pa. Ang SonarQube dali nga nagtan-aw sa mga resulta sa pagtuki ug gitugotan ka nga masubay ang dinamika sa pag-uswag sa proyekto sa paglabay sa panahon.

Tumong: Ipakita sa mga developer ang kahimtang sa pagkontrol sa kalidad sa source code sa SonarQube.

Adunay duha ka solusyon:

  • Pagdalag script para masusi ang source code quality control status sa SonarQube. Kung ang pagkontrol sa kalidad sa source code sa SonarQube dili moagi, unya mapakyas ang asembliya.
  • Ipakita ang kahimtang sa pagkontrol sa kalidad sa source code sa panguna nga panid sa proyekto.

Pag-instalar sa SonarQube

Aron ma-install ang sonarqube gikan sa mga pakete sa rpm, among gamiton ang repositoryo https://harbottle.gitlab.io/harbottle-main.

Atong i-install ang package nga adunay repository alang sa CentOS 7.

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

Gi-install namon ang sonarqube mismo.

yum install -y sonarqube

Atol sa pag-instalar, kadaghanan sa mga plugins i-install, apan kinahanglan nimo nga i-install ang findbugs ug pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Ilunsad ang serbisyo ug idugang kini sa pagsugod

systemctl start sonarqube
systemctl enable sonarqube

Kon kini nagkinahanglan og taas nga panahon sa pagkarga, unya pagdugang ug random number generator /dev/./urandom ngadto sa katapusan sa mga opsyon sonar.web.javaOpts

sonar.web.javaOpts=Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -Djava.security.egd=file:/dev/urandom

Pagpadagan sa usa ka script aron masusi ang kahimtang sa pagkontrol sa kalidad sa source code sa SonarQube.

Ikasubo, ang sonar-break-maven-plugin plugin wala pa ma-update sa dugay nga panahon. Busa magsulat kita sa atong kaugalingong script.

Alang sa pagsulay among gamiton ang repositoryo https://github.com/uweplonus/spotbugs-examples.

Pag-import sa Gitlab. Idugang ang .gitlab-ci.yml file:

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

Ang .gitlab-ci.yml file dili perpekto. Gisulayan kung ang mga buluhaton sa pag-scan sa sonarqube natapos sa status: "SUCCESS". Sa pagkakaron wala pay laing mga status. Sa diha nga adunay uban nga mga status, akong itul-id ang .gitlab-ci.yml niini nga post.

Pagpakita sa source code quality control status sa main page nga proyekto

Pag-instalar sa plugin para sa SonarQube

yum install -y sonarqube-qualinsight-badges

Moadto mi sa SonarQube sa http://172.26.9.115:9000/
Paghimo usa ka regular nga tiggamit, pananglitan "mga badge".
Log in sa SonarQube ubos niini nga user.

Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Adto sa "Akong account", paghimo og bag-ong token, pananglitan sa ngalan nga "read_all_repository" ug i-klik ang "Genereate".

Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Atong makita nga usa ka timaan ang nagpakita. 1 time ra siya mupakita.

Login isip tigdumala.

Adto sa Configuration -> SVG Badges

Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Kopyaha kini nga token ngadto sa "Activity badge token" field ug i-klik ang save button.

Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Adto sa Administration -> Security -> Permission Templates -> Default template (ug uban pang templates nga imong mabatonan).

Ang badge user kinahanglan nga adunay checkbox nga "Browse".

Pagsulay.

Pananglitan, atong kuhaon ang proyekto https://github.com/jitpack/maven-simple.

Atong i-import kini nga proyekto.

Idugang ang .gitlab-ci.yml file sa gamut sa proyekto nga adunay mosunod nga sulod.

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

Sa SonarQube ang proyekto ingon niini:

Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Idugang ang mga bag sa README.md ug kini tan-awon:

Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Ang mga badge nga gipakita nga code ingon niini:

Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Pag-parse sa mga badge nga gipakita nga string:

[![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-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°)

Asa makuha/susiha ang Project Key ug project id.

Ang Project Key naa sa tuo sa ubos. Ang URL naglangkob sa project id.

Pagpakita sa source code quality control status sa SonarQube ngadto sa mga developers

Ang mga kapilian alang sa pagkuha sa mga sukatan mahimong tan-aw dinhi.

Ang tanan nga mga hangyo sa pagbitad alang sa pagpaayo, pag-ayo sa bug isumite sa kini nga repository.

Telegram chat bahin sa SonarQube https://t.me/sonarqube_ru
Telegram chat bahin sa DevSecOps - luwas nga DevOps https://t.me/sec_devops

Source: www.habr.com

Idugang sa usa ka comment