SonarQube'де баштапкы коддун сапатын көзөмөлдөө статусун иштеп чыгуучуларга көрсөтүү

SonarQube – бул программалоо тилдеринин кеңири спектрин колдогон жана коддун кайталанышы, коддоо стандарттарына шайкештиги, тесттин камтуусу, коддун татаалдыгы, мүмкүн болуучу мүчүлүштүктөр жана башкалар сыяктуу көрсөткүчтөр боюнча отчеттуулукту камсыз кылган ачык булак кодунун сапатына кепилдик берүүчү платформа. SonarQube талдоо натыйжаларын ыңгайлуу визуализациялайт жана убакыттын өтүшү менен долбоордун өнүгүү динамикасына көз салууга мүмкүндүк берет.

Максат: Иштеп чыгуучуларга SonarQubeдеги баштапкы коддун сапатын көзөмөлдөө статусун көрсөтүү.

Эки чечим бар:

  • SonarQube'де баштапкы коддун сапатын көзөмөлдөө абалын текшерүү үчүн скриптти иштетиңиз. Эгерде SonarQube'деги баштапкы коддун сапатын контролдоодон өтпөй калса, анда монтаждоо ишке ашпай калат.
  • Долбоордун негизги бетинде баштапкы коддун сапатын көзөмөлдөө статусун көрсөтүү.

SonarQube орнотулууда

RPM топтомдорунан sonarqube орнотуу үчүн биз репозиторийди колдонобуз https://harbottle.gitlab.io/harbottle-main.

CentOS 7 үчүн репозиторий менен пакетти орнотобуз.

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

Биз sonarqube өзү орнотот.

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" аталышы менен жана "Түзүү" баскычын басыңыз.

SonarQube'де баштапкы коддун сапатын көзөмөлдөө статусун иштеп чыгуучуларга көрсөтүү

Токен пайда болгонун көрүп жатабыз. Ал 1 жолу гана пайда болот.

Администратор катары кириңиз.

Конфигурация -> SVG Белгилерине өтүңүз

SonarQube'де баштапкы коддун сапатын көзөмөлдөө статусун иштеп чыгуучуларга көрсөтүү

Бул белгини "Аракет төш белгиси" талаасына көчүрүп, сактоо баскычын басыңыз.

SonarQube'де баштапкы коддун сапатын көзөмөлдөө статусун иштеп чыгуучуларга көрсөтүү

Администрация -> Коопсуздук -> Уруксат калыптары -> Демейки шаблонго өтүңүз (жана сизде боло турган башка шаблондор).

Белгилерди колдонуучу "Каралоо" кутучасын белгилеши керек.

Testing.

Мисалы, долбоорду алалы 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 жөнүндө Telegram чаты https://t.me/sonarqube_ru
DevSecOps жөнүндө Telegram чаты - коопсуз DevOps https://t.me/sec_devops

Source: www.habr.com

Комментарий кошуу