Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

SonarQube ndi nsanja yotseguka yotsimikizira zamtundu wa ma code yomwe imathandizira zilankhulo zingapo zamapulogalamu ndipo imapereka malipoti azinthu monga kubwereza ma code, kutsata miyezo ya ma code, kuphimba mayeso, zovuta zama code, nsikidzi, ndi zina zambiri. SonarQube ikuwona bwino zotsatira zowunikira ndikukulolani kuti muzitha kuyang'anira momwe polojekiti ikuyendera pakapita nthawi.

Cholinga: Onetsani Madivelopa momwe mungawongolere ma code code ku SonarQube.

Pali njira ziwiri:

  • Thamangani script kuti muwone momwe ma gwero amawongolera khalidwe labwino ku SonarQube. Ngati kuwongolera kwamakasitomala ku SonarQube sikudutsa, ndiye kuti kulephera kusonkhana.
  • Onetsani zomwe zili patsamba lalikulu la polojekiti.

Kukhazikitsa SonarQube

Kuyika sonarqube kuchokera pamaphukusi a rpm, tidzagwiritsa ntchito posungira https://harbottle.gitlab.io/harbottle-main.

Tiyeni tiyike phukusilo ndi chosungira cha CentOS 7.

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

Timayika sonarqube yokha.

yum install -y sonarqube

Pakukhazikitsa, mapulagini ambiri adzayikidwa, koma muyenera kukhazikitsa findbugs ndi pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Yambitsani ntchito ndikuyiwonjezera poyambira

systemctl start sonarqube
systemctl enable sonarqube

Ngati zitenga nthawi yayitali kuti mutsegule, yonjezerani nambala yachisawawa /dev/./urandom kumapeto kwa zosankha sonar.web.javaOpts

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

Kuyendetsa script kuti muwone momwe ma code code alili mu SonarQube.

Tsoka ilo, pulogalamu yowonjezera ya sonar-break-maven-plugin sinasinthidwe kwa nthawi yayitali. Ndiye tiyeni tilembe script yathu.

Poyesa tidzagwiritsa ntchito posungira https://github.com/uweplonus/spotbugs-examples.

Kulowetsa mu Gitlab. Onjezani fayilo ya .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

Fayilo ya .gitlab-ci.yml ndiyabwino. Kuyesedwa ngati kupanga sikani ntchito mu sonarqube kunatha ndi udindo: "BWINO". Pakadali pano palibe ma status ena. Pakangopezeka ma status ena, ndikonza .gitlab-ci.yml mu positi iyi.

Kuwonetsa gwero la kasamalidwe kabwino katsamba patsamba lalikulu la polojekiti

Kuyika pulogalamu yowonjezera ya SonarQube

yum install -y sonarqube-qualinsight-badges

Timapita ku SonarQube ku http://172.26.9.115:9000/
Pangani wogwiritsa ntchito nthawi zonse, mwachitsanzo "mabaji".
Lowani ku SonarQube pansi pa wosuta uyu.

Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

Pitani ku "Akaunti yanga", pangani chizindikiro chatsopano, mwachitsanzo ndi dzina lakuti "read_all_repository" ndikudina "Pangani".

Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

Ife tikuwona kuti chizindikiro chawonekera. Adzawonekera nthawi imodzi yokha.

Lowani ngati woyang'anira.

Pitani ku Configuration -> SVG Badges

Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

Koperani chizindikirochi mugawo la "Activity badge token" ndikudina batani losunga.

Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

Pitani ku Administration -> Security -> Permission Templates -> Default template (ndi ma templates ena omwe mudzakhala nawo).

Wogwiritsa mabaji akuyenera kukhala ndi bokosi la "Sakatulani".

Kuyesa.

Mwachitsanzo, tiyeni titenge polojekitiyi https://github.com/jitpack/maven-simple.

Tiyeni titenge pulojekitiyi.

Onjezani fayilo ya .gitlab-ci.yml ku mizu ya polojekiti ndi izi.

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

Ku SonarQube polojekitiyi idzawoneka motere:

Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

Onjezani zikwama ku README.md ndipo ziziwoneka motere:

Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

Mawonekedwe a baji amawoneka motere:

Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

Kupanga mawonekedwe a mawonekedwe:

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

Komwe mungapeze / onani Kiyi ya Project ndi ID ya projekiti.

Project Key ili pansi kumanja. URL ili ndi id ya polojekiti.

Kuwonetsa mawonekedwe owongolera ma code source ku SonarQube kwa opanga

Zosankha zopezera ma metric zitha kukhala taonani apa.

Zopempha zonse zokoka kuti ziwonjezeke, kukonza zolakwika perekani kunkhokwe iyi.

Telegraph kucheza za SonarQube https://t.me/sonarqube_ru
Telegraph kucheza za DevSecOps - otetezedwa DevOps https://t.me/sec_devops

Source: www.habr.com

Kuwonjezera ndemanga