Намоиши ҳолати назорати сифати коди сарчашма дар 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

Мо худи 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 ба таҳиягарон

Мо мебинем, ки нишона пайдо шудааст. Ӯ танҳо як маротиба пайдо мешавад.

Ҳамчун администратор ворид шавед.

Ба Конфигуратсия -> Нишонҳои 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-проекта)

Калиди лоиҳа ва ID-и лоиҳаро аз куҷо гирифтан/тафтиш кардан мумкин аст.

Калиди лоиҳа дар поёни рост ҷойгир аст. URL дорои ID-и лоиҳа мебошад.

Намоиши ҳолати назорати сифати коди сарчашма дар SonarQube ба таҳиягарон

Имкониятҳо барои гирифтани ченакҳо метавонанд бошанд ба ин ҷо нигоҳ кунед.

Ҳама дархостҳо барои такмилдиҳӣ, ислоҳи хатогиҳо ба ин анбор пешниҳод кунед.

Чати Telegram дар бораи SonarQube https://t.me/sonarqube_ru
Чати Telegram дар бораи DevSecOps - бехатар DevOps https://t.me/sec_devops

Манбаъ: will.com

Илова Эзоҳ