แž”แž„แŸ’แž แžถแž‰แžŸแŸ’แžแžถแž“แž—แžถแž–แžแŸ’แžšแžฝแžแž–แžทแž“แžทแžแŸ’แž™แž‚แžปแžŽแž—แžถแž–แž€แžผแžŠแž”แŸ’แžšแž—แž–แž“แŸ…แž€แŸ’แž“แžปแž„ SonarQube แžŠแž›แŸ‹แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸ

SonarQube แž‚แžบแž‡แžถแžœแŸแž‘แžทแž€แžถแž’แžถแž“แžถแž‚แžปแžŽแž—แžถแž–แž€แžผแžŠแž”แŸ’แžšแž—แž–แž”แžพแž€แž…แŸ†แž แžŠแŸ‚แž›แž‚แžถแŸ†แž‘แŸ’แžšแž—แžถแžŸแžถแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‡แžถแž…แŸ’แžšแžพแž“ แž“แžทแž„แž•แŸ’แžแž›แŸ‹แž“แžผแžœแž€แžถแžšแžšแžถแž™แž€แžถแžšแžŽแŸแžขแŸ†แž–แžธแž˜แŸ‰แŸ‚แžแŸ’แžšแžŠแžผแž…แž‡แžถแž€แžถแžšแž…แž˜แŸ’แž›แž„แž€แžผแžŠ แž€แžถแžšแžขแž“แžปแž›แŸ„แž˜แžแžถแž˜แžŸแŸ’แžแž„แŸ‹แžŠแžถแžšแž€แžถแžšแžŸแžšแžŸแŸแžšแž€แžผแžŠ แž€แžถแžšแž‚แŸ’แžšแž”แžŠแžŽแŸ’แžแž”แŸ‹แž›แžพแž€แžถแžšแž’แŸ’แžœแžพแžแŸแžŸแŸ’แž แž—แžถแž–แžŸแŸ’แž˜แžปแž‚แžŸแŸ’แž˜แžถแž‰แž“แŸƒแž€แžผแžŠ แž€แŸ†แž แžปแžŸแžŠแŸ‚แž›แžขแžถแž…แž€แžพแžแž˜แžถแž“ แž“แžทแž„แž…แŸ’แžšแžพแž“แž‘แŸ€แžแŸ” SonarQube แž˜แžพแž›แžƒแžพแž‰แž›แž‘แŸ’แž’แž•แž›แžœแžทแž—แžถแž‚แž™แŸ‰แžถแž„แž„แžถแž™แžŸแŸ’แžšแžฝแž› แž“แžทแž„แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แžขแŸ’แž“แž€แžแžถแž˜แžŠแžถแž“แžแžถแž˜แžœแž“แŸ’แžแž“แŸƒแž€แžถแžšแžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž‚แž˜แŸ’แžšแŸ„แž„แžแžถแž˜แž–แŸแž›แžœแŸแž›แžถแŸ”

แž‚แŸ„แž›แž”แŸ†แžŽแž„แŸ– แž”แž„แŸ’แž แžถแž‰แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸแž“แžผแžœแžŸแŸ’แžแžถแž“แž—แžถแž–แž“แŸƒแž€แžถแžšแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แž‚แžปแžŽแž—แžถแž–แž€แžผแžŠแž”แŸ’แžšแž—แž–แž“แŸ…แž€แŸ’แž“แžปแž„ SonarQube แŸ”

แž˜แžถแž“แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž–แžธแžšแŸ–

  • แžŠแŸ†แžŽแžพแžšแž€แžถแžšแžŸแŸ’แž‚แŸ’แžšแžธแž”แžŠแžพแž˜แŸ’แž”แžธแž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แžŸแŸ’แžแžถแž“แž—แžถแž–แžแŸ’แžšแžฝแžแž–แžทแž“แžทแžแŸ’แž™แž‚แžปแžŽแž—แžถแž–แž€แžผแžŠแž”แŸ’แžšแž—แž–แž“แŸ…แž€แŸ’แž“แžปแž„ SonarQube แŸ” แž”แŸ’แžšแžŸแžทแž“แž”แžพแž€แžถแžšแžแŸ’แžšแžฝแžแž–แžทแž“แžทแžแŸ’แž™แž‚แžปแžŽแž—แžถแž–แž“แŸƒแž€แžผแžŠแž”แŸ’แžšแž—แž–แž“แŸ…แž€แŸ’แž“แžปแž„ SonarQube แž˜แžทแž“แž แžปแž… แž“แŸ„แŸ‡แž€แžถแžšแž‡แžฝแž”แž”แŸ’แžšแž‡แžปแŸ†แž‚แŸ’แž“แžถแž“แžนแž„แž”แžšแžถแž‡แŸแž™แŸ”
  • แž”แž„แŸ’แž แžถแž‰แžŸแŸ’แžแžถแž“แž—แžถแž–แžแŸ’แžšแžฝแžแž–แžทแž“แžทแžแŸ’แž™แž‚แžปแžŽแž—แžถแž–แž€แžผแžŠแž”แŸ’แžšแž—แž–แž“แŸ…แž›แžพแž‘แŸ†แž–แŸแžšแž‚แž˜แŸ’แžšแŸ„แž„แž…แž˜แŸ’แž”แž„แŸ”

แž€แžถแžšแžŠแŸ†แžกแžพแž„ SonarQube

แžŠแžพแž˜แŸ’แž”แžธแžŠแŸ†แžกแžพแž„ sonarqube แž–แžธแž€แž‰แŸ’แž…แž”แŸ‹ rpm แž™แžพแž„แž“แžนแž„แž”แŸ’แžšแžพแžƒแŸ’แž›แžถแŸ†แž„ 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

แž€แŸ†แžกแžปแž„แž–แŸแž›แžŠแŸ†แžกแžพแž„ แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‡แŸ†แž“แžฝแž™แž—แžถแž‚แž…แŸ’แžšแžพแž“แž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แžŠแŸ†แžกแžพแž„ แž”แŸ‰แžปแž“แŸ’แžแŸ‚แžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแžŠแŸ†แžกแžพแž„ 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 แŸ”

แž‡แžถแžขแž€แžปแžŸแž› แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‡แŸ†แž“แžฝแž™ 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 แž˜แžทแž“แž›แŸ’แžขแžฅแžแžแŸ’แž…แŸ„แŸ‡แž‘แŸแŸ” แžŸแžถแž€แž›แŸ’แž”แž„แž”แŸ’แžšแžŸแžทแž“แž”แžพแž€แžทแž…แŸ’แž…แž€แžถแžšแžŸแŸ’แž€แŸแž“แž“แŸ…แž€แŸ’แž“แžปแž„ sonarqube แž”แžถแž“แž”แž‰แŸ’แž…แž”แŸ‹แžŠแŸ„แž™แžŸแŸ’แžแžถแž“แž—แžถแž–แŸ– "แž‡แŸ„แž‚แž‡แŸแž™" แŸ” แžšแž แžผแžโ€‹แž˜แž€โ€‹แžŠแž›แŸ‹โ€‹แž–แŸแž›โ€‹แž“แŸแŸ‡โ€‹แž˜แžทแž“โ€‹แž˜แžถแž“โ€‹แžŸแŸ’แžแžถแž“แž—แžถแž–โ€‹แž•แŸ’แžŸแŸแž„โ€‹แž‘แŸ€แžโ€‹แž‘แŸแŸ” แžŠแžšแžถแž”แžŽแžถแž˜แžถแž“แžŸแŸ’แžแžถแž“แž—แžถแž–แž•แŸ’แžŸแŸแž„แž‘แŸ€แž แžแŸ’แž‰แžปแŸ†แž“แžนแž„แž€แŸ‚แžแž˜แŸ’แžšแžผแžœ .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 แž‘แŸ… root แž‚แž˜แŸ’แžšแŸ„แž„แžŠแŸ‚แž›แž˜แžถแž“แžแŸ’แž›แžนแž˜แžŸแžถแžšแžŠแžผแž…แžแžถแž„แž€แŸ’แžšแŸ„แž˜แŸ”

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 แžŠแž›แŸ‹แžขแŸ’แž“แž€แžขแž—แžทแžœแžŒแŸ’แžแž“แŸ

แž‡แž˜แŸ’แžšแžพแžŸแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž‘แž‘แžฝแž›แž”แžถแž“แž˜แŸ‰แŸ‚แžแŸ’แžšแžขแžถแž…แž‡แžถ แž˜แžพแž›แžแŸ’แžšแž„แŸ‹แž“แŸแŸ‡แŸ”.

แžŸแŸ†แžŽแžพแž‘แžถแž‰แž‘แžถแŸ†แž„แžขแžŸแŸ‹แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž€แŸ‚แž›แž˜แŸ’แžข แž€แžถแžšแž€แŸ‚แž€แŸ†แž แžปแžŸ แžŠแžถแž€แŸ‹แžŸแŸ’แž“แžพแž‘แŸ…แžƒแŸ’แž›แžถแŸ†แž„แž“แŸแŸ‡แŸ”.

Telegram แž‡แž‡แŸ‚แž€แžขแŸ†แž–แžธ SonarQube https://t.me/sonarqube_ru
Telegram แž‡แž‡แŸ‚แž€แžขแŸ†แž–แžธ DevSecOps - แžŸแžปแžœแžแŸ’แžแžทแž—แžถแž– DevOps https://t.me/sec_devops

แž”แŸ’แžšแž—แž–: www.habr.com

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹