เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดจเดฟเดฒ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

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

เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเตป เดธเดฎเดฏเดคเตเดคเต, เดฎเดฟเด•เตเด• เดชเตเดฒเด—เดฟเดจเตเด•เดณเตเด‚ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚, เดชเด•เตเดทเต‡ เดจเดฟเด™เตเด™เตพ findbugs, pmd เดŽเดจเตเดจเดฟเดต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต

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-เดฒเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดจเดฟเดฒ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, 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-เดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเด•.

เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดจเดฟเดฒ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

"เดŽเดจเตเดฑเต† เด…เด•เตเด•เต—เดฃเตเดŸเต" เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•, เด’เดฐเต เดชเตเดคเดฟเดฏ เดŸเต‹เด•เตเด•เตบ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต "read_all_repository" เดŽเดจเตเดจ เดชเต‡เดฐเดฟเตฝ "เดœเดจเดฑเต‡เดฑเตเดฑเต" เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•.

เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดจเดฟเดฒ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เด’เดฐเต เดŸเต‹เด•เตเด•เตบ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเดคเดพเดฏเดฟ เดžเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต. เด…เดตเตป 1 เดคเดตเดฃ เดฎเดพเดคเตเดฐเดฎเต‡ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเด•เดฏเตเดณเตเดณเต‚.

เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเดฑเดพเดฏเดฟ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเด•.

เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป -> SVG เดฌเดพเดกเตเดœเตเด•เตพ เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•

เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดจเดฟเดฒ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดˆ เดŸเต‹เด•เตเด•เตบ "เด†เด•เตโ€Œเดฑเตเดฑเดฟเดตเดฟเดฑเตเดฑเดฟ เดฌเดพเดกเตเดœเต เดŸเต‹เด•เตเด•เตบ" เดซเต€เตฝเดกเดฟเดฒเต‡เด•เตเด•เต เดชเด•เตผเดคเตเดคเดฟ เดธเต‡เดตเต เดฌเดŸเตเดŸเตบ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•.

เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดจเดฟเดฒ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดทเตป -> เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ -> เดชเต†เตผเดฎเดฟเดทเตป เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเตเด•เตพ -> เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต (เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‰เดณเตเดณ เดฎเดฑเตเดฑเต เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเตเด•เตพ) เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•.

เดฌเดพเดกเตเดœเตเด•เตพ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต "เดฌเตเดฐเต—เดธเต" เดšเต†เด•เตเด•เตเดฌเต‹เด•เตเดธเต เดšเต†เด•เตเด•เต เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เดฃเด‚.

เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต.

เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฎเตเด•เตเด•เต เดชเดฆเตเดงเดคเดฟ เดŽเดŸเตเด•เตเด•เดพเด‚ 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-เตฝ เดชเดฆเตเดงเดคเดฟ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดจเดฟเดฒ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

README.md-เดฒเต‡เด•เตเด•เต เดฌเดพเด—เตเด•เตพ เดšเต‡เตผเด•เตเด•เตเด•, เด…เดต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดจเดฟเดฒ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดฌเดพเดกเตเดœเตเด•เดณเตเดŸเต† เดกเดฟเดธเตเดชเตเดฒเต‡ เด•เต‹เดกเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

เดธเต‹เดฃเดพเตผเด•เตเดฏเต‚เดฌเดฟเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดจเดฟเดฒ เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดฌเดพเดกเตเดœเตเด•เดณเตเดŸเต† เดกเดฟเดธเตเดชเตเดฒเต‡ เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดชเดพเดดเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

[![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-เดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเต https://t.me/sonarqube_ru
DevSecOps-เดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเต - เดธเตเดฐเด•เตเดทเดฟเดค DevOps https://t.me/sec_devops

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•