Hướng dẫn cài đặt sonarqube cho php năm 2024

Bạn đang phân vân không biết code mình viết ra có chất lượng hay không, có tốt hay không? Dựa vào những tiêu chí nào để có thể giúp chúng ta viết code tốt theo chuẩn thế giới? Làm thế nào để nâng cao tay nghề code của mình? Về phần tôi, tôi sử dụng một cái tool có tên là Sonar. Bạn hãy xem chi tiết về sonar trong video dưới đây nhé! Sonarqube là một công cụ thật tuyệt vời, thật không thể tin được. Thôi chết, bị nhiễm quảng cáo Bphone rồi. Thôi quảng cáo công cụ test code tiếp …

Hiện nay, các bạn lập trình viên thường được thầy cô dạy về thuật toán nhiều, còn chất lượng code và các quy tắc trong coding để có thể dễ dàng làm việc đội nhóm, dễ dàng bảo trì thì hình như không mấy khi được quan tâm. Nhưng các bạn cũng không nên quá lo lắng vì mấy skill đó mình có thể học sau khi đi làm, nhanh thôi.

Sonarqube là công cụ giúp lập trình viên kiểm tra code của mình đã tốt chưa, nếu có bất kì lỗi nào vi phạm hay có nguy cơ vi phạm nguyên tắc (chuẩn chung) thì nó sẽ giúp ta cảnh báo và đưa ra suggest để sửa, dần dần trong quá trình code mình sẽ hình thành thói quen và không mắc lỗi nữa. Các cài đặt cũng khá đơn giản thôi, bài này mình hướng dẫn cho ngôn ngữ PHP nhé.

Bước 1: Tải các package hỗ trợ

  • Sonarqube
  • Sonarqube scanner
  • Sonarqube examples

Giải nén tất cả và copy cả 3 thư mục vào ổ C, nhớ đổi tên các thư mục lại thành sonarqube, sonarqube scanner và sonarqube examples.

Bước 2: Tải và cài đặt jdk nếu máy bạn chưa cài sẵn

Bước 3: Vào trong thư mục C:\sonarqube\bin\windows-x86-64, tìm và chạy file StartSonar.bat để bật server sonarqube lên. Sau khi chạy thành công thì vẫn để cửa sổ chứ không được tắt nha

Lưu ý: nếu hệ điều hành của 32 bit thì vô windows-x86-32 thay vì vô windows-x86-64.

Bước 4: Vào thư mục C:\sonar-examples\projects\languages\php\php-sonar-runner copy file sonar-project.properties và bỏ vào thư mục root của dự án đang cần test.

Để test được code, cần phải sửa lại file sonar-project.properties tại 2 chỗ, đầu tiên sửa sonar.sources thành đường dẫn đến file cần test, sau đó sửa sonar.language thành ngôn ngữ của dự án (ở đây mình dùng php).

Hướng dẫn cài đặt sonarqube cho php năm 2024

Bước 5: Bạn vào trình duyệt gõ localhost:9000, đăng nhập vào với ID/password lần lượt là admin/admin.

Chọn Administration, vào mục System và chọn Update Center. Việc tiếp theo cần làm là tìm và cài đặt gói ngôn ngữ mà bạn cần test. Sonarqube đã cài sẵn một số gói tại mục Installed, mình thấy chưa có gói php nên mình qua tab Available tìm và cài đặt php.

Sau khi cài đặt xong thì server yêu cầu restart, cứ restart thôi. Nếu như bạn thoát ra rồi đăng nhập lại, vô lại tab Installed thấy có tên gói đó thì đã cài đặt thành công còn nếu không có thì cần cài lại từ đầu, lâu lâu server nó bệnh bệnh nên phải cố gắng (hàng free mà).

Bước 6: Ok, tiếp theo mở command line và cd đến thư mục root của dự án (nơi bạn đã paste file sonar-project.properties lúc nãy). Chạy lệnh C:\sonar-scanner\bin\sonar-runner.bat để chương trình test lỗi cho bạn. Nếu trong quá trình chạy không báo lỗi gì thì ta đã thành công việc phân tích lỗi.

Sau cùng là vào lại localhost:9000, vào mục Issues chọn Unresoved Isues. Tada, một danh sách các lỗi với các thuộc tính lỗi như Code Smell, Bug hoặc Vulnerability hiện ra. Việc của bạn là xem và fix lại nó thôi. Cái hay của Sonarqube là nó đưa ra cả gợi ý cho ta fix lại mấy lỗi này, tuyệt vời không.

……………………………………. không thì thôi.

Hướng dẫn cài đặt sonarqube cho php năm 2024

Cứ làm vài dự án với công cụ này thì kiểu gì skills code cũng lên, khi nào code xong mà test lại không còn lỗi nào thì lúc đó đẳng cấp đã lên nhiều rồi đấy. Chúc các chế coding vui vẻ!

Nếu bạn không muốn sếp khiển trách vì sao các dự án chạy chậm thế? tiêu tốn nhiều tài nguyên thế? lỗi bảo mật không đáng thế? Lúc này ông Ops chê ông Dev, code thế này thì gắn tên lửa cũng không nhanh được, gọi service quái gì load mãi không lên. Ông Dev chê ông Ops, do các ông triển khai thế nào chứ ở local của tôi hơi chậm nhưng không đến nỗi thế. Hai ông cãi nhau không hồi kết…

Lúc này ông Ops đã làm hết sức mình và đảm bảo hạ tầng tốt, chạy ổn định nhưng vẫn thấy rất tệ, ông Ops mới giới hạn tài nguyên, sax gì mà cấp xxx memory yyy cpu rồi mà service chạy một lúc là cao tải rồi down vậy? Ông Dev mới bắt đầu gãi tai à à thế khả năng code chưa tối ưu bạn đợi tôi nói anh em xem lại…

Chất lượng logic code kém khiến cho tiêu tốn tài nguyên cũng như thời gian xử lý ảnh hưởng trực tiếp đến trải nghiệm của người dùng, ai cũng nghĩ rằng code của tôi đã rất tốt rồi vậy thì lỗi này do ai? lúc này dùng Sonarqube là sự lựa chọn tuyệt vời.

Bạn có thể hiểu đơn giản dùng Sonarqube tương tự như có một senior rất giỏi với thực lực một đống chứng chỉ thế giới uy tín hiểu biết rõ rất nhiều ngôn ngữ lập trình để giúp bạn đánh giá code về chất lượng, bảo mật, logic, tối ưu,… mà hoàn toàn miễn phí vì thế mà rất nhiều những doanh nghiệp đã tin dùng.

Vậy Dev hay Ops hay DevOps dùng Sonarqube như thế nào? cụ thể cho từng vị trí sẽ ra sao?

Hơn hết trong bài viết này mình sẽ cung cấp sẵn “mẫu” cấu hình để bạn có thể dùng sonarqube quét chất lượng code mọi dự án, mọi ngôn ngữ thông dụng, nên bạn hoàn toàn có thể sử dụng cho dự án của bạn nhé

Tương tự đây là một bài viết dài… dài… rất chi tiết mong rằng sẽ giúp được cho những bạn thực sự cần những thực tế, đầy đủ chúng ta cùng bắt đầu.

SonarQube là một nền tảng mã nguồn mở được phát triển bởi SonarSource để thực hiện kiểm tra liên tục về chất lượng mã nguồn thông qua việc thực hiện đánh giá tự động bằng phân tích tĩnh mã nguồn để phát hiện lỗi và các vấn đề về mã nguồn không tốt trên 29 ngôn ngữ lập trình. SonarQube cung cấp báo cáo về mã nguồn trùng lặp, chuẩn mã hóa, kiểm thử đơn vị, độ bao phủ mã nguồn, độ phức tạp của mã, bình luận, lỗi, và gợi ý về bảo mật (Theo Wikipedia)

Tài liệu chính thức: sonarsource.com

Dùng Sonarqube để làm gì? Ưu điểm gì?

  • Kiểm tra chất lượng mã nguồn: dùng SonarQube đánh giá mã nguồn dự án để xác định các vấn đề về sự hiệu quả, tính nhất quán, bảo mật và tính ổn định. Sonarqube cung cấp thông tin chi tiết về các vấn đề này và cách sửa chúng.
  • Tích hợp vào quy trình CI/CD: chúng ta hoàn toàn có thể tích hợp sonarqube vào CI/CD để cho quá trình triển khai dự án được an toàn, bảo mật, tối ưu.
  • Bảo mật mã nguồn: dùng SonarQube kiểm tra các vấn đề về bảo mật mã nguồn, như phát hiện các lỗ hổng bảo mật và cung cấp khuyến nghị về cách sửa chúng.
  • Thống kê và báo cáo: Cung cấp báo cáo chi tiết về trạng thái chất lượng mã nguồn và tiến độ sửa lỗi, giúp bạn và nhóm phát triển theo dõi và cải thiện chất lượng mã nguồn.
  • Hỗ trợ nhiều ngôn ngữ: SonarQube hỗ trợ nhiều ngôn ngữ lập trình, bao gồm Java, C#, C/C++, JavaScript, Python, Ruby, và nhiều ngôn ngữ khác, giúp đảm bảo chất lượng mã nguồn cho nhiều loại dự án.
  • Dễ sử dụng và cấu hình linh hoạt: Giao diện người dùng dễ sử dụng cho cả người mới và người có kinh nghiệm.

Đến đây chúng ta cũng đã biết rằng dùng Sonarqube sẽ giúp chúng ta rất nhiều trong phát triển dự án và những ứng dụng khác bạn có thể tìm hiểu thêm.

Sonarqube architecture (workflow)

Hướng dẫn cài đặt sonarqube cho php năm 2024

Bạn không cần suy nghĩ quá phức tạp đơn giản chỉ như sau:

  • Đầu tiên, Ở dưới môi trường Dev có một công cụ (extension) là Sonarlint, công cụ này gợi ý code tối ưu hơn cho Developer, được tích hợp trong các công cụ như IntelliJ (Java), Visual studio (C#, C++,…).
  • Tiếp theo, các Dev sẽ tiến hành commit code của mình lên trên kho lưu trữ git ở đây có thể là Github, Gitlab.
  • Tiếp đến, Ops sẽ cài đặt Sonarqube server (nơi chứa code đã được phân tích).
  • Sau đó, DevOps sẽ tiến hành tích hợp công cụ Sonar scanner vào trong quy trình CI/CD để khi mà Dev tiến hành commit code sẽ trực tiếp được chuyển lên server và quét Sonar

Các công việc này như vòng lặp Dev sẽ sửa code dần dần đến khi đạt tiêu chuẩn triển khai lên production (Cài đặt Sonarqube server và dùng Sonar scan tự động thì chỉ cần cấu hình 1 lần hoặc nhiều lần nếu như cần chỉnh sửa các yêu cầu cao hơn đối với code).

Sử dụng Sonarqube (cụ thể)

Như ngay ở trên đều thấy đầu tiên chúng ta cần cài đặt Sonarqube server (nơi chứa source code và phân tích code) và sau đó sẽ dùng Sonar Scanner để quét source code và đưa lên Sonarqube server.

Chuẩn bị

Chuẩn bị Ubuntu server đã cài đặt Docker (nếu bạn chưa cài đặt hãy làm theo bước sau)

Tạo file script cài đặt Docker

$ touch docker-install.sh && chmod +x docker-install.sh && nano docker-install.sh

Nội dung trong script như sau

#!/bin/bash sudo apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update -y sudo apt install docker-ce -y sudo systemctl start docker sudo systemctl enable docker sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker -v docker-compose -v

Chạy script lên bằng lệnh

Cài đặt Sonarqube

Tài liệu cài đặt đã rất nhiều trên internet nên bạn có thể cài đặt tùy ý nhé, trong bài viết này mình sử dụng docker đơn giản để chạy lên Sonarqube server như sau:

$ docker run --name sonarqube -dp 80:9000 sonarqube

Sau khi chạy xong bạn truy cập vào IP của server (lệnh ip a nếu như bạn chưa biết địa chỉ IP server) ví dụ: 192.168.17.199:80 (ở đây mình đã đặt hostname nên mới truy cập như vậy) sẽ được kết quả như dưới đây tài khoản mặc định sẽ là admin/admin

Hướng dẫn cài đặt sonarqube cho php năm 2024

Đăng nhập thành công và đổi mật khẩu mới

Hướng dẫn cài đặt sonarqube cho php năm 2024

Sử dụng user/group trong Sonarqube

Thiết lập thành công vào Sonarqube đầu tiên bạn chọn vào Administration

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chọn vào Security -> Users

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chúng ta đang có một user admin nhấn chọn vào group thấy rằng có 2 group cơ bản như dưới đây

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tiếp đến chúng ta tạo người dùng mới nhấn chọn Create User

Hướng dẫn cài đặt sonarqube cho php năm 2024

Điền những thông tin cá nhân, ở đây thường chúng ta sẽ theo format role-project_name (ex: developer-ecommerce-java) để xác định được rằng account dành cho ai và dự án nào

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tạo thành công chúng ta chọn qua phần Groups

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chúng ta sẽ tạo group chọn Create group

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tương tự bạn cũng cần tạo group cho dự án như sau

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tiếp tục chúng ta nhấn chọn vào Member để thêm user vào group hiện tại là 0

Hướng dẫn cài đặt sonarqube cho php năm 2024

Nhấn chọn user chúng ta vừa tạo ở trên vào group

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tiếp theo bạn chọn vào Security -> Global Permissions và hãy bỏ tích chọn group sonar-users được quyền tạo project

Hướng dẫn cài đặt sonarqube cho php năm 2024

Mình sẽ tạo thêm một user nữa là sonar-scanner đóng vai trò quét code, bạn có nhớ là chúng ta cần Sonarqube server để chứa code và phân tích còn Sonar scanner để quét code từ máy bạn lên không đó là lý do chúng ta cần một user riêng.

Hướng dẫn cài đặt sonarqube cho php năm 2024

Và thêm user sonar vào group admin nhé

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tương tự nếu cần thiết bạn tạo thêm user cho Tester, BA,… và tương ứng với các dự án

Quét dự án trên Sonarqube

Mình sẽ hướng dẫn sử dụng sonarqube cho những ngôn ngữ phổ biến như Java, C#, Php, React,… thậm chí 1 cấu hình quét mọi ngôn ngữ thông dụng! và mình hoàn toàn sử dụng những projects mã nguồn mở trên Github để trực quan.

*Note: Mình sẽ cung cấp mẫu cho những ngôn ngữ trước và sau đó đi sâu hơn vào việc sử dụng chi tiết, tùy chỉnh các đánh giá,… điều này giúp cho bạn sẽ dễ dàng cấu hình quét sonar thành công trước của ngôn ngữ bạn cần và sau đó sẽ đến bước custom theo ý mình.

Đầu tiên bạn chọn sang phần Projects và nhấn Create Project

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tạo project tương ứng như sau

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tạo thành công chúng ta nhấn chọn vào Setting -> Edit Permissions

Hướng dẫn cài đặt sonarqube cho php năm 2024

Bạn tiến hành tích chọn như dưới đây để bảo mật dự án chọn đúng group và các quyền (vì mặc định các user tạo trong group Sonar user nên chúng ta phải bỏ tích chọn nếu không các user khác đều có thể xem được project)

Hướng dẫn cài đặt sonarqube cho php năm 2024

Các tích chọn cụ thể như sau:

  • Browse (Trình duyệt): Quyền này cho phép người dùng xem thông tin tổng quan về dự án và các báo cáo kiểm tra chất lượng mã nguồn. Người dùng có quyền này có thể truy cập thông tin cơ bản như điểm kiểm tra chất lượng mã nguồn, số lượng lỗi và cảnh báo, và các chi tiết dự án.
  • See Source Code (Xem mã nguồn): Quyền này cho phép người dùng xem mã nguồn nguồn gốc (source code) của dự án. Điều này hữu ích cho việc xem mã nguồn để hiểu và khắc phục các vấn đề liên quan đến chất lượng mã nguồn.
  • Administer Issues (Quản lý vấn đề): Quyền này cho phép người dùng quản lý các vấn đề (issues) được tạo ra bởi SonarQube. Người dùng có quyền này có thể thực hiện các hoạt động như gán vấn đề, đánh giá mức độ quan trọng của vấn đề và thay đổi trạng thái của vấn đề (ví dụ: xác nhận, từ chối).
  • Administer Security Hotspots (Quản lý Security Hotspots): Quyền này liên quan đến việc quản lý các lỗ hổng bảo mật (security hotspots) trong mã nguồn. Người dùng có quyền này có thể quản lý và gán các security hotspot và thực hiện các hoạt động liên quan đến việc giải quyết các vấn đề bảo mật.
  • Administer (Quản lý): Quyền này cung cấp quyền quản lý cao nhất cho dự án trên SonarQube. Người dùng có quyền này có thể quản lý toàn bộ dự án, bao gồm quyền thay đổi cấu hình, thêm hoặc xóa dự án, quản lý người dùng và quản lý quyền truy cập dự án.
  • Execute Analysis (Thực hiện phân tích): Quyền này cho phép người dùng thực hiện phân tích chất lượng mã nguồn. Người dùng với quyền này có thể chạy quy trình kiểm tra chất lượng mã nguồn trên dự án. Điều này quan trọng để cập nhật thông tin kiểm tra chất lượng mã nguồn và báo cáo kết quả.

Tạo Token

Tiến hành đăng nhập vào tài khoản sonar-scanner và chọn vào My Account

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chọn vào Security và tiến hành tạo Token như dưới đây (Name và Expies in tùy bạn nhé nhưng Type là Global Analysis Token)

Hướng dẫn cài đặt sonarqube cho php năm 2024

Nhấn tạo thành công và copy Token và lưu lại nhé vì nó sẽ không hiển thị lại đâu

Hướng dẫn cài đặt sonarqube cho php năm 2024

Dùng Sonarqube dự án Java

Đầu tiên như các bước trên chúng ta tạo mình sẽ tiến hành làm trên dự án Java trước

Link dự án: GitHub: E-Commerce Website Using Java – Spring MVC in Maven

Bạn truy cập server và tiến hành clone dự án về

$ mkdir /projects && cd /projects && git clone https://github.com/ikismail/ShoppingCart.git

Tiếp theo di chuyển vào bên trong dự án

Tiếp theo để có thể scan được dự án java chúng ta sẽ cần build dự án bạn chạy lệnh (bạn chỉnh những thông tin:

$ docker run --name sonarqube -dp 80:9000 sonarqube

1,

$ docker run --name sonarqube -dp 80:9000 sonarqube

2,

$ docker run --name sonarqube -dp 80:9000 sonarqube

3,

$ docker run --name sonarqube -dp 80:9000 sonarqube

4,

$ docker run --name sonarqube -dp 80:9000 sonarqube

5)

docker run --rm --network host -v `pwd`:/app --workdir="/app" maven:3.6-jdk-8 mvn install

Sau khi build thành công dự án sẽ có thư mục target

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chúng ta sẽ tiếp tục chạy lệnh sau

docker run --rm --network host -v `pwd`:/app --workdir="/app"  sonarsource/sonar-scanner-cli sonar-scanner -X $SONAR_SCANNER_OPTS -Dsonar.host.url="http://sonarqube.elroydevops.tech" -Dsonar.login="sqa_ba09eb7b34578253f611e2f0a6f43dcbd9620100" -Dsonar.java.binaries="./target/classes" -Dsonar.sources="./src/" -Dsonar.projectKey="e-commerce-java" -Dsonar.projectName="e-commerce-java" -Dsonar.projectVersion="v1.0.0"

Giải thích:

  • Mình chạy một docker container với docker image là

    $ docker run --name sonarqube -dp 80:9000 sonarqube

    6 một image chính thức của sonar dùng để quét source code.
  • -Dsonar.host.url là địa chỉ Sonarqube server của bạn.
  • -Dsonar.login là Token mà vừa tạo ở trên.
  • -Dsonar.java.binaries là mã nguồn Java mà bạn muốn dùng SonarQube quét và phân tích.
  • -Dsonar.sources là đường dẫn code cần quét (dự án java thường trong src)
  • -Dsonar.projectKey là project key mà chúng ta tạo ở trên
  • -Dsonar.projectName là project name mà chúng ta tạo ở trên
  • -Dsonar.projectVersion là version mỗi lần quét để xác định được code nào quét thời điểm nào nhé.

Chạy thành công chúng ta được kết quả

Hướng dẫn cài đặt sonarqube cho php năm 2024

Truy cập trên Sonarqube server và thấy được thông tin quét code đã có

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chúng ta có thể thấy được nhanh luôn:

  • Số bug hiện có
  • Số Vulnerabilites (lỗi bảo mật)
  • Số Code Smells ở đây ý nghĩa là một trong những loại vấn đề kiểm tra chất lượng mã nguồn mà dùng SonarQube sẽ phát hiện và báo cáo Code smells đề cập đến các mẫu hoặc thực hành trong mã nguồn của bạn mà, trong nhiều trường hợp, không gây ra lỗi cụ thể nhưng có thể dẫn đến việc bảo trì mã nguồn khó khăn, hiệu suất kém, và sự phức tạp trong tương lai, Một số ví dụ về code smells bao gồm
    • Long Method (Phương thức quá dài)
    • Complex Conditional (Biểu thức điều kiện phức tạp)
    • Inefficient Code (Mã nguồn không hiệu quả)
    • Inconsistent Formatting (Định dạng không đồng nhất)
  • Duplications tổng số phần trăm code lặp lại.

Và như bạn cũng đã thấy vẫn là Passed vậy chứng tỏ là tiêu chuẩn mặc định của Sonarqube quét cho thấy project trên tuy có những bug cũng vẫn an toàn.

Dùng Sonarqube dự án .NET

Tiếp theo trong dự án .NET bạn hoàn toàn không cần tạo trước project như đã làm với Java ở trên Sonarqube, cụ thể bạn hãy theo dõi

Link gthub: GitHub: This project is a E-Commerce Project. ASP.NET Core 6 + Angular + Onion Architecture

Bạn truy cập server và tiến hành clone dự án về (thư mục /projects chúng ta vừa tạo phía trên nếu như bạn làm rồi)

$ git clone https://github.com/fdeniz07/ETicaretAPI.git

Tiếp theo di chuyển vào bên trong dự án

Tạo một Dockerfile

Tiếp theo bạn tạo một Dockerfile với những thông tin như sau (bạn chỉnh những thông tin:

$ docker run --name sonarqube -dp 80:9000 sonarqube

1,

$ docker run --name sonarqube -dp 80:9000 sonarqube

2,

$ docker run --name sonarqube -dp 80:9000 sonarqube

3,

$ docker run --name sonarqube -dp 80:9000 sonarqube

4,

$ docker run --name sonarqube -dp 80:9000 sonarqube

5)


# FROM base image  
FROM mcr.microsoft.com/dotnet/sdk:6.0 as build
ARG SONAR_PROJECT_KEY=app-netcore  
ARG SONAR_PROJECT_NAME=app-netcore  
ARG SONAR_HOST_URL=http://sonarqube.elroydevops.tech  
ARG SONAR_TOKEN=sqa_ba09eb7b34578253f611e2f0a6f43dcbd9620100  
ARG SONAR_VERSION=V1.0.0
WORKDIR /app
# Install Sonar Scanner, Coverlet and Java (required for Sonar Scanner)  
RUN apt-get update && apt-get install -y openjdk-11-jdk  
RUN dotnet tool install --global dotnet-sonarscanner  
RUN dotnet tool install --global coverlet.console  
ENV PATH="$PATH:/root/.dotnet/tools"
# Start Sonar Scanner  
RUN dotnet sonarscanner begin \  
  /k:"$SONAR_PROJECT_KEY" \  
  /o:"$SONAR_PROJECT_NAME" \  
  /d:sonar.host.url="$SONAR_HOST_URL" \  
  /d:sonar.login="$SONAR_TOKEN" \  
  /d:sonar.cs.opencover.reportsPaths=/coverage.opencover.xml \  
  /v:"$SONAR_VERSION"
# Restore NuGet packages  
COPY . .  
RUN dotnet restore
# Copy the rest of the files over  

# COPY . .
# Build and test the application  
RUN dotnet publish --output /out/  
RUN dotnet test \  
  /p:CollectCoverage=true \  
  /p:CoverletOutputFormat=opencover \  
  /p:CoverletOutput="/coverage"
# End Sonar Scanner  
RUN dotnet sonarscanner end /d:sonar.login="$SONAR_TOKEN"

Sau khi hoàn thành Dockerfile chúng ta tiến hành build Docker image và xóa ngay sau khi Build

docker build -f Dockerfile-sonar -t dotnet-sonarscan --rm .

Thành công được kết quả build dưới đây

Hướng dẫn cài đặt sonarqube cho php năm 2024

Sau đó chúng ta được kết quả trên Sonarqube server tuy nhiên bạn có thể thấy ngay rằng nếu chúng ta không tạo và setup project từ trước thì mặc định chạy sẽ trong trạng thái public

Hướng dẫn cài đặt sonarqube cho php năm 2024

Lúc này bạn đã thao tác User và Group ở bước trên rồi làm tương tự để đảm bảo bảo mật nhé.

Dùng Sonarqube dự án Php

Tiếp theo chúng ta dùng sonar quét dự án Php

Link github: GitHub: Example Laravel Ecommerce API

Bạn truy cập server và tiến hành clone dự án về

$ git clone https://github.com/stanfortonski/laravel-ecommerce-api.git

Tiếp theo di chuyển vào bên trong dự án

$ cd laravel-ecommerce-api/

Tiếp theo để có thể scan được dự án php chúng ta sẽ cần build dự án bạn chạy lệnh (bạn chỉnh những thông tin:

$ docker run --name sonarqube -dp 80:9000 sonarqube

1,

$ docker run --name sonarqube -dp 80:9000 sonarqube

2,

$ docker run --name sonarqube -dp 80:9000 sonarqube

3,

$ docker run --name sonarqube -dp 80:9000 sonarqube

4,

$ docker run --name sonarqube -dp 80:9000 sonarqube

5)

docker run --rm --network host -v `pwd`:/app --workdir="/app"  sonarsource/sonar-scanner-cli sonar-scanner -X $SONAR_SCANNER_OPTS -Dsonar.host.url="http://sonarqube.elroydevops.tech" -Dsonar.login="sqa_ba09eb7b34578253f611e2f0a6f43dcbd9620100" -Dsonar.language="php" -Dsonar.php.tests.reportPath=build/phpunit.xml -Dsonar.sources="." -Dsonar.projectKey="ecommerce-api-php" -Dsonar.projectName="ecommerce-api-php" -Dsonar.projectVersion="V1.0.0"

Chạy thành công dự án như sau

Hướng dẫn cài đặt sonarqube cho php năm 2024

Sau đó chúng ta được kết quả trên Sonarqube server tuy nhiên bạn có thể thấy ngay rằng nếu chúng ta không tạo và setup project từ trước thì mặc định chạy sẽ trong trạng thái public

Hướng dẫn cài đặt sonarqube cho php năm 2024

Lúc này bạn đã thao tác User và Group ở bước trên rồi làm tương tự để đảm bảo bảo mật nhé.

Dùng Sonarqube dự án Ruby

Tiếp theo chúng ta dùng sonar quét dự án ruby

Link github: GitHub: Basic Ruby Projects

Bạn truy cập server và tiến hành clone dự án về

$ git clone https://github.com/mitch3lljones/odin-project-basic-ruby-projects.git

Tiếp theo di chuyển vào bên trong dự án

$ cd odin-project-basic-ruby-projects/

Tiếp theo để có thể scan được dự án ruby chúng ta sẽ cần build dự án bạn chạy lệnh (bạn chỉnh những thông tin:

$ docker run --name sonarqube -dp 80:9000 sonarqube

1,

$ docker run --name sonarqube -dp 80:9000 sonarqube

2,

$ docker run --name sonarqube -dp 80:9000 sonarqube

3,

$ docker run --name sonarqube -dp 80:9000 sonarqube

4,

$ docker run --name sonarqube -dp 80:9000 sonarqube

5)

docker run --rm --network host -v `pwd`:/app --workdir="/app"  sonarsource/sonar-scanner-cli sonar-scanner -X $SONAR_SCANNER_OPTS -Dsonar.host.url="http://sonarqube.elroydevops.tech" -Dsonar.login="sqa_ba09eb7b34578253f611e2f0a6f43dcbd9620100" -Dsonar.sources="." -Dsonar.projectKey="odin-project-ruby" -Dsonar.projectName="odin-project-ruby" -Dsonar.projectVersion="V1.0.0"

Chạy thành công dự án như sau

Hướng dẫn cài đặt sonarqube cho php năm 2024

Sau đó chúng ta được kết quả trên Sonarqube server tuy nhiên bạn có thể thấy ngay rằng nếu chúng ta không tạo và setup project từ trước thì mặc định chạy sẽ trong trạng thái public

Hướng dẫn cài đặt sonarqube cho php năm 2024

Lúc này bạn đã thao tác User và Group ở bước trên rồi làm tương tự để đảm bảo bảo mật nhé.

Dùng Sonarqube dự án Python

Tiếp theo chúng ta dùng sonar quét dự án python

Link github: GitHub: My Python Examples

Bạn truy cập server và tiến hành clone dự án về

$ git clone https://github.com/geekcomputers/Python.git

Tiếp theo di chuyển vào bên trong dự án

Tiếp theo để có thể scan được dự án ruby chúng ta sẽ cần build dự án bạn chạy lệnh (bạn chỉnh những thông tin:

$ docker run --name sonarqube -dp 80:9000 sonarqube

1,

$ docker run --name sonarqube -dp 80:9000 sonarqube

2,

$ docker run --name sonarqube -dp 80:9000 sonarqube

3,

$ docker run --name sonarqube -dp 80:9000 sonarqube

4,

$ docker run --name sonarqube -dp 80:9000 sonarqube

5)

docker run --rm --network host -v `pwd`:/app --workdir="/app"  sonarsource/sonar-scanner-cli sonar-scanner -X $SONAR_SCANNER_OPTS -Dsonar.host.url="http://sonarqube.elroydevops.tech" -Dsonar.login="sqa_ba09eb7b34578253f611e2f0a6f43dcbd9620100" -Dsonar.sources="." -Dsonar.projectKey="geekcomputers-python" -Dsonar.projectName="geekcomputers-python" -Dsonar.projectVersion="V1.0.0"

Chạy thành công dự án như sau

Hướng dẫn cài đặt sonarqube cho php năm 2024

Sau đó chúng ta được kết quả trên Sonarqube server tuy nhiên bạn có thể thấy ngay rằng nếu chúng ta không tạo và setup project từ trước thì mặc định chạy sẽ trong trạng thái public

Hướng dẫn cài đặt sonarqube cho php năm 2024

Lúc này bạn đã thao tác User và Group ở bước trên rồi làm tương tự để đảm bảo bảo mật nhé.

Dùng Sonarqube cho các ngôn ngữ còn lại (javascript – “reactjs, angular, vuejs”, swift, golang, c++, Kotlin,…)

Đây sẽ là cấu hình mà bạn có thể áp cho hầu hết những ngôn ngữ mà Sonarqube hỗ trợ (bạn chỉnh những thông tin:

$ docker run --name sonarqube -dp 80:9000 sonarqube

1,

$ docker run --name sonarqube -dp 80:9000 sonarqube

2,

$ docker run --name sonarqube -dp 80:9000 sonarqube

3,

$ docker run --name sonarqube -dp 80:9000 sonarqube

4,

$ docker run --name sonarqube -dp 80:9000 sonarqube

5)

Bạn đứng tại vị trí của dự án và thực hiện câu lệnh.

docker run --rm --network host -v `pwd`:/app --workdir="/app"  sonarsource/sonar-scanner-cli sonar-scanner -X $SONAR_SCANNER_OPTS -Dsonar.host.url="<Sonarqube_URL>" -Dsonar.login="<Sonar_Token>" -Dsonar.sources="." -Dsonar.projectKey="<project_name>" -Dsonar.projectName="<project_name>" -Dsonar.projectVersion="V1.0.0"

Một số source code mà bạn có thể tham khảo thử nghiệm:

Swift: GitHub: Data and BIC Validator for German Banks

Golang: GitHub: Go library for accessing the GitHub v3 API

ReactJS: GitHub: real time chat application

C++: GitHub: Nintendo Switch

Sử dụng chi tiết Sonarqube

Mình sẽ chia cụ thể cách sử dụng cho Developer và DevOps (Operator)

Sử dụng Sonarqube cho Developer

Mình sẽ lấy dự án Java ở trên và tiến hành đi sâu phân tích, sử dụng. Nếu bạn không sử dụng Java cũng đừng lo lắng nhé mình sẽ sử dụng thành phần chính và kể cả code nào bạn cũng có thể xem và thực hiện tương tự được như xem lỗi code, sửa code, chỉnh cấu hình,…

Overview

Nhấn chọn vào dự án và xem overview như dưới đây

Hướng dẫn cài đặt sonarqube cho php năm 2024

Issues

Tiếp theo bạn chọn vào tab Issues với những thông tin tùy chọn cụ thể

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chúng ta cũng biết rõ ràng các mức độ của code được chia rõ ràng từng hạng mục dưới đây

Hướng dẫn cài đặt sonarqube cho php năm 2024

Với thông tin dưới đây bạn có thể thấy các thuộc tính Mã Sạch là những đặc điểm mà mã của bạn phải có để được xem xét là Mã Sạch

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tiếp theo trong mỗi vấn đề bạn có thể Assign cho một ai đó nếu bạn là Lead hoặc cũng có thể tự Assign cho chính mình

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tiếp tục đây là trạng thái của vấn đề bạn có thể flow theo

Hướng dẫn cài đặt sonarqube cho php năm 2024

Bạn có thể nhấn vào bug cụ thể để xem được nó đang ở đâu

Hướng dẫn cài đặt sonarqube cho php năm 2024

Cũng như những giải thích cụ thể tại sao cần fix issue đó

Hướng dẫn cài đặt sonarqube cho php năm 2024

Một lưu ý là những issues nào trong trạng thái High (Severity) và Critical thì chưa đạt tiêu chuẩn và rất cần thiết phải sửa (có thể hiểu đơn giản là trạng thái Critical thì hầu hết bắt buộc phải fix)

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tiếp theo Developer có thể sử dụng công cụ Sonarlint một extension có thể cài đặt trên các công cụ lập trình như visual studio, intellij,… có thể cover được những lỗi hiển thị như trên Sonarqube giúp các Developer tránh được ngay những lỗi code nguy hiểm.

Chi tiết xem tại: Linter IDE Tool & Real-Time Software for Code with SonarLint | Sonar (sonarsource.com)

Hướng dẫn cài đặt sonarqube cho php năm 2024

Dùng Sonarqube cho DevOps

Tiếp theo không hẳn như Developer phải hiểu rõ về code để fix DevOps cần cấu hình những nguyên tắc để đảm bảo việc scan code được bảo mật, clean hơn trước khi lên production

Rules

Như bạn có thể thấy Sonarqube đã cung cấp chúng ta rất nhiều rules xịn xò để quét code thật tối ưu như dưới đây

Hướng dẫn cài đặt sonarqube cho php năm 2024

Bạn có thể xem các rules cụ thể như dưới đây

Hướng dẫn cài đặt sonarqube cho php năm 2024

Quality profile

Quality profile là một tập hợp các quy tắc kiểm tra chất lượng mã nguồn được áp dụng cho một dự án hoặc một module cụ thể. Mỗi quality profile định nghĩa các quy tắc kiểm tra chất lượng cụ thể mà mã nguồn cần tuân thủ để đảm bảo rằng mã đó đáp ứng các tiêu chuẩn chất lượng.

Các điểm quan trọng liên quan đến Quality Profile trong SonarQube bao gồm:

  • Mục tiêu đánh giá chất lượng mã nguồn: Quality Profile giúp đánh giá chất lượng mã nguồn dự án bằng cách kiểm tra mã nguồn theo các tiêu chuẩn, quy tắc và mẫu mã cụ thể. Điều này giúp tìm ra các vấn đề tiềm ẩn, lỗi và sự vi phạm các nguyên tắc lập trình.
  • Quản lý các quy tắc kiểm tra: Quality Profile cho phép bạn tùy chỉnh quy tắc kiểm tra được áp dụng cho dự án của bạn. Bạn có thể thêm, sửa đổi hoặc loại bỏ các quy tắc theo nhu cầu cụ thể của dự án.
  • Xác định tiêu chuẩn chất lượng: Bạn có thể xác định các nguyên tắc, tiêu chuẩn và chuẩn mà mã nguồn cần tuân thủ. Quality Profile giúp bạn thiết lập những tiêu chuẩn này và theo dõi tuân thủ chúng.
  • Quản lý nhiều Profile: Bạn có thể tạo nhiều Quality Profile để áp dụng cho các phần khác nhau của dự án hoặc cho các loại ứng dụng khác nhau.
  • Liên kết với quá trình tích hợp liên tục (CI/CD): Quality Profile có thể tích hợp vào quá trình CI/CD của bạn để tự động kiểm tra chất lượng mã nguồn và tạo báo cáo.

Quality Gates

Quality Gate trong dùng SonarQube là một cơ chế để đảm bảo chất lượng mã nguồn trong quá trình phát triển phần mềm. Nó là một tập hợp các quy tắc và tiêu chí mà mã nguồn cần tuân thủ để được coi là chất lượng và an toàn. Quality Gate được sử dụng để kiểm tra xem mã nguồn hiện tại có đáp ứng các yêu cầu chất lượng cụ thể hay không.

Quality Gate thường bao gồm các yêu cầu về các chỉ số chất lượng mã nguồn như sự xuất hiện của lỗi, cảnh báo, mã lặp, bao phủ kiểm thử, v.v. Nếu mã nguồn không đáp ứng các yêu cầu này, Quality Gate sẽ không được vượt qua và mã nguồn sẽ bị từ chối hoặc gắn mác là không an toàn.

Cách sử dụng Quality Gate trong SonarQube thường như sau:

  • Xác định các yêu cầu cụ thể cho Quality Gate của dự án của bạn. Điều này có thể dựa trên các tiêu chuẩn như MISRA, OWASP, hoặc các quy tắc và tiêu chí tùy chỉnh của dự án của bạn.
  • Cài đặt và cấu hình dùng SonarQube cho dự án của bạn, bao gồm việc xác định các luật và tiêu chí chất lượng.
  • Chạy kiểm tra mã nguồn bằng SonarQube và kiểm tra xem mã của bạn có đáp ứng các yêu cầu của Quality Gate hay không.
  • Nếu mã không đáp ứng các yêu cầu, bạn cần sửa lỗi hoặc cải thiện chất lượng mã nguồn cho đến khi nó vượt qua Quality Gate.
  • Quality Gate có thể được kích hoạt tự động sau mỗi lần kiểm tra mã hoặc có thể được kích hoạt thủ công bởi người quản lý dự án.

Đây là thông số mặc định

Hướng dẫn cài đặt sonarqube cho php năm 2024

Để tạo ra cơ chế mới bạn nhấn chọn vào Copy

Hướng dẫn cài đặt sonarqube cho php năm 2024

Nhập tên Quality Gate mới

Hướng dẫn cài đặt sonarqube cho php năm 2024

Bạn có thể tùy chỉnh để kiểm tra chất lượng code khắt khe hơn như dưới đây như Coverage 90% và Duplicated Lines lớn hơn 1%

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chúng ta sẽ tiến hành sửa thêm một số cơ chế nữa như sau chọn vào Add Condition

Hướng dẫn cài đặt sonarqube cho php năm 2024

Giới hạn số Dulicated Blocks

Hướng dẫn cài đặt sonarqube cho php năm 2024

Thêm Line Coverage

Hướng dẫn cài đặt sonarqube cho php năm 2024

Áp dụng vào dự án cụ thể như dưới đây

Hướng dẫn cài đặt sonarqube cho php năm 2024

Chúng ta tiến hành chạy sonar scan lại và đã fail vì những cơ chế khắt khe hơn mà chúng ta đã thiết lập

Hướng dẫn cài đặt sonarqube cho php năm 2024

Tích hợp Sonarqube cho Gitlab CI/CD

Hẳn là những bài CI/CD của mình đã rất chi tiết rồi bạn có thể xem tại CI/CD – elroydevops

Hướng dẫn cài đặt sonarqube cho php năm 2024

Nên mình sẽ cung cấp cho bạn file cấu hình .gitlab-ci.yml để bạn có thể tích hợp vào trong dự án của bạn với nội dung sau

$ docker run --name sonarqube -dp 80:9000 sonarqube

0

Những biến bạn sẽ lưu trong Settings -> CI/CD -> Variable nhé

Vậy là mình đã hướng dẫn xong cách sử dùng Sonarqube, cũng tiếp tục là bài viết rất tâm huyết, chi tiết của mình mong rằng sẽ giúp ích được nhiều cho những bạn chưa có kinh nghiệm, cũng như đóng góp cho cộng đồng những bài hướng dẫn cụ thể, thực tế.

Bạn có thể liên hệ với mình nếu có vấn đề gì nhé. Mình sẽ làm nhiều hướng dẫn hơn về các kỹ năng các tool khác để giúp bạn tối ưu được những tác vụ cũng như tiết kiệm những chi phí khi phát triển phần mềm. Thanks.