Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

SonarQube - bu ochiq kodli kod sifatini ta'minlash platformasi bo'lib, keng ko'lamli dasturlash tillarini qo'llab-quvvatlaydi va kodlarni takrorlash, kodlash standartlariga muvofiqligi, test qamrovi, kod murakkabligi, yuzaga kelishi mumkin bo'lgan xatolar va boshqalar kabi ko'rsatkichlar bo'yicha hisobot beradi. SonarQube qulay tarzda tahlil natijalarini vizualizatsiya qiladi va vaqt o'tishi bilan loyihani ishlab chiqish dinamikasini kuzatish imkonini beradi.

Maqsad: Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish.

Ikkita yechim bor:

  • SonarQube-da manba kodi sifatini nazorat qilish holatini tekshirish uchun skriptni ishga tushiring. Agar SonarQube-da manba kodining sifat nazorati o'tmasa, yig'ilish muvaffaqiyatsiz tugadi.
  • Loyihaning asosiy sahifasida manba kodi sifatini nazorat qilish holatini ko'rsatish.

SonarQube o'rnatilmoqda

Sonarqube-ni rpm paketlaridan o'rnatish uchun biz ombordan foydalanamiz https://harbottle.gitlab.io/harbottle-main.

Keling, paketni CentOS 7 uchun ombor bilan o'rnatamiz.

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

Biz sonarqube-ning o'zini o'rnatamiz.

yum install -y sonarqube

O'rnatish vaqtida ko'pchilik plaginlar o'rnatiladi, ammo findbugs va pmd-ni o'rnatishingiz kerak

yum install -y sonarqube-findbugs sonarqube-pmd

Xizmatni ishga tushiring va uni ishga tushirishga qo'shing

systemctl start sonarqube
systemctl enable sonarqube

Agar yuklash uchun uzoq vaqt kerak bo'lsa, sonar.web.javaOpts opsiyalarining oxiriga tasodifiy sonlar generatorini /dev/./urandom qo'shing.

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

SonarQube-da manba kodi sifatini nazorat qilish holatini tekshirish uchun skriptni ishga tushirish.

Afsuski, sonar-break-maven-plugin plagini uzoq vaqt davomida yangilanmagan. Shunday qilib, keling, o'z skriptimizni yozaylik.

Sinov uchun biz ombordan foydalanamiz https://github.com/uweplonus/spotbugs-examples.

Gitlabga import qilish. .gitlab-ci.yml faylini qo'shing:

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 fayli mukammal emas. Sonarqube-dagi skanerlash vazifalari “MUVAFFAQIYAT” holati bilan tugaganmi yoki yoʻqmi, tekshirildi. Hozircha boshqa statuslar bo'lmagan. Boshqa statuslar paydo bo'lishi bilan men ushbu postda .gitlab-ci.yml ni tuzataman.

Loyihaning asosiy sahifasida manba kodining sifat nazorati holatini ko'rsatish

SonarQube uchun plagin o'rnatilmoqda

yum install -y sonarqube-qualinsight-badges

Biz SonarQube-ga boramiz http://172.26.9.115:9000/
Oddiy foydalanuvchi yarating, masalan, "belgilar".
Ushbu foydalanuvchi ostida SonarQube-ga kiring.

Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

"Mening hisobim" ga o'ting, yangi token yarating, masalan, "read_all_repository" nomi bilan va "Yaratish" tugmasini bosing.

Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

Biz token paydo bo'lganini ko'ramiz. U faqat 1 marta paydo bo'ladi.

Administrator sifatida tizimga kiring.

Konfiguratsiya -> SVG nishonlari bo'limiga o'ting

Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

Ushbu tokenni "Faoliyat nishoni belgisi" maydoniga nusxalang va saqlash tugmasini bosing.

Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

Ma'muriyat -> Xavfsizlik -> Ruxsat shablonlari -> Standart shablonga (va sizda bo'ladigan boshqa shablonlarga) o'ting.

Belgilar foydalanuvchisi "Browse" katagiga belgi qo'yishi kerak.

Viktorina

Masalan, loyihani olaylik https://github.com/jitpack/maven-simple.

Keling, ushbu loyihani import qilaylik.

.gitlab-ci.yml faylini quyidagi tarkib bilan loyiha ildiziga qo'shing.

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-da loyiha quyidagicha ko'rinadi:

Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

README.md-ga sumkalar qo'shing va ular quyidagicha ko'rinadi:

Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

Nishonlarni ko'rsatish kodi quyidagicha ko'rinadi:

Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

Nishonlarni ko'rsatish qatorini tahlil qilish:

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

Loyiha kaliti va loyiha identifikatorini qayerdan olish/tekshirish mumkin.

Loyiha kaliti pastki o'ngda. URLda loyiha identifikatori mavjud.

Ishlab chiquvchilarga SonarQube-da manba kodi sifatini nazorat qilish holatini ko'rsatish

Ko'rsatkichlarni olish variantlari bo'lishi mumkin bu erda.

Yaxshilash, xatolarni tuzatish uchun barcha tortishish so'rovlari ushbu omborga yuboring.

SonarQube haqida Telegram chati https://t.me/sonarqube_ru
DevSecOps haqida Telegram chati - xavfsiz DevOps https://t.me/sec_devops

Manba: www.habr.com

a Izoh qo'shish