Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

SonarQube е платформа за обезбедување квалитет со отворен код, која поддржува широк опсег на програмски јазици и обезбедува известување за метрика како што се дуплирање на кодови, усогласеност со стандардите за кодирање, покриеност на тестот, сложеност на кодот, потенцијални грешки и многу повеќе. SonarQube практично ги визуелизира резултатите од анализата и ви овозможува да ја следите динамиката на развојот на проектот со текот на времето.

Цел: Покажете им на програмерите статус на контрола на квалитетот на изворниот код во SonarQube.

Постојат две решенија:

  • Извршете скрипта за да го проверите статусот на контрола на квалитетот на изворниот код во SonarQube. Ако контролата на квалитетот на изворниот код во SonarQube не помине, тогаш неуспешно склопување.
  • Прикажи статус за контрола на квалитетот на изворниот код на главната страница на проектот.

Инсталирање на SonarQube

За да инсталираме sonarqube од пакетите rpm, ќе го користиме складиштето https://harbottle.gitlab.io/harbottle-main.

Ајде да го инсталираме пакетот со складиштето за CentOS 7.

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

Го инсталираме самиот сонаркубе.

yum install -y sonarqube

За време на инсталацијата, повеќето додатоци ќе бидат инсталирани, но треба да инсталирате findbugs и pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Стартувајте ја услугата и додајте ја на стартување

systemctl start sonarqube
systemctl enable sonarqube

Ако е потребно долго време да се вчита, тогаш додајте генератор на случаен број /dev/./urandom на крајот од опциите sonar.web.javaOpts

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

Водење скрипта за проверка на статусот на контролата на квалитетот на изворниот код во SonarQube.

За жал, додатокот sonar-break-maven-plugin не е ажуриран долго време. Па, ајде да напишеме сопствено сценарио.

За тестирање ќе го користиме складиштето https://github.com/uweplonus/spotbugs-examples.

Увоз во Gitlab. Додадете ја датотеката .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 не е совршена. Тестирано дали задачите за скенирање во sonarqube завршуваат со статус: „УСПЕШЕН“. Досега немало други статуси. Штом има други статуси, ќе го поправам .gitlab-ci.yml во овој пост.

Прикажување на статусот за контрола на квалитетот на изворниот код на главната страница на проектот

Инсталирање на приклучокот за SonarQube

yum install -y sonarqube-qualinsight-badges

Одиме во SonarQube кај http://172.26.9.115:9000/
Направете редовен корисник, на пример „значки“.
Најавете се на SonarQube под овој корисник.

Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

Одете во „Моја сметка“, креирајте нов токен, на пример со името „read_all_repository“ и кликнете „Genereate“.

Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

Гледаме дека се појави токен. Тој ќе се појави само 1 пат.

Најавете се како администратор.

Одете во Конфигурација -> Значки на SVG

Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

Копирајте го овој токен во полето „Значка за активност“ и кликнете на копчето за зачувување.

Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

Одете во Администрација -> Безбедност -> Шаблони за дозволи -> Стандарден шаблон (и други шаблони што ќе ги имате).

Корисникот на значките мора да го има означено полето за избор „Преглед“.

Тестирање.

На пример, да го земеме проектот https://github.com/jitpack/maven-simple.

Ајде да го увеземе овој проект.

Додадете ја датотеката .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.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 проектот ќе изгледа вака:

Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

Додајте кеси на README.md и тие ќе изгледаат вака:

Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

Кодот за прикажување на значките изгледа вака:

Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

Парсирање на низата за прикажување значки:

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

Каде да се добие/провери клуч на проектот и проект на проект.

Проектниот клуч е долу десно. URL-то го содржи проектниот проект.

Прикажување на статусот за контрола на квалитетот на изворниот код во SonarQube за програмерите

Опциите за добивање метрика може да бидат Погледнете тука.

Сите барања за повлекување за подобрувања, поправени грешки доставете до ова складиште.

Телеграмски разговор за SonarQube https://t.me/sonarqube_ru
Телеграмски разговор за DevSecOps - безбедни DevOps https://t.me/sec_devops

Извор: www.habr.com

Додадете коментар