αž”αž„αŸ’αž αžΆαž‰αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‚αž»αžŽαž—αžΆαž–αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž“αŸ…αž€αŸ’αž“αž»αž„ 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹