SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

SonarQube သည် ပရိုဂရမ်သမင်သဘာသာစကာသမျာသစလာကို ပံ့ပိုသပေသသည့် open source code အရည်အသလေသအာမခံပလပ်ဖောင်သတစ်ခုဖဌစ်ပဌီသ ကုဒ်ပလာသခဌင်သ၊ ကုဒ်စံချိန်စံညလဟန်သမျာသလိုက်နာမဟု၊ စမ်သသပ်မဟုလလဟမ်သခဌုံမဟု၊ ကုဒ်ရဟုပ်ထလေသမဟု၊ ဖဌစ်နိုင်ခဌေရဟိသော အမဟာသအယလင်သမျာသနဟင့် အခဌာသအရာမျာသကဲ့သို့သော မက်ထရစ်မျာသကို ပေသဆောင်သည်။ SonarQube သည် ခလဲခဌမ်သစိတ်ဖဌာမဟုရလဒ်မျာသကို အဆင်ပဌေစလာမဌင်ယောင်စေပဌီသ အချိန်နဟင့်အမျဟ ပရောဂျက်ဖလံ့ဖဌိုသတိုသတက်မဟုဆိုင်ရာ လဟုပ်ရဟာသမဟုမျာသကို ခဌေရာခံနိုင်စေပါသည်။

လုပ်ဆောင်စရာ- SonarQube ရဟိ ၎င်သတို့၏အရင်သအမဌစ်ကုဒ်၏ အရည်အသလေသထိန်သချုပ်မဟုအခဌေအနေကို ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသအာသ ပဌသပါ။

ဖဌေရဟင်သချက် နဟစ်ခုရဟိသည်။

  • SonarQube တလင် အရင်သအမဌစ်ကုဒ် အရည်အသလေသ အာမခံချက် အခဌေအနေကို စစ်ဆေသရန် script တစ်ခုကို ဖလင့်ပါ။ SonarQube ၏ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ အာမခံချက် မအောင်မဌင်ပါက တည်ဆောက်မဟု မအောင်မဌင်ပါ။
  • ပရောဂျက်၏ ပင်မစာမျက်နဟာတလင် အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ပဌပါ။

SonarQube ကို ထည့်သလင်သခဌင်သ။

rpm ပက်ကေ့ဂျ်မျာသမဟ sonarqube ကိုထည့်သလင်သရန်၊ ကျလန်ုပ်တို့သည် repository ကိုအသုံသပဌုပါမည်။ https://harbottle.gitlab.io/harbottle-main.

CentOS 7 အတလက် repository package ကို ထည့်သလင်သလိုက်ရအောင်။

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 တလင် အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေ စစ်ဆေသခဌင်သ script ကို လုပ်ဆောင်ခဌင်သ။

ကံမကောင်သစလာဖဌင့်၊ sonar-break-maven-plugin ပလပ်အင်ကို အချိန်အကဌာကဌီသ အပ်ဒိတ်မလုပ်ရသေသပါ။ ဒီတော့ ငါတို့ကိုယ်တိုင် ဇာတ်ညလဟန်သရေသကဌရအောင်။

စမ်သသပ်ရန်အတလက် repository ကိုအသုံသပဌုပါမည်။ https://github.com/uweplonus/spotbugs-examples.

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 ကိုသလာသပါ။ http://172.26.9.115:9000/
ပုံမဟန်အသုံသပဌုသူတစ်ညသ ဖန်တီသပါ၊ ဥပမာ "တံဆိပ်မျာသ"။
ကအသုံသပဌုသူအမည်ကို အသုံသပဌု၍ SonarQube သို့ ဝင်ရောက်ပါ။

SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

"ကျလန်ုပ်၏အကောင့်" သို့သလာသပါ၊ ဥပမာ၊ "read_all_repository" ဟုခေါ်သော တိုကင်အသစ်တစ်ခုဖန်တီသပဌီသ "ထုတ်လုပ်ရန်" ကိုနဟိပ်ပါ။

SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

တိုကင်တစ်ခု ပေါ်လာသည်ကို ကျလန်ုပ်တို့မဌင်ရသည်။ တစ်ကဌိမ်သာပေါ်လာလိမ့်မည်။

စီမံခန့်ခလဲသူအဖဌစ် ဝင်ရောက်ပါ။

Configuration -> SVG Badges သို့သလာသပါ။

SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

ကတိုကင်ကို "လုပ်ဆောင်ချက်တံဆိပ် တိုကင်" အကလက်ထဲသို့ ကူသယူပဌီသ သိမ်သဆည်သရန် ခလုတ်ကို နဟိပ်ပါ။

SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

Administration -> Security -> Permission Templates -> Default template (နဟင့် သင့်တလင်ရဟိနိုင်သော အခဌာသ templates) သို့ သလာသပါ။

တံဆိပ်မျာသအသုံသပဌုသူသည် "Browse" အမဟန်ခဌစ်ခဌစ်ရဟိရပါမည်။

စမ်သသပ်ခဌင်သ။

ပရောဂျက်ကို နမူနာအနေနဲ့ ကဌည့်ရအောင် https://github.com/jitpack/maven-simple.

ဒီပရောဂျက်ကို တင်သလင်သကဌပါစို့။

အောက်ပါအကဌောင်သအရာမျာသဖဌင့် ပရောဂျက်အမဌစ်သို့ .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 တလင်ပရောဂျက်သည်ကကဲ့သို့ဖဌစ်လိမ့်မည်။

SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

ပက်ကေ့ဂျ်မျာသကို README.md တလင် ပေါင်သထည့်ပါက ၎င်သတို့သည် ကကဲ့သို့ ဖဌစ်နေလိမ့်မည်-

SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

တံဆိပ်မျာသပဌသရန် ကုဒ်သည် ကကဲ့သို့ ဖဌစ်သည်-

SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

တံဆိပ်မျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သဖဌင့် ပဌသသည့် စာကဌောင်သ-

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

ပရောဂျက်ကီသနဟင့် ပရောဂျက် ID ကို ဘယ်မဟာရနိုင်/စစ်ဆေသပါ။

Project Key သည် ညာဘက်အောက်ခဌေတလင် တည်ရဟိသည်။ URL တလင် ပရောဂျက် ID ပါရဟိသည်။

SonarQube ရဟိ အရင်သအမဌစ်ကုဒ် အရည်အသလေသ ထိန်သချုပ်မဟု အခဌေအနေကို ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ပဌသခဌင်သ။

မက်ထရစ်မျာသရယူရန် ရလေသချယ်စရာမျာသ ရဟိနိုင်ပါသည်။ ဒီမဟာကဌည့်ပါ။.

တိုသတက်မဟုမျာသနဟင့် ချလတ်ယလင်သချက်ပဌင်ဆင်ခဌင်သအတလက် တောင်သဆိုချက်အာသလုံသကို ဆလဲထုတ်ပါ။ ကသိုလဟောင်ခန်သသို့ ပေသပို့ပါ။.

SonarQube အကဌောင်သ Telegram chat https://t.me/sonarqube_ru
DevSecOps အကဌောင်သ တယ်လီဂရမ် စကာသပဌောသည် — လုံခဌုံသော DevOps https://t.me/sec_devops

source: www.habr.com

မဟတ်ချက် Add