Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

SonarQube là một nền tảng đảm bảo chất lượng mã nguồn mở hỗ trợ nhiều ngôn ngữ lập trình và cung cấp báo cáo về các số liệu như sao chép mã, tuân thủ tiêu chuẩn mã hóa, phạm vi kiểm tra, độ phức tạp của mã, các lỗi tiềm ẩn, v.v. SonarQube trực quan hóa kết quả phân tích một cách thuận tiện và cho phép bạn theo dõi động lực phát triển dự án theo thời gian.

Mục tiêu: Hiển thị cho nhà phát triển trạng thái kiểm soát chất lượng mã nguồn trong SonarQube.

Có hai giải pháp:

  • Chạy tập lệnh để kiểm tra trạng thái kiểm soát chất lượng mã nguồn trong SonarQube. Nếu việc kiểm soát chất lượng mã nguồn trong SonarQube không vượt qua thì quá trình lắp ráp sẽ không thành công.
  • Hiển thị trạng thái kiểm soát chất lượng mã nguồn trên trang dự án chính.

Cài đặt SonarQube

Để cài đặt sonarqube từ các gói vòng/phút, chúng ta sẽ sử dụng kho lưu trữ https://harbottle.gitlab.io/harbottle-main.

Hãy cài đặt gói có kho lưu trữ cho CentOS 7.

yum install -y https://harbottle.gitlab.io/harbottle-main/7/x86_64/harbottle-main-release.rpm

Chúng tôi cài đặt sonarqube.

yum install -y sonarqube

Trong quá trình cài đặt, hầu hết các plugin sẽ được cài đặt nhưng bạn cần cài đặt findbugs và pmd

yum install -y sonarqube-findbugs sonarqube-pmd

Khởi chạy dịch vụ và thêm nó vào khởi động

systemctl start sonarqube
systemctl enable sonarqube

Nếu mất nhiều thời gian để tải, hãy thêm trình tạo số ngẫu nhiên /dev/./urandom vào cuối tùy chọn sonar.web.javaOpts

sonar.web.javaOpts=другие параметры -Djava.security.egd=file:/dev/urandom

Chạy tập lệnh để kiểm tra trạng thái kiểm soát chất lượng mã nguồn trong SonarQube.

Thật không may, plugin sonar-break-maven-plugin đã lâu không được cập nhật. Vì vậy, hãy viết kịch bản của riêng chúng tôi.

Để thử nghiệm, chúng tôi sẽ sử dụng kho lưu trữ https://github.com/uweplonus/spotbugs-examples.

Nhập vào Gitlab. Thêm tệp .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

Tệp .gitlab-ci.yml không hoàn hảo. Đã kiểm tra xem tác vụ quét trong sonarqube có kết thúc với trạng thái: "THÀNH CÔNG" hay không. Cho đến nay không có trạng thái khác. Ngay khi có trạng thái khác, tôi sẽ sửa .gitlab-ci.yml trong bài đăng này.

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trên trang dự án chính

Cài đặt plugin cho SonarQube

yum install -y sonarqube-qualinsight-badges

Chúng tôi đến SonarQube lúc http://172.26.9.115:9000/
Tạo một người dùng thông thường, ví dụ như "huy hiệu".
Đăng nhập vào SonarQube dưới tên người dùng này.

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

Đi tới “Tài khoản của tôi”, tạo mã thông báo mới, ví dụ: với tên “read_all_repository” và nhấp vào “Tạo”.

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

Chúng tôi thấy rằng một mã thông báo đã xuất hiện. Anh ấy sẽ chỉ xuất hiện 1 lần.

Đăng nhập với tư cách quản trị viên.

Đi tới Cấu hình -> Huy hiệu SVG

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

Sao chép mã thông báo này vào trường "Mã thông báo huy hiệu hoạt động" và nhấp vào nút lưu.

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

Đi tới Quản trị -> Bảo mật -> Mẫu quyền -> Mẫu mặc định (và các mẫu khác mà bạn sẽ có).

Người dùng huy hiệu phải chọn hộp kiểm "Duyệt qua".

Kiểm tra.

Ví dụ: hãy lấy dự án https://github.com/jitpack/maven-simple.

Hãy nhập dự án này.

Thêm tệp .gitlab-ci.yml vào thư mục gốc của dự án với nội dung sau.

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

Trong SonarQube dự án sẽ trông như thế này:

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

Thêm túi vào README.md và chúng sẽ trông như thế này:

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

Mã hiển thị huy hiệu trông như thế này:

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

Phân tích chuỗi hiển thị huy hiệu:

[![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-проекта)

Nơi nhận/kiểm tra Khóa dự án và id dự án.

Khóa dự án nằm ở dưới cùng bên phải. URL chứa id dự án.

Hiển thị trạng thái kiểm soát chất lượng mã nguồn trong SonarQube cho nhà phát triển

Các tùy chọn để lấy số liệu có thể xem ở đây.

Tất cả các yêu cầu kéo để cải tiến, sửa lỗi gửi tới kho lưu trữ này.

Trò chuyện Telegram về SonarQube https://t.me/sonarqube_ru
Trò chuyện trên Telegram về DevSecOps - DevOps an toàn https://t.me/sec_devops

Nguồn: www.habr.com

Thêm một lời nhận xét