рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВ

рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдирд┐рд░рдВрддрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдЖрд╢реНрд╡рд╛рд╕рди рдордВрдЪ рд╣реИ рдЬреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡, рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди, рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ, рдХреЛрдб рдЬрдЯрд┐рд▓рддрд╛, рд╕рдВрднрд╛рд╡рд┐рдд рдмрдЧ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдЬреИрд╕реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЙрджреНрджреЗрд╢реНрдп: рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВред

рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:

  • рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБред рдпрджрд┐ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреГрд╖реНрда рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВред

рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдЖрд░рдкреАрдПрдо рдкреИрдХреЗрдЬ рд╕реЗ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ 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

рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБред

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

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ https://github.com/uweplonus/spotbugs-examples.

рдЧрд┐рдЯрд▓реИрдм рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ. .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 рдХреЛ рд╕рд╣реА рдХрд░ рджреВрдВрдЧрд╛ред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ

рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛

yum install -y sonarqube-qualinsight-badges

рд╣рдо рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ http://172.26.9.115:9000/
рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "рдмреИрдЬ"ред
рд╣рдо SonarQube рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЬрд╛рддреЗ рд╣реИрдВред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВ

рд╣рдо "рдореЗрд░рд╛ рдЦрд╛рддрд╛" рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ рдирдпрд╛ рдЯреЛрдХрди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "read_all_repository" рдирд╛рдо рд╕реЗ рдФрд░ "рдЬреЗрдирд░реЗрдЯ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВ

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдЯреЛрдХрди рдкреНрд░рдХрдЯ рд╣реБрдЖ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реА рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ.

рд╣рдо рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рдЕрдзреАрди рдЬрд╛рддреЗ рд╣реИрдВред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди -> рдПрд╕рд╡реАрдЬреА рдмреИрдЬ рдкрд░ рдЬрд╛рдПрдВ

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВ

рдЗрд╕ рдЯреЛрдХрди рдХреЛ "рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдмреИрдЬ рдЯреЛрдХрди" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рд╕реЗрд╡ рдмрдЯрди рджрдмрд╛рдПрдБред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВ

рдкреНрд░рд╢рд╛рд╕рди -> рд╕реБрд░рдХреНрд╖рд╛ -> рдЕрдиреБрдорддрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ -> рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ (рдФрд░ рдЕрдиреНрдп рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реЛрдВрдЧреЗ) рдкрд░ рдЬрд╛рдПрдБред

рдмреИрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ "рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░реЗрдВ" рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред

рдкрд░реАрдХреНрд╖рдгред

рдЖрдЗрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВред 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

рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВ

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-╨┐╤А╨╛╨╡╨║╤В╨░)

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреБрдВрдЬреА рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд/рдЬрд╛рдВрдЪреЗрдВред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреБрдВрдЬреА рдиреАрдЪреЗ рджрд╛рдИрдВ рдУрд░ рд╣реИред рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рд╣реИред

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВ

рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╣рд╛рдБ рджреЗрдЦреЛ.

рд╕реБрдзрд╛рд░, рдмрдЧ рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ.

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ