Το 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 έληξαν με την κατάσταση: "SUCCESS". Μέχρι στιγμής δεν έχουν υπάρξει άλλες καταστάσεις. Μόλις υπάρξουν άλλες καταστάσεις, θα διορθώσω το .gitlab-ci.yml σε αυτήν την ανάρτηση.
Εμφάνιση της κατάστασης ποιοτικού ελέγχου του πηγαίου κώδικα στην κύρια σελίδα του έργου
Εγκατάσταση της προσθήκης για το SonarQube
yum install -y sonarqube-qualinsight-badges
Πηγαίνουμε στο SonarQube στο
Δημιουργήστε έναν κανονικό χρήστη, για παράδειγμα "κονκάρδες".
Συνδεθείτε στο SonarQube με αυτόν τον χρήστη.
Μεταβείτε στο "Ο λογαριασμός μου", δημιουργήστε ένα νέο διακριτικό, για παράδειγμα με το όνομα "read_all_repository" και κάντε κλικ στο "Δημιουργία".
Βλέπουμε ότι έχει εμφανιστεί ένα διακριτικό. Θα εμφανιστεί μόνο 1 φορά.
Συνδεθείτε ως διαχειριστής.
Μεταβείτε στο Configuration -> SVG Badges
Αντιγράψτε αυτό το διακριτικό στο πεδίο "Διακριτικό σήματος δραστηριότητας" και κάντε κλικ στο κουμπί αποθήκευσης.
Μεταβείτε στη Διαχείριση -> Ασφάλεια -> Πρότυπα αδειών -> Προεπιλεγμένο πρότυπο (και άλλα πρότυπα που θα έχετε).
Ο χρήστης των σημάτων πρέπει να έχει επιλεγμένο το πλαίσιο ελέγχου "Αναζήτηση".
Δοκιμές.
Για παράδειγμα, ας πάρουμε το έργο
Ας εισάγουμε αυτό το έργο.
Προσθέστε το αρχείο .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-проекта)
Πού να λάβετε/ελέγξετε το Κλειδί έργου και το αναγνωριστικό έργου.
Το Project Key βρίσκεται κάτω δεξιά. Η διεύθυνση URL περιέχει το αναγνωριστικό του έργου.
Οι επιλογές για τη λήψη μετρήσεων μπορεί να είναι
Όλα τα αιτήματα έλξης για βελτιώσεις, διορθώσεις σφαλμάτων
Συνομιλία μέσω Telegram για το SonarQube
Συνομιλία Telegram για DevSecOps - ασφαλή DevOps
Πηγή: www.habr.com