Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

SonarQube är en kvalitetssäkringsplattform för öppen källkod som stöder ett brett utbud av programmeringsspråk och ger rapportering om mätvärden som kodduplicering, efterlevnad av kodningsstandarder, testtäckning, kodkomplexitet, potentiella buggar och mer. SonarQube visualiserar bekvämt analysresultat och låter dig spåra dynamiken i projektutveckling över tid.

Mål: Visa utvecklare status för kvalitetskontroll av källkod i SonarQube.

Det finns två lösningar:

  • Kör ett skript för att kontrollera källkodens kvalitetskontrollstatus i SonarQube. Om kvalitetskontrollen av källkoden i SonarQube inte går igenom, misslyckas monteringen.
  • Visa källkodens kvalitetskontrollstatus på huvudprojektsidan.

Installerar SonarQube

För att installera sonarqube från rpm-paket kommer vi att använda förvaret https://harbottle.gitlab.io/harbottle-main.

Låt oss installera paketet med arkivet för CentOS 7.

yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm

Vi installerar själva sonarqube.

yum install -y sonarqube

Under installationen kommer de flesta plugins att installeras, men du måste installera findbugs och pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Starta tjänsten och lägg till den vid start

systemctl start sonarqube
systemctl enable sonarqube

Om det tar lång tid att ladda, lägg sedan till en slumptalsgenerator /dev/./urandom i slutet av alternativen sonar.web.javaOpts

sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom

Köra ett skript för att kontrollera statusen för källkodens kvalitetskontroll i SonarQube.

Tyvärr har plugin-programmet sonar-break-maven-plugin inte uppdaterats på länge. Så låt oss skriva vårt eget manus.

För testning kommer vi att använda förvaret https://github.com/uweplonus/spotbugs-examples.

Importerar till Gitlab. Lägg till filen .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-filen är inte perfekt. Testade om skanningsuppgifter i sonarqube slutade med statusen: "SUCCESS". Hittills har det inte funnits några andra statusar. Så fort det finns andra statusar kommer jag att rätta till .gitlab-ci.yml i detta inlägg.

Visar källkodens kvalitetskontrollstatus på huvudprojektsidan

Installerar plugin för SonarQube

yum install -y sonarqube-qualinsight-badges

Vi går till SonarQube kl http://172.26.9.115:9000/
Skapa en vanlig användare, till exempel "badges".
Logga in på SonarQube under denna användare.

Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

Gå till "Mitt konto", skapa en ny token, till exempel med namnet "read_all_repository" och klicka på "Genereate".

Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

Vi ser att en token har dykt upp. Han kommer bara att dyka upp 1 gång.

Logga in som administratör.

Gå till Konfiguration -> SVG-märken

Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

Kopiera denna token till fältet "Aktivitetsmärke" och klicka på knappen Spara.

Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

Gå till Administration -> Säkerhet -> Behörighetsmallar -> Standardmall (och andra mallar som du kommer att ha).

Märkenanvändaren måste ha kryssrutan "Bläddra" markerad.

Testning.

Låt oss till exempel ta projektet https://github.com/jitpack/maven-simple.

Låt oss importera det här projektet.

Lägg till filen .gitlab-ci.yml till projektroten med följande innehåll.

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

I SonarQube kommer projektet att se ut så här:

Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

Lägg till påsar till README.md så ser de ut så här:

Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

Märkens visningskod ser ut så här:

Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

Analysera märkets visningssträng:

[![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-проекта)

Var kan man få tag på/kontrollera projektnyckel och projekt-id.

Projektnyckeln finns längst ner till höger. URL:n innehåller projekt-id.

Visar källkodens kvalitetskontrollstatus i SonarQube för utvecklare

Alternativ för att få mätvärden kan vara titta här.

Alla pull-förfrågningar om förbättringar, buggfixar skicka till detta förråd.

Telegramchatt om SonarQube https://t.me/sonarqube_ru
Telegramchatt om DevSecOps - säker DevOps https://t.me/sec_devops

Källa: will.com

Lägg en kommentar