በ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 ውስጥ የምንጭ ኮድ ጥራት ቁጥጥር ሁኔታን ለገንቢዎች በማሳየት ላይ

ወደ "የእኔ መለያ" ይሂዱ፣ አዲስ ማስመሰያ ይፍጠሩ፣ ለምሳሌ "ሁሉንም_ማከማቻ" በሚለው ስም እና "አፍጠር" ን ጠቅ ያድርጉ።

በSonarQube ውስጥ የምንጭ ኮድ ጥራት ቁጥጥር ሁኔታን ለገንቢዎች በማሳየት ላይ

ቶከን እንደታየ እናያለን። እሱ 1 ጊዜ ብቻ ይታያል.

እንደ አስተዳዳሪ ይግቡ።

ወደ ውቅረት -> 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-проекта)

የፕሮጀክት ቁልፍ እና የፕሮጀክት መታወቂያ ከየት ማግኘት/መፈተሽ።

የፕሮጀክት ቁልፍ ከታች በቀኝ በኩል ነው። ዩአርኤሉ የፕሮጀክት መታወቂያውን ይዟል።

በSonarQube ውስጥ የምንጭ ኮድ ጥራት ቁጥጥር ሁኔታን ለገንቢዎች በማሳየት ላይ

መለኪያዎችን ለማግኘት አማራጮች ሊሆኑ ይችላሉ እዚህ ይመልከቱ.

ሁሉም የማሻሻያ ጥያቄዎች፣ የሳንካ ጥገናዎች ይጎትቱ ለዚህ ማከማቻ አስረክብ.

ስለ SonarQube የቴሌግራም ውይይት https://t.me/sonarqube_ru
የቴሌግራም ውይይት ስለ DevSecOps - ደህንነቱ የተጠበቀ DevOps https://t.me/sec_devops

ምንጭ: hab.com

አስተያየት ያክሉ