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Эгер жүктөө көп убакытты талап кылса, анда тандоолордун аягына /dev/./urandom кокустук сан генераторун кошуңуз sonar.web.javaOpts
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'ге кириңиз.

"Менин каттоо эсебим" бөлүмүнө өтүп, жаңы энбелги түзүңүз, мисалы "read_all_repository" аталышы менен жана "Түзүү" баскычын басыңыз.

Токен пайда болгонун көрүп жатабыз. Ал 1 жолу гана пайда болот.
Администратор катары кириңиз.
Конфигурация -> SVG Белгилерине өтүңүз

Бул белгини "Аракет төш белгиси" талаасына көчүрүп, сактоо баскычын басыңыз.

Администрация -> Коопсуздук -> Уруксат калыптары -> Демейки шаблонго өтүңүз (жана сизде боло турган башка шаблондор).
Белгилерди колдонуучу "Каралоо" кутучасын белгилеши керек.
Testing.
Мисалы, долбоорду алалы .
Бул долбоорду импорттойлу.
.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
Source: www.habr.com
