Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

SonarQube ir atvērtā pirmkoda kvalitātes nodrošināšanas platforma, kas atbalsta plašu programmēšanas valodu klāstu un nodrošina pārskatus par tādiem rādītājiem kā koda dublēšana, atbilstība kodēšanas standartiem, testa pārklājums, koda sarežģītība, iespējamās kļūdas un daudz ko citu. SonarQube ērti vizualizē analīzes rezultātus un ļauj izsekot projekta attīstības dinamikai laika gaitā.

Mērķis: parādīt izstrādātājiem SonarQube pirmkoda kvalitātes kontroles statusu.

Ir divi risinājumi:

  • Palaidiet skriptu, lai pārbaudītu avota koda kvalitātes kontroles statusu SonarQube. Ja SonarQube pirmkoda kvalitātes kontrole neiztur, montāža neizdodas.
  • Rādīt pirmkoda kvalitātes kontroles statusu galvenajā projekta lapā.

SonarQube instalēšana

Lai instalētu sonarqube no rpm pakotnēm, mēs izmantosim repozitoriju https://harbottle.gitlab.io/harbottle-main.

Instalēsim pakotni ar CentOS 7 repozitoriju.

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

Mēs uzstādām pašu sonarqube.

yum install -y sonarqube

Instalēšanas laikā tiks instalēta lielākā daļa spraudņu, taču jums ir jāinstalē findbugs un pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Palaidiet pakalpojumu un pievienojiet to startēšanai

systemctl start sonarqube
systemctl enable sonarqube

Ja ielāde prasa ilgu laiku, opciju beigās pievienojiet nejaušo skaitļu ģeneratoru /dev/./urandom.

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

Skripta palaišana, lai pārbaudītu SonarQube pirmkoda kvalitātes kontroles statusu.

Diemžēl spraudnis sonar-break-maven-plugin ilgu laiku nav atjaunināts. Tāpēc rakstīsim paši savu scenāriju.

Testēšanai izmantosim repozitoriju https://github.com/uweplonus/spotbugs-examples.

Importēšana Gitlab. Pievienojiet failu .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 fails nav ideāls. Pārbaudīts, vai skenēšanas uzdevumi sonarqube beidzās ar statusu: "SUCCESS". Līdz šim citu statusu nav bijis. Tiklīdz būs citi statusi, es šajā ziņā izlabošu .gitlab-ci.yml.

Avota koda kvalitātes kontroles statusa parādīšana galvenajā projekta lapā

SonarQube spraudņa instalēšana

yum install -y sonarqube-qualinsight-badges

Mēs dodamies uz SonarQube plkst http://172.26.9.115:9000/
Izveidojiet parastu lietotāju, piemēram, "nozīmītes".
Piesakieties SonarQube ar šo lietotāju.

Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

Dodieties uz “Mans konts”, izveidojiet jaunu marķieri, piemēram, ar nosaukumu “lasīt_visu_repozitoriju” un noklikšķiniet uz “Izveidot”.

Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

Mēs redzam, ka ir parādījies žetons. Viņš parādīsies tikai 1 reizi.

Piesakieties kā administrators.

Atveriet sadaļu Konfigurācija -> SVG emblēmas

Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

Kopējiet šo marķieri laukā Darbības emblēmas marķieris un noklikšķiniet uz saglabāšanas pogas.

Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

Dodieties uz Administrēšana -> Drošība -> Atļauju veidnes -> Noklusējuma veidne (un citas veidnes, kas jums būs).

Emblēmu lietotājam ir jāatzīmē izvēles rūtiņa Pārlūkot.

Pārbaude.

Piemēram, ņemsim projektu https://github.com/jitpack/maven-simple.

Importēsim šo projektu.

Pievienojiet .gitlab-ci.yml failu projekta saknei ar šādu saturu.

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

Programmā SonarQube projekts izskatīsies šādi:

Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

Pievienojiet somas vietnei README.md, un tās izskatīsies šādi:

Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

Žetonu parādīšanas kods izskatās šādi:

Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

Emblēmu displeja virknes parsēšana:

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

Kur iegūt/pārbaudīt projekta atslēgu un projekta ID.

Projekta atslēga atrodas apakšējā labajā stūrī. URL satur projekta ID.

Izstrādātājiem tiek rādīts pirmkoda kvalitātes kontroles statuss SonarQube

Metrikas iegūšanas iespējas var būt paskaties šeit.

Visi izvilkšanas pieprasījumi veikt uzlabojumus, kļūdu labojumus iesniegt šajā repozitorijā.

Telegrammas tērzēšana par SonarQube https://t.me/sonarqube_ru
Telegrammas tērzēšana par DevSecOps — drošs DevOps https://t.me/sec_devops

Avots: www.habr.com

Pievieno komentāru