Sonarqube
Giới thiệu
SonarQube là một công cụ mã nguồn mở được sử dụng để đánh giá và quản lý chất lượng mã nguồn trong quy trình phát triển phần mềm. Nó cung cấp các công cụ phân tích tĩnh (static analysis) để phát hiện các vấn đề liên quan đến mã nguồn như lỗi lập trình, lỗi bảo mật, vi phạm quy tắc lập trình, và sự không tuân thủ tiêu chuẩn chất lượng.
SonarQube cung cấp khả năng kiểm tra tự động mã nguồn từ nhiều ngôn ngữ lập trình phổ biến và hỗ trợ tích hợp liên tục với các công cụ CI/CD như Jenkins, GitLab và Azure DevOps. Nó cho phép đo lường và theo dõi chất lượng mã nguồn theo thời gian, cung cấp báo cáo chi tiết về các vấn đề phát hiện và đề xuất cải thiện.
SonarQube giúp đảm bảo rằng mã nguồn được viết sạch, dễ bảo trì và tuân thủ các quy tắc và tiêu chuẩn chất lượng, đồng thời giúp giảm rủi ro và tăng hiệu suất trong quy trình phát triển phần mềm.
Tích hợp sonarqube với dự án trên gitlab
Runsystem sử dụng sonarqube tại địa chỉ https://sq.runsystem.info/, sonarqube sử dụng tài khoản gitlab của RUNSYSTEM để đăng nhập. Để sử dụng sonarqube bạn cần có tài khoản gitlab để đăng nhập vào hệ thống sonarqube và làm theo những bước sau đây.
Tạo dự án trên sonarqube
Bấm nút tạo project trên sonarqube để bắt đầu tạo dự án thủ công.
Điền thông tin Project key và Display name. Chú ý: Quy tắc đặt tên Project key. (Project key sau này sẽ được dùng để kết nối từ Gitlab CICD tới Sonarqube)
- <Tên chi nhánh>.<Tên bộ phận>.[Mã dự án trên jira] <Tên dự án trên jira>_Git_Branch. Ví dụ: HN.BSD.[OPS]OnePageShop_buyer_master
Cùng với Project key, Token sẽ đuợc dùng để kết nối từ Gitlab CICD tới Sonaqube. Token sẽ đuợc gắn với user của bạn, và có thể tái sử dụng cho các dự án cần tích hợp về sau mà không cần tạo token mới. Có thể lựa chọn tạo một token mới Generate a token hoặc sử dụng token cũ đã tạo trước đó bằng cách lựa chọn Use existing token. Notes: Nếu chọn Generate a token hãy nhớ lưu lại token này để sử dụng lại về sau.
Tiếp đó, hãy lưu hai thông tin bên duới (mục Execute the Scanner from your computer). Ví dụ:
sonar.projectKey=hn.tio.test
sonar.login=9951fb7b4cd8905d28760007760ac929e194d4c3
Trong đó projectKey
và login
sẽ là hai thông tin sẽ dùng để sử dụng trong trong CI&CD.
Cấu hình CI&CD
Để có thể sử dụng CI&CD project phải được kích hoạt để chạy một gitlab-runner, trong trường hợp này bạn có thể cài một server gitlab-runner riêng hoặc đơn giản hơn request tài nguyên dự án thông qua G-Help Link request hoặc liên hệ ChatOps thienlv2@runsystem.net.
Để cấu hình CI&CD trên gitlab cần thực hiện 2 bước:
Cấu hình biến môi trường cho dự án trên bảng điều khiển setting gitlab
Truy cập Setting --> CICD --> Variables Sử dụng Project key, Token đã lưu bên trên đê tạo 2 biến môi trường cho gitlab repository. Ví dụ:
SONAR_PROJECT_KEY=hn.tio.test
SONAR_TOKEN=1234sdafdfsdfsd4565
Phần SONAR_PROJECT_KEY
nếu có ký tự đặc biệt như ._-
thì hãy chuyển tắt masked
ở ô input.
- Từ đây có thể quay lại phần https://cicd.runsystem.work/docs/integrated-with-cicd/quick-start để setup tích hợp tất cả các tool. Trong trường chỉ tích hợp riêng sonarqube, theo dỏi tiếp hướng dẫn bên duới.
Cấu hình file .gitlab-ci.yml
vào root của source code
File .gitlab-ci.yml
phải nằm ở root source code dự án. Nội dung tham khảo
như sau:
- Áp dụng với dự án với các dự án PHP,Node,Python... (trừ Java)
sonarqube:
only:
- master
- dev
stage: sonarqube
image:
name: sonarsource/sonar-scanner-cli:latest
entrypoint: [ "" ]
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
SONAR_HOST_URL: https://sq.runsystem.info
SONAR_TOKEN: "${SONAR_TOKEN}"
SONAR_SCANNER_OPTS: "-Dsonar.projectKey=${SONAR_PROJECT_KEY}"
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner -Dsonar.sources=. -Dsonar.dependencyCheck.htmlReportPath=./dependency-check-report.html -Dsonar.exclusions=**/dependency-check-report.html,**/*.java,**/*.yml -Dsonar.dependencyCheck.severity.critical=4.0
allow_failure: true
- Áp dụng với dự án Java (Lưu ý: với project Java, cần build ra class trước khi quét)
sonarqube:
only:
- master
stage: sonarqube
image:
name: sonarsource/sonar-scanner-cli:latest
entrypoint: [ "" ]
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
SONAR_HOST_URL: https://sq.runsystem.info
SONAR_TOKEN: "${SONAR_TOKEN}"
SONAR_SCANNER_OPTS: "-Dsonar.projectKey=${SONAR_PROJECT_KEY}"
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner -Dsonar.sources=. -Dsonar.dependencyCheck.htmlReportPath=./dependency-check-report.html -Dsonar.exclusions=**/dependency-check-report.html,**/*.yaml,**/*.yml,**/*.sh -Dsonar.java.binaries=. -Dsonar.dependencyCheck.severity.critical=4.0
allow_failure: true
Trong đó develop
, master
là nhánh bạn muốn quét, nếu sử dụng nhánh khác hãy
sửa/ thêm thông tin này.
Chạy quét sonarque
Sau khi đã setup xong, mỗi khi có merge request được merge vào nhánh đã cấu hình hoặc có commit trực tiếp vào nhánh đã cấu hình thì sonarqube sẽ tự động được kích hoạt.
Có thể theo dõi quá trình quét trên dashboard của gitlab và kết quả quét sẽ được đẩy lên https://sq.runsystem.info/
ý nghĩa các thông số của Sonarqube tham khảo thêm tại: https://docs.sonarqube.org/latest/user-guide/metric-definitions/