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

рд╕реНрдерд╛рдкрдиреЗрджрд░рдореНрдпрд╛рди, рдмрд╣реБрддреЗрдХ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓, рдкрд░рдВрддреБ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ 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 рдордзреНрдпреЗ рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдгрд╛рдЪреА рд╕реНрдерд┐рддреА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рдгреЗ.

рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рд╕реЛрдирд╛рд░-рдмреНрд░реЗрдХ-рдорд╛рд╡реЗрди-рдкреНрд▓рдЧрдЗрди рдкреНрд▓рдЧрдЗрди рдмрд░реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдирд╛рд╣реА. рдЪрд▓рд╛ рддрд░ рдордЧ рд╕реНрд╡рддрдГрдЪреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣реВрдпрд╛.

рдЪрд╛рдЪрдгреАрд╕рд╛рдареА рдЖрдореНрд╣реА рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рд╡рд╛рдкрд░реВ 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

рдЖрдореНрд╣реА рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдпреЗрдереЗ рдЬрд╛рддреЛ http://172.26.9.115:9000/
рдирд┐рдпрдорд┐рдд рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде "рдмреЕрдЬ".
рдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд рд╕реЛрдирд╛рд░рдХреНрдпреВрдмрдордзреНрдпреЗ рд▓реЙрдЧ рдЗрди рдХрд░рд╛.

SonarQube рдордзреНрдпреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд┐рддреА рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рджрд╛рдЦрд╡рдд рдЖрд╣реЗ

тАЬрдорд╛рдЭреЗ рдЦрд╛рддреЗтАЭ рд╡рд░ рдЬрд╛, рдПрдХ рдирд╡реАрди рдЯреЛрдХрди рддрдпрд╛рд░ рдХрд░рд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде тАЬread_all_repositoryтАЭ рдирд╛рд╡рд╛рдиреЗ рдЖрдгрд┐ тАЬgenerateтАЭ рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛.

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 рдордзреНрдпреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд┐рддреА рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рджрд╛рдЦрд╡рдд рдЖрд╣реЗ

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 рдордзреНрдпреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд┐рддреА рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рджрд╛рдЦрд╡рдд рдЖрд╣реЗ

рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдкрд░реНрдпрд╛рдп рдЕрд╕реВ рд╢рдХрддрд╛рдд рдпреЗрдереЗ рдкрд╣рд╛.

рд╕реБрдзрд╛рд░рдгрд╛, рджреЛрд╖ рдирд┐рд░рд╛рдХрд░рдгрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛ рдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдд рд╕рдмрдорд┐рдЯ рдХрд░рд╛.

рд╕реЛрдирд╛рд░рдХреНрдпреВрдмрдмрджреНрджрд▓ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдЪреЕрдЯ https://t.me/sonarqube_ru
DevSecOps рдмрджреНрджрд▓ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреЕрдЯ - рд╕реБрд░рдХреНрд╖рд┐рдд DevOps https://t.me/sec_devops

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛