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 дээр эх кодын чанарын хяналтын статусыг хөгжүүлэгчдэд үзүүлж байна

"Миний данс" руу очоод шинэ токен үүсгээд, жишээ нь "read_all_repository" нэртэй "Үйлдвэрлэх" дээр дарна уу.

SonarQube дээр эх кодын чанарын хяналтын статусыг хөгжүүлэгчдэд үзүүлж байна

Токен гарч ирснийг бид харж байна. Тэр зөвхөн 1 удаа гарч ирнэ.

Администратороор нэвтэрнэ үү.

Тохиргоо -> SVG Badges руу очно уу

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 дээр эх кодын чанарын хяналтын статусыг хөгжүүлэгчдэд үзүүлж байна

Хэмжилтийг олж авах сонголтууд байж болно эндээс хараарай.

Сайжруулах, алдаа засах бүх татах хүсэлт энэ репозитор руу илгээнэ үү.

SonarQube-ийн тухай Telegram чат https://t.me/sonarqube_ru
DevSecOps-ийн тухай Telegram чат - аюулгүй DevOps https://t.me/sec_devops

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх