SonarQube ሰፊ የፕሮግራም አወጣጥ ቋንቋዎችን የሚደግፍ እና እንደ ኮድ ማባዛት፣ የኮድ ደረጃዎች ተገዢነት፣ የፈተና ሽፋን፣ የኮድ ውስብስብነት፣ ሊሆኑ የሚችሉ ስህተቶች እና ሌሎችም በመሳሰሉት መለኪያዎች ላይ ሪፖርት የሚያቀርብ የክፍት ምንጭ ኮድ ጥራት ማረጋገጫ መድረክ ነው። SonarQube የትንታኔ ውጤቶችን በአመቺነት ያሳያል እና የፕሮጀክት ልማትን ተለዋዋጭነት በጊዜ ሂደት እንዲከታተሉ ያስችልዎታል።
ዓላማ፡- በSonarQube ውስጥ ያለውን የምንጭ ኮድ ጥራት ቁጥጥር ሁኔታ ለገንቢዎች አሳይ።
ሁለት መፍትሄዎች አሉ.
- በSonarQube ውስጥ የምንጭ ኮድ ጥራት ቁጥጥር ሁኔታን ለመፈተሽ ስክሪፕት ያሂዱ። በ SonarQube ውስጥ ያለው የምንጭ ኮድ የጥራት ቁጥጥር ካላለፈ ስብሰባው አይሳካም።
- በዋናው የፕሮጀክት ገጽ ላይ የምንጭ ኮድ ጥራት ቁጥጥር ሁኔታን አሳይ።
SonarQubeን በመጫን ላይ
sonarqube ከ rpm ጥቅሎች ለመጫን, ማከማቻውን እንጠቀማለን
ጥቅሉን ከ 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 ፕለጊን ለረጅም ጊዜ አልዘመነም። ስለዚህ የራሳችንን ስክሪፕት እንፃፍ።
ለሙከራ ማጠራቀሚያውን እንጠቀማለን
ወደ 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 የምንሄደው በ
መደበኛ ተጠቃሚ ይፍጠሩ፣ ለምሳሌ "ባጆች"።
በዚህ ተጠቃሚ ስር ወደ SonarQube ይግቡ።
ወደ "የእኔ መለያ" ይሂዱ፣ አዲስ ማስመሰያ ይፍጠሩ፣ ለምሳሌ "ሁሉንም_ማከማቻ" በሚለው ስም እና "አፍጠር" ን ጠቅ ያድርጉ።
ቶከን እንደታየ እናያለን። እሱ 1 ጊዜ ብቻ ይታያል.
እንደ አስተዳዳሪ ይግቡ።
ወደ ውቅረት -> SVG ባጆች ይሂዱ
ይህንን ማስመሰያ ወደ "የእንቅስቃሴ ባጅ ማስመሰያ" መስክ ይቅዱ እና አስቀምጥ ቁልፍን ጠቅ ያድርጉ።
ወደ አስተዳደር -> ደህንነት -> የፈቃድ አብነቶች -> ነባሪ አብነት (እና ሌሎች የሚኖርዎት አብነቶች) ይሂዱ።
ባጆች ተጠቃሚው የ"አስስ" አመልካች ሳጥኑ መፈተሽ አለበት።
ሙከራ.
ለምሳሌ ፕሮጀክቱን እንውሰድ
ይህን ፕሮጀክት እናስመጣ።
የ.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 ፕሮጀክቱ ይህን ይመስላል፡-
ቦርሳዎችን ወደ README.md ያክሉ እና እነሱ እንደዚህ ይመስላሉ።
የባጅ ማሳያ ኮድ ይህን ይመስላል።
የባጆች ማሳያ ሕብረቁምፊን መተንተን፡-
[![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 የቴሌግራም ውይይት
የቴሌግራም ውይይት ስለ DevSecOps - ደህንነቱ የተጠበቀ DevOps
ምንጭ: hab.com