نمایش وضعیت کنترل کیفیت کد منبع در 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" ایجاد کنید و روی "Genereate" کلیک کنید.

نمایش وضعیت کنترل کیفیت کد منبع در SonarQube برای توسعه دهندگان

می بینیم که یک نشانه ظاهر شده است. او فقط 1 بار ظاهر می شود.

به عنوان مدیر وارد شوید.

به Configuration -> SVG Badges بروید

نمایش وضعیت کنترل کیفیت کد منبع در SonarQube برای توسعه دهندگان

این نشانه را در قسمت «نشانه نشان فعالیت» کپی کنید و روی دکمه ذخیره کلیک کنید.

نمایش وضعیت کنترل کیفیت کد منبع در SonarQube برای توسعه دهندگان

به Administration -> Security -> Permission Templates -> Default Template (و سایر الگوهایی که خواهید داشت) بروید.

کاربر نشان ها باید چک باکس "مرور" را علامت زده باشد.

آزمایش

مثلاً پروژه را در نظر بگیریم 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-проекта)

از کجا می توان کلید پروژه و شناسه پروژه را دریافت/بررسی کرد.

Project Key در پایین سمت راست قرار دارد. URL حاوی شناسه پروژه است.

نمایش وضعیت کنترل کیفیت کد منبع در SonarQube برای توسعه دهندگان

گزینه هایی برای به دست آوردن معیارها می تواند باشد اینجا نگاه کن.

همه درخواست های کششی برای بهبود، رفع اشکال به این مخزن ارسال کنید.

چت تلگرام در مورد SonarQube https://t.me/sonarqube_ru
چت تلگرام در مورد DevSecOps - DevOps امن https://t.me/sec_devops

منبع: www.habr.com

اضافه کردن نظر