SonarQube เชฎเชพเช‚ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

SonarQube เชเช• เช“เชชเชจ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เช–เชพเชคเชฐเซ€ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช›เซ‡ เชœเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเช“เชจเซ€ เชตเชฟเชถเชพเชณ เชถเซเชฐเซ‡เชฃเซ€เชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡ เช…เชจเซ‡ เช•เซ‹เชก เชกเซเชชเซเชฒเชฟเช•เซ‡เชถเชจ, เช•เซ‹เชกเชฟเช‚เช— เชงเซ‹เชฐเชฃเซ‹เชจเซเช‚ เชชเชพเชฒเชจ, เชชเชฐเซ€เช•เซเชทเชฃ เช•เชตเชฐเซ‡เชœ, เช•เซ‹เชก เชœเชŸเชฟเชฒเชคเชพ, เชธเช‚เชญเชตเชฟเชค เชญเซ‚เชฒเซ‹ เช…เชจเซ‡ เชตเชงเซ เชœเซ‡เชตเชพ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เชชเชฐ เชฐเชฟเชชเซ‹เชฐเซเชŸเชฟเช‚เช— เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. SonarQube เชธเชฐเชณเชคเชพเชฅเซ€ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ€ เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชธเชฎเชฏเชพเช‚เชคเชฐเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชตเชฟเช•เชพเชธเชจเซ€ เช—เชคเชฟเชถเซ€เชฒเชคเชพเชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เช‰เชฆเซเชฆเซ‡เชถเซเชฏ: เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ SonarQube เชฎเชพเช‚ เชธเซเชคเซเชฐเซ‹เชค เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเซ€ เชธเซเชฅเชฟเชคเชฟ เชฌเชคเชพเชตเซ‹.

เชคเซเชฏเชพเช‚ เชฌเซ‡ เช‰เช•เซ‡เชฒเซ‹ เช›เซ‡:

  • SonarQube เชฎเชพเช‚ เชธเซเชคเซเชฐเซ‹เชค เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชคเชชเชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเซ‹. เชœเซ‹ SonarQube เชฎเชพเช‚ เชธเซ‹เชฐเซเชธ เช•เซ‹เชกเชจเซเช‚ เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเชธเชพเชฐ เชฅเชคเซเช‚ เชจเชฅเซ€, เชคเซ‹ เชชเช›เซ€ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซ‡ เชจเชฟเชทเซเชซเชณ เช•เชฐเซ‹.
  • เชฎเซเช–เซเชฏ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเซƒเชทเซเช  เชชเชฐ เชธเซเชฐเซ‹เชค เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชฌเชคเชพเชตเซ‹.

SonarQube เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช†เชฐเชชเซ€เชเชฎ เชชเซ‡เช•เซ‡เชœเซ‹เชฎเชพเช‚เชฅเซ€ เชธเซ‹เชจเชพเชฐเซเช•เซเชฏเซเชฌ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ https://harbottle.gitlab.io/harbottle-main.

เชšเชพเชฒเซ‹ CentOS 7 เชฎเชพเชŸเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชธเชพเชฅเซ‡ เชชเซ‡เช•เซ‡เชœ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช.

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

เช…เชฎเซ‡ เชธเซ‹เชจเชพเชฐเซเช•เซเชฏเซเชฌ เชชเซ‹เชคเซ‡ เชœ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช เช›เซ€เช.

yum install -y sonarqube

เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชชเซเชฒเช—เช‡เชจเซเชธ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชชเชฐเช‚เชคเซ เชคเชฎเชพเชฐเซ‡ เชซเชพเช‡เชจเซเชกเชฌเช—เซเชธ เช…เชจเซ‡ เชชเซ€เชเชฎเชกเซ€ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡

yum install -y sonarqube-findbugs sonarqube-pmd

เชธเซ‡เชตเชพ เชฒเซ‹เช‚เชš เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชŸเชพเชฐเซเชŸเช…เชชเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹

systemctl start sonarqube
systemctl enable sonarqube

เชœเซ‹ เชคเซ‡ เชฒเซ‹เชก เชฅเชตเชพเชฎเชพเช‚ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เชฒเซ‡ เช›เซ‡, เชคเซ‹ sonar.web.javaOpts เชตเชฟเช•เชฒเซเชชเซ‹เชจเชพ เช…เช‚เชคเชฎเชพเช‚ เชฐเซ‡เชจเซเชกเชฎ เชจเช‚เชฌเชฐ เชœเชจเชฐเซ‡เชŸเชฐ /dev/./urandom เช‰เชฎเซ‡เชฐเซ‹.

sonar.web.javaOpts=ะดั€ัƒะณะธะต ะฟะฐั€ะฐะผะตั‚ั€ั‹ -Djava.security.egd=file:/dev/urandom

SonarQube เชฎเชพเช‚ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเซ€ เชธเซเชฅเชฟเชคเชฟ เชคเชชเชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเชตเซ€.

เช•เชฎเชจเชธเซ€เชฌเซ‡, เชธเซ‹เชจเชพเชฐ-เชฌเซเชฐเซ‡เช•-เชฎเชพเชตเซ‡เชจ-เชชเซเชฒเช—เช‡เชจ เชชเซเชฒเช—เช‡เชจ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏเชฅเซ€ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชจเชฅเซ€. เชคเซ‹ เชšเชพเชฒเซ‹ เช†เชชเชฃเซ€ เชชเซ‹เชคเชพเชจเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชฒเช–เซ€เช.

เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ 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 เชซเชพเช‡เชฒ เชธเช‚เชชเซ‚เชฐเซเชฃ เชจเชฅเซ€. เชœเซ‹ เชธเซ‹เชจเชพเชฐเซเช•เซเชฏเซเชฌเชฎเชพเช‚ เชธเซเช•เซ‡เชจเชฟเช‚เช— เช•เชพเชฐเซเชฏเซ‹ เชธเซเชฅเชฟเชคเชฟ เชธเชพเชฅเซ‡ เชธเชฎเชพเชชเซเชค เชฅเชฏเชพ เชนเซ‹เชฏ เชคเซ‹ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซเชฏเซเช‚: "เชธเชซเชณเชคเชพ". เช…เชคเซเชฏเชพเชฐ เชธเซเชงเซ€ เช…เชจเซเชฏ เช•เซ‹เชˆ เชธเซเชŸเซ‡เชŸเชธ เชจเชฅเซ€. เชœเชฒเชฆเซ€ เช…เชจเซเชฏ เชธเซเชฅเชฟเชคเชฟเช“ เชนเชถเซ‡, เชนเซเช‚ เช† เชชเซ‹เชธเซเชŸเชฎเชพเช‚ .gitlab-ci.yml เชธเซเชงเชพเชฐเซ€เชถ.

เชฎเซเช–เซเชฏ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเซƒเชทเซเช  เชชเชฐ เชธเซเชฐเซ‹เชค เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

SonarQube เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

yum install -y sonarqube-qualinsight-badges

เช…เชฎเซ‡ SonarQube เช–เชพเชคเซ‡ เชœเชˆเช เช›เซ€เช http://172.26.9.115:9000/
เชจเชฟเชฏเชฎเชฟเชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฌเชจเชพเชตเซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ "เชฌเซ‡เชœ".
เช† เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชนเซ‡เช เชณ SonarQube เชฎเชพเช‚ เชฒเซ‹เช— เช‡เชจ เช•เชฐเซ‹.

SonarQube เชฎเชพเช‚ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

"เชฎเชพเชฐเซเช‚ เชเช•เชพเช‰เชจเซเชŸ" เชชเชฐ เชœเชพเช“, เชจเชตเซเช‚ เชŸเซ‹เช•เชจ เชฌเชจเชพเชตเซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ "read_all_repository" เชจเชพเชฎ เชธเชพเชฅเซ‡ เช…เชจเซ‡ "เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‹" เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹.

SonarQube เชฎเชพเช‚ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช†เชชเชฃเซ‡ เชœเซ‹เชˆเช เช›เซ€เช เช•เซ‡ เชเช• เชŸเซ‹เช•เชจ เชฆเซ‡เช–เชพเชฏเซเช‚ เช›เซ‡. เชคเซ‡ เชฎเชพเชคเซเชฐ 1 เชตเช–เชค เชฆเซ‡เช–เชพเชถเซ‡.

เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐ เชคเชฐเซ€เช•เซ‡ เชฒเซ‹เช—เชฟเชจ เช•เชฐเซ‹.

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ -> SVG เชฌเซ‡เชœเซ‡เชธ เชชเชฐ เชœเชพเช“

SonarQube เชฎเชพเช‚ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช† เชŸเซ‹เช•เชจเชจเซ‡ "เชเช•เซเชŸเชฟเชตเชฟเชŸเซ€ เชฌเซ‡เชœ เชŸเซ‹เช•เชจ" เชซเซ€เชฒเซเชกเชฎเชพเช‚ เช•เซ‰เชชเชฟ เช•เชฐเซ‹ เช…เชจเซ‡ เชธเซ‡เชต เชฌเชŸเชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹.

SonarQube เชฎเชพเช‚ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชถเชจ -> เชธเซเชฐเช•เซเชทเชพ -> เชชเชฐเชตเชพเชจเช—เซ€ เชจเชฎเซ‚เชจเชพเช“ -> เชกเชฟเชซเซ‰เชฒเซเชŸ เชจเชฎเซ‚เชจเชพ (เช…เชจเซ‡ เช…เชจเซเชฏ เชจเชฎเซ‚เชจเชพเช“ เช•เซ‡ เชœเซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชนเชถเซ‡) เชชเชฐ เชœเชพเช“.

เชฌเซ‡เชœเซ‡เชธ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช "เชฌเซเชฐเชพเช‰เช เช•เชฐเซ‹" เชšเซ‡เช•เชฌเซ‹เช•เซเชธ เชšเซ‡เช• เช•เชฐเซ‡เชฒ เชนเซ‹เชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡.

เชชเชฐเซ€เช•เซเชทเชฃ.

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชšเชพเชฒเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฒเชˆเช 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-ะฟั€ะพะตะบั‚ะฐ)

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช•เซ€ เช…เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช†เชˆเชกเซ€ เช•เซเชฏเชพเช‚เชฅเซ€ เชฎเซ‡เชณเชตเชตเซ€/เชšเซ‡เช• เช•เชฐเชตเซ€.

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช•เซ€ เชจเซ€เชšเซ‡ เชœเชฎเชฃเซ€ เชฌเชพเชœเซเช เช›เซ‡. URL เชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ id เช›เซ‡.

SonarQube เชฎเชพเช‚ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช—เซเชฃเชตเชคเซเชคเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชธเซเชฅเชฟเชคเชฟ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เช…เชนเซ€เช‚ เชœเซเช“.

เชธเซเชงเชพเชฐเชพเช“, เชฌเช— เชซเชฟเช•เซเชธเซ‡เชธ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฎ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เช“ เช† เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชธเชฌเชฎเชฟเชŸ เช•เชฐเซ‹.

SonarQube เชตเชฟเชถเซ‡ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชšเซ‡เชŸ https://t.me/sonarqube_ru
DevSecOps เชตเชฟเชถเซ‡ เชŸเซ‡เชฒเชฟเช—เซเชฐเชพเชฎ เชšเซ‡เชŸ - เชธเซเชฐเช•เซเชทเชฟเชค DevOps https://t.me/sec_devops

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹