SonarQube เจตเจฟเฉฑเจš เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจธเจฅเจฟเจคเฉ€ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจจเจพ

SonarQube เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจญเจฐเฉ‹เจธเจพ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจนเฉˆ เจœเฉ‹ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจตเจฟเจธเจผเจพเจฒ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ•เฉ‹เจก เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ, เจ•เฉ‹เจกเจฟเฉฐเจ— เจฎเจฟเจ†เจฐเจพเจ‚ เจฆเฉ€ เจชเจพเจฒเจฃเจพ, เจŸเฉˆเจธเจŸ เจ•เจตเจฐเฉ‡เจœ, เจ•เฉ‹เจก เจฆเฉ€ เจ—เฉเฉฐเจเจฒเจคเจพ, เจธเฉฐเจญเจพเจตเฉ€ เจฌเฉฑเจ— เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฌเจนเฉเจค เจ•เฉเจ 'เจคเฉ‡ เจฐเจฟเจชเฉ‹เจฐเจŸเจฟเฉฐเจ— เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค SonarQube เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ‡ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเฉ€ เจ•เจฒเจชเจจเจพ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเจ•เจพเจธ เจฆเฉ€ เจ—เจคเฉ€เจธเจผเฉ€เจฒเจคเจพ เจจเฉ‚เฉฐ เจŸเจฐเฉˆเจ• เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจ‰เจฆเฉ‡เจธเจผ: เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉ‹เจจเจพเจฐเจ•เจฟเจŠเจฌ เจตเจฟเฉฑเจš เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเจฟเจ–เจพเจ“เฅค

เจฆเฉ‹ เจนเฉฑเจฒ เจนเจจ:

  • SonarQube เจตเจฟเฉฑเจš เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจธเจฅเจฟเจคเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจšเจฒเจพเจ“เฅค เจœเฉ‡เจ•เจฐ SonarQube เจตเจฟเฉฑเจš เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจฆเจพ เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจชเจพเจธ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจจเฉ‚เฉฐ เจ…เจธเจซเจฒ เจ•เจฐเฉ‹เฅค
  • เจฎเฉเฉฑเจ– เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจชเฉฐเจจเฉ‡ 'เจคเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจธเจฅเจฟเจคเฉ€ เจฆเจฟเจ–เจพเจ“เฅค

SonarQube เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

rpm เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจคเฉ‹เจ‚ 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

เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ, เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจชเจฒเฉฑเจ—เจ‡เจจ เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡, เจชเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจซเจพเจˆเจ‚เจกเจฌเฉฑเจ—เจธ เจ…เจคเฉ‡ 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 เจตเจฟเฉฑเจš เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจšเจฒเจพเจ‰เจฃเจพเฅค

เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, sonar-break-maven-plugin เจชเจฒเฉฑเจ—เจ‡เจจ เจจเฉ‚เฉฐ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจ…เฉฑเจชเจกเฉ‡เจŸ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ เจ†เจ“ เจ†เจชเจพเจ‚ เจ†เจชเจฃเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจฒเจฟเจ–เฉ€เจเฅค

เจœเจพเจ‚เจš เจฒเจˆ เจ…เจธเฉ€เจ‚ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡ 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 เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ†เจˆ.เจกเฉ€. เจธเจผเจพเจฎเจฒ เจนเฉˆเฅค

SonarQube เจตเจฟเฉฑเจš เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจธเจฅเจฟเจคเฉ€ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจจเจพ

เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจตเจฟเจ•เจฒเจช เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ เจ‡เฉฑเจฅเฉ‡ เจฆเฉ‡เจ–เฉ‹.

เจธเฉเจงเจพเจฐเจพเจ‚ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚, เจฌเฉฑเจ— เจซเจฟเจ•เจธ เจ‡เจธ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจœเจฎเฉเจนเจพ เจ•เจฐเฉ‹.

SonarQube เจฌเจพเจฐเฉ‡ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจšเฉˆเจŸ https://t.me/sonarqube_ru
DevSecOps เจฌเจพเจฐเฉ‡ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจšเฉˆเจŸ - เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค DevOps https://t.me/sec_devops

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹