Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Ang SonarQube ay isang open source code quality assurance platform na sumusuporta sa malawak na hanay ng mga programming language at nagbibigay ng pag-uulat sa mga sukatan gaya ng pagdoble ng code, pagsunod sa mga pamantayan ng coding, saklaw ng pagsubok, pagiging kumplikado ng code, mga potensyal na bug, at higit pa. Maginhawang nakikita ng SonarQube ang mga resulta ng pagsusuri at nagbibigay-daan sa iyong subaybayan ang dinamika ng pagbuo ng proyekto sa paglipas ng panahon.

Layunin: Ipakita sa mga developer ang katayuan ng kontrol sa kalidad ng source code sa SonarQube.

Mayroong dalawang solusyon:

  • Magpatakbo ng script upang suriin ang katayuan ng kontrol sa kalidad ng source code sa SonarQube. Kung ang kontrol sa kalidad ng source code sa SonarQube ay hindi pumasa, pagkatapos ay mabigo ang pagpupulong.
  • Ipakita ang katayuan ng kontrol sa kalidad ng source code sa pangunahing pahina ng proyekto.

Pag-install ng SonarQube

Upang mag-install ng sonarqube mula sa mga rpm package, gagamitin namin ang repositoryo https://harbottle.gitlab.io/harbottle-main.

I-install natin ang package na may repository para sa CentOS 7.

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

Nag-install kami ng sonarqube mismo.

yum install -y sonarqube

Sa panahon ng pag-install, karamihan sa mga plugin ay mai-install, ngunit kailangan mong mag-install ng findbugs at pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Ilunsad ang serbisyo at idagdag ito sa startup

systemctl start sonarqube
systemctl enable sonarqube

Kung matagal mag-load, magdagdag ng random number generator /dev/./urandom sa dulo ng mga opsyon sonar.web.javaOpts

sonar.web.javaOpts=Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -Djava.security.egd=file:/dev/urandom

Pagpapatakbo ng isang script upang suriin ang katayuan ng kontrol sa kalidad ng source code sa SonarQube.

Sa kasamaang palad, ang sonar-break-maven-plugin plugin ay hindi na-update nang mahabang panahon. Kaya't magsulat tayo ng sarili nating script.

Para sa pagsubok, gagamitin namin ang repositoryo https://github.com/uweplonus/spotbugs-examples.

Ini-import sa Gitlab. Idagdag ang .gitlab-ci.yml file:

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

Ang .gitlab-ci.yml file ay hindi perpekto. Sinubukan kung ang mga gawain sa pag-scan sa sonarqube ay natapos na may katayuang: "TAGUMPAY". Sa ngayon ay wala pang ibang status. Sa sandaling may iba pang mga status, itatama ko ang .gitlab-ci.yml sa post na ito.

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa pangunahing pahina ng proyekto

Pag-install ng plugin para sa SonarQube

yum install -y sonarqube-qualinsight-badges

Pumunta kami sa SonarQube sa http://172.26.9.115:9000/
Gumawa ng isang regular na user, halimbawa "mga badge".
Mag-log in sa SonarQube sa ilalim ng user na ito.

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Pumunta sa β€œAking account”, lumikha ng bagong token, halimbawa na may pangalang β€œread_all_repository” at i-click ang β€œGenereate”.

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Nakita namin na may lumitaw na token. 1 time lang siya lalabas.

Mag-login bilang administrator.

Pumunta sa Configuration -> SVG Badges

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Kopyahin ang token na ito sa field na "Token ng badge ng aktibidad" at i-click ang button na i-save.

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Pumunta sa Administrasyon -> Seguridad -> Mga Template ng Pahintulot -> Default na template (at iba pang mga template na mayroon ka).

Ang mga badge na gumagamit ay dapat na may check na "Browse" na checkbox.

Pagsubok.

Halimbawa, kunin natin ang proyekto https://github.com/jitpack/maven-simple.

I-import natin ang proyektong ito.

Idagdag ang .gitlab-ci.yml file sa root ng proyekto na may sumusunod na nilalaman.

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

Sa SonarQube ang proyekto ay magiging ganito:

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Magdagdag ng mga bag sa README.md at magiging ganito ang mga ito:

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Ang mga badge display code ay ganito ang hitsura:

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Pag-parse ng mga badge ng display string:

[![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-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°)

Saan kukuha/suriin ang Project Key at project id.

Ang Project Key ay nasa kanang ibaba. Ang URL ay naglalaman ng project id.

Pagpapakita ng katayuan ng kontrol sa kalidad ng source code sa SonarQube sa mga developer

Ang mga opsyon para sa pagkuha ng mga sukatan ay maaaring tingnan mo rito.

Lahat ng pull request para sa mga pagpapabuti, pag-aayos ng bug isumite sa repositoryong ito.

Telegram chat tungkol sa SonarQube https://t.me/sonarqube_ru
Telegram chat tungkol sa DevSecOps - secure na DevOps https://t.me/sec_devops

Pinagmulan: www.habr.com

Magdagdag ng komento