เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube เปƒเบซเป‰เบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ

SonarQube เป€เบ›เบฑเบ™เปเบžเบฅเบฐเบ•เบฐเบŸเบญเบกเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฅเบฐเบ”เบฑเบšเบ„เบงเบฒเบกเบเป‰เบงเบฒเบ‡เบ‚เบญเบ‡เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปเบฅเบฐเบฅเบฒเบเบ‡เบฒเบ™เบเปˆเบฝเบงเบเบฑเบš metrics เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบŠเปเป‰เบฒเบŠเป‰เบญเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”, เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”, เปเบกเบ‡เป„เบกเป‰เบ—เบตเปˆเบญเบฒเบ”เบกเบต, เปเบฅเบฐเบญเบทเปˆเบ™เป†. SonarQube เบชเบฐโ€‹เบ”เบงเบโ€‹เบชเบฐโ€‹เบšเบฒเบโ€‹เบžเบฒเบšโ€‹เบœเบปเบ™โ€‹เบเบฒเบ™โ€‹เบงเบดโ€‹เป€เบ„เบฒเบฐโ€‹เปเบฅเบฐโ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบ™เบฐโ€‹เป‚เบโ€‹เบšเบฒเบโ€‹เบ”เป‰เบฒเบ™โ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปƒเบ™โ€‹เป„เบฅโ€‹เบเบฐโ€‹.

เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡: เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบซเบฑเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube.

เบกเบตโ€‹เบชเบญเบ‡โ€‹เบงเบดโ€‹เบ—เบตโ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เปเบกเปˆเบ™โ€‹:

  • เปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบšเป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube. เบ–เป‰เบฒเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube เบšเปเปˆเบœเปˆเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบเบฒเบ™เบฅเบปเป‰เบกเป€เบซเบฅเบง.
  • เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™เบซเบ™เป‰เบฒเป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเป‰เบ™เบ•เป.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ SonarQube

เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡ sonarqube เบˆเบฒเบเบŠเบธเบ” rpm, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ repository https://harbottle.gitlab.io/harbottle-main.

เปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบธเบ”เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบš CentOS 7.

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

เบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡ sonarqube เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡.

yum install -y sonarqube

เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡, plugins เบชเปˆเบงเบ™เปƒเบซเบเปˆเบˆเบฐเบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡, เปเบ•เปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡ 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.

เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, plugin 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 เป„เบ”เป‰โ€‹เบชเบดเป‰เบ™โ€‹เบชเบธเบ”โ€‹เบฅเบปเบ‡โ€‹เบ”เป‰เบงเบโ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบžเบฒเบšโ€‹: "เบ„เบงเบฒเบกโ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹"โ€‹. เบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธ, เบšเปเปˆเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบญเบทเปˆเบ™. เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบญเบทเปˆเบ™เป†, เบ‚เป‰เบญเบเบˆเบฐเปเบเป‰เป„เบ‚ .gitlab-ci.yml เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ™เบตเป‰.

เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™เบซเบ™เป‰เบฒเป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเป‰เบ™เบ•เป

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ plugin เบชเปเบฒเบฅเบฑเบš SonarQube

yum install -y sonarqube-qualinsight-badges

เบžเบงเบเป€เบฎเบปเบฒเป„เบ› SonarQube เบขเบนเปˆ http://172.26.9.115:9000/
เบชเป‰เบฒเบ‡เบœเบนเป‰เปƒเบŠเป‰เบ›เบปเบเบเบฐเบ•เบด, เบ•เบปเบงเบขเปˆเบฒเบ‡ "เบ›เป‰เบฒเบ".
เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš SonarQube เบžเบฒเบเปƒเบ•เป‰เบœเบนเป‰เปƒเบŠเป‰เบ™เบตเป‰.

เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube เปƒเบซเป‰เบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ

เป„เบ›เบ—เบตเปˆ "เบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบ‚เป‰เบญเบ", เบชเป‰เบฒเบ‡ token เปƒเปเปˆ, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™ "read_all_repository" เปเบฅเบฐเบเบปเบ” "เบชเป‰เบฒเบ‡".

เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube เปƒเบซเป‰เบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ

เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒ token เป„เบ”เป‰เบ›เบฐเบเบปเบ”เบ‚เบถเป‰เบ™. เบฅเบฒเบงเบˆเบฐเบ›เบฒเบเบปเบ”เบžเบฝเบ‡เปเบ•เปˆ 1 เป€เบ—เบทเปˆเบญ.

เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเป€เบ›เบฑเบ™เบœเบนเป‰เบšเปเบฅเบดเบซเบฒเบ™.

เป„เบ›เบ—เบตเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ -> SVG Badges

เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube เปƒเบซเป‰เบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ

เบชเบณเป€เบ™เบปเบฒเป‚เบ—เป€เบ„เบฑเบ™เบ™เบตเป‰เปƒเบชเปˆเปƒเบ™เบŠเปˆเบญเบ‡ "เป‚เบ—เป€เบ„เบฑเบ™เบ›เป‰เบฒเบเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง" เปเบฅเป‰เบงเบ„เบฅเบดเบเบ—เบตเปˆเบ›เบธเปˆเบกเบšเบฑเบ™เบ—เบถเบ.

เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube เปƒเบซเป‰เบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ

เป„เบ›เบ—เบตเปˆ Administration -> Security -> Permission Templates -> Default template (เปเบฅเบฐเปเบกเปˆเปเบšเบšเบญเบทเปˆเบ™เป†เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบกเบต).

เบœเบนเป‰เปƒเบŠเป‰ badges เบ•เป‰เบญเบ‡เบกเบต checkbox "Browse" checkbox.

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบญเบปเบฒเป‚เบ„เบ‡เบเบฒเบ™ 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 เป‚เบ„เบ‡เบเบฒเบ™.

เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบ‚เบงเบฒเบฅเบธเปˆเบก. URL เบ›เบฐเบเบญเบšเบกเบต ID เป‚เบ„เบ‡เบเบฒเบ™.

เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ„เบธเบ™เบฐเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ SonarQube เปƒเบซเป‰เบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš metrics เบชเบฒเบกเบฒเบ” เป€เบšเบดเปˆเบ‡เบ—เบตเปˆเบ™เบตเป‰.

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡, เปเบเป‰เป„เบ‚ bug เบชเบปเปˆเบ‡เบเบฑเบš repository เบ™เบตเป‰.

Telegram เบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบš SonarQube https://t.me/sonarqube_ru
Telegram เบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบš DevSecOps - DevOps เบ›เบญเบ”เป„เบž https://t.me/sec_devops

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™