عرض حالة مراقبة جودة التعليمات البرمجية المصدر في 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 بالحالة: "SUCCESS". حتى الآن لم تكن هناك حالات أخرى. بمجرد وجود حالات أخرى، سأقوم بتصحيح .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-проекта)

مكان الحصول على/التحقق من مفتاح المشروع ومعرف المشروع.

مفتاح المشروع موجود في أسفل اليمين. يحتوي عنوان URL على معرف المشروع.

عرض حالة مراقبة جودة التعليمات البرمجية المصدر في SonarQube للمطورين

يمكن أن تكون خيارات الحصول على المقاييس انظر هنا.

جميع طلبات السحب للتحسينات وإصلاحات الأخطاء يقدم إلى هذا المستودع.

دردشة برقية حول SonarQube https://t.me/sonarqube_ru
دردشة Telegram حول DevSecOps - DevOps الآمنة https://t.me/sec_devops

المصدر: www.habr.com

إضافة تعليق