Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

„SonarQube“ yra atvirojo kodo kokybės užtikrinimo platforma, palaikanti platų programavimo kalbų spektrą ir teikianti ataskaitas apie tokias metrikas kaip kodo dubliavimas, kodavimo standartų laikymasis, bandymų aprėptis, kodo sudėtingumas, galimos klaidos ir kt. SonarQube patogiai vizualizuoja analizės rezultatus ir leidžia sekti projekto kūrimo dinamiką laikui bėgant.

Tikslas: rodyti kūrėjams šaltinio kodo kokybės kontrolės būseną sistemoje „SonarQube“.

Yra du sprendimai:

  • Paleiskite scenarijų, kad patikrintumėte šaltinio kodo kokybės kontrolės būseną „SonarQube“. Jei „SonarQube“ šaltinio kodo kokybės kontrolė nepraeina, surinkimas nepavyks.
  • Rodyti šaltinio kodo kokybės kontrolės būseną pagrindiniame projekto puslapyje.

„SonarQube“ diegimas

Norėdami įdiegti sonarqube iš rpm paketų, naudosime saugyklą https://harbottle.gitlab.io/harbottle-main.

Įdiegkime paketą su „CentOS 7“ saugykla.

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

Sumontuojame patį sonarqube.

yum install -y sonarqube

Diegimo metu bus įdiegta dauguma įskiepių, tačiau reikia įdiegti findbugs ir pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Paleiskite paslaugą ir pridėkite ją prie paleisties

systemctl start sonarqube
systemctl enable sonarqube

Jei įkėlimas trunka ilgai, parinkčių sonar.web.javaOpts pabaigoje pridėkite atsitiktinių skaičių generatorių /dev/./urandom

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

Vykdomas scenarijus, skirtas patikrinti šaltinio kodo kokybės kontrolės būseną „SonarQube“.

Deja, sonar-break-maven-plugin įskiepis nebuvo atnaujintas ilgą laiką. Taigi rašykime savo scenarijų.

Testavimui naudosime saugyklą https://github.com/uweplonus/spotbugs-examples.

Importavimas į Gitlab. Pridėkite .gitlab-ci.yml failą:

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 failas nėra tobulas. Išbandyta, ar nuskaitymo užduotys „sonarqube“ baigiasi būsena: „SĖKMĖ“. Kol kas kitų statusų nebuvo. Kai tik bus kitų būsenų, pataisysiu .gitlab-ci.yml šiame įraše.

Pagrindiniame projekto puslapyje rodoma šaltinio kodo kokybės kontrolės būsena

„SonarQube“ papildinio diegimas

yum install -y sonarqube-qualinsight-badges

Einame į SonarQube http://172.26.9.115:9000/
Sukurkite įprastą vartotoją, pavyzdžiui, „ženklelius“.
Prisijunkite prie „SonarQube“ naudodami šį vartotoją.

Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

Eikite į „Mano paskyra“, sukurkite naują prieigos raktą, pavyzdžiui, pavadinimu „read_all_repository“ ir spustelėkite „Generuoti“.

Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

Matome, kad atsirado žetonas. Jis pasirodys tik 1 kartą.

Prisijunkite kaip administratorius.

Eikite į Konfigūracija -> SVG ženkleliai

Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

Nukopijuokite šį prieigos raktą į lauką „Veiklos ženklelio prieigos raktas“ ir spustelėkite išsaugojimo mygtuką.

Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

Eikite į Administravimas -> Sauga -> Leidimų šablonai -> Numatytasis šablonas (ir kiti šablonai, kuriuos turėsite).

Ženkliukų naudotojas turi pažymėti žymimąjį laukelį „Naršyti“.

Testavimas

Pavyzdžiui, paimkime projektą https://github.com/jitpack/maven-simple.

Importuosime šį projektą.

Pridėkite .gitlab-ci.yml failą prie projekto šaknies su tokiu turiniu.

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

„SonarQube“ projektas atrodys taip:

Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

Pridėkite maišelius prie README.md ir jie atrodys taip:

Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

Ženklelių rodymo kodas atrodo taip:

Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

Ženklelių rodymo eilutės analizavimas:

[![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 gauti / patikrinti projekto raktą ir projekto ID.

Projekto raktas yra apačioje dešinėje. URL yra projekto ID.

Kūrėjams rodoma šaltinio kodo kokybės kontrolės būsena „SonarQube“.

Metrikos gavimo galimybės gali būti pažiūrėk čia.

Visos patobulinimų, klaidų taisymo užklausos pateikti į šią saugyklą.

Telegramos pokalbis apie „SonarQube“. https://t.me/sonarqube_ru
Telegramos pokalbis apie „DevSecOps“ – saugus „DevOps“. https://t.me/sec_devops

Šaltinis: www.habr.com

Добавить комментарий