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

Егер жүктеуге көп уақыт кетсе, sonar.web.javaOpts опцияларының соңына кездейсоқ сандар генераторын /dev/./urandom қосыңыз.

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 бағдарламасында әзірлеушілерге бастапқы код сапасын бақылау күйін көрсету

«Менің тіркелгім» бөліміне өтіңіз, жаңа таңбалауыш жасаңыз, мысалы, «all_repository оқу» атауымен және «Жасау» түймесін басыңыз.

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 туралы Telegram чаты https://t.me/sonarqube_ru
DevSecOps туралы Telegram чаты – қауіпсіз DevOps https://t.me/sec_devops

Ақпарат көзі: www.habr.com

пікір қалдыру