SonarQube – бағдарламалау тілдерінің кең ауқымын қолдайтын және кодтың қайталануы, кодтау стандарттарының сәйкестігі, сынақтың қамтылуы, код күрделілігі, ықтимал қателер және т.б. сияқты көрсеткіштер бойынша есеп беруді қамтамасыз ететін ашық бастапқы кодтың сапасын қамтамасыз ету платформасы. SonarQube талдау нәтижелерін ыңғайлы түрде бейнелейді және жобаның даму динамикасын уақыт бойынша бақылауға мүмкіндік береді.
Мақсаты: әзірлеушілерге SonarQube бағдарламасындағы бастапқы код сапасын бақылау күйін көрсету.
Екі шешім бар:
- SonarQube бағдарламасында бастапқы код сапасын бақылау күйін тексеру үшін сценарийді іске қосыңыз. SonarQube бағдарламасындағы бастапқы кодтың сапасын бақылаудан өтпесе, құрастыру сәтсіз аяқталады.
- Бастапқы код сапасын бақылау күйін жобаның негізгі бетінде көрсету.
SonarQube орнатылуда
RPM бумаларынан sonarqube орнату үшін біз репозиторийді қолданамыз .
Пакетті 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Егер жүктеуге көп уақыт кетсе, sonar.web.javaOpts опцияларының соңына кездейсоқ сандар генераторын /dev/./urandom қосыңыз.
sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandomSonarQube бағдарламасында бастапқы код сапасын бақылау күйін тексеру үшін сценарийді іске қосу.
Өкінішке орай, 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 жүйесіне кіріңіз.

«Менің тіркелгім» бөліміне өтіңіз, жаңа таңбалауыш жасаңыз, мысалы, «all_repository оқу» атауымен және «Жасау» түймесін басыңыз.

Төкен пайда болғанын көреміз. Ол тек 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:
- dockerSonarQube бағдарламасында жоба келесідей болады:

README.md ішіне сөмкелерді қосыңыз және олар келесідей болады:

Бейдждерді көрсету коды келесідей болады:

Бейдждерді көрсету жолын талдау:
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-проекта)
[](http://172.26.9.115:9000/dashboard?id=com.github.jitpack%3Amaven-simple)
[](http://172.26.9.115:9000/dashboard?id=id-проекта)Жоба кілтін және жоба идентификаторын қайдан алуға/тексеруге болады.
Жоба кілті төменгі оң жақта. URL мекенжайында жоба идентификаторы бар.

Көрсеткіштерді алу опциялары болуы мүмкін .
Жақсартулар, қателерді түзету үшін барлық тарту сұраулары .
SonarQube туралы Telegram чаты
DevSecOps туралы Telegram чаты – қауіпсіз DevOps
Ақпарат көзі: www.habr.com
