kiến thức DevOps thực tế và chi tiết

elroydevops DevOps thực tế và chi tiết từ doanh nghiệp

Cách dùng Sonarqube (sẵn mẫu cấu hình sử dụng mọi dự án)

Chúng ta đều biết code là thành phần cốt lõi của dự án, vậy làm sao để bạn biết được rằng code “Chất lượng” hay “Tệ” thế nào? dùng Sonarqube sẽ giúp bạn làm được điều đó.

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à gì?

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)

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

elroydevops.tech
$ 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

elroydevops.tech
$ sh docker-install.sh

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

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

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

Chọn vào Security -> Users

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

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

Đ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

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

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

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

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

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

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

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.

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

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

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

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

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)

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

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

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

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ề

elroydevops.tech
$ 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

elroydevops.tech
$ cd ShoppingCart/

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: SONAR_PROJECT_KEY, SONAR_PROJECT_NAME, SONAR_HOST_URL, SONAR_TOKEN, SONAR_VERSION)

docker run -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

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

docker run -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à sonarsource/sonar-scanner-cli 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ả

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

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)

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

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

elroydevops.tech
$ cd ETicaretAPI/

Tạo một Dockerfile

elroydevops.tech
$ nano Dockerfile-sonar

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: SONAR_PROJECT_KEY, SONAR_PROJECT_NAME, SONAR_HOST_URL, SONAR_TOKEN, SONAR_VERSION)

#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

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

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ề

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

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

elroydevops.tech
$ 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: SONAR_PROJECT_KEY, SONAR_PROJECT_NAME, SONAR_HOST_URL, SONAR_TOKEN, SONAR_VERSION)

docker run -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

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

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ề

elroydevops.tech
$ 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

elroydevops.tech
$ 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: SONAR_PROJECT_KEY, SONAR_PROJECT_NAME, SONAR_HOST_URL, SONAR_TOKEN, SONAR_VERSION)

docker run -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

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

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ề

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

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

elroydevops.tech
$ cd Python/

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: SONAR_PROJECT_KEY, SONAR_PROJECT_NAME, SONAR_HOST_URL, SONAR_TOKEN, SONAR_VERSION)

docker run -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

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

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: SONAR_PROJECT_KEY, SONAR_PROJECT_NAME, SONAR_HOST_URL, SONAR_TOKEN, SONAR_VERSION)

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

docker run -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

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ể

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

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

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

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

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

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

Một lưu ý là những issues nào trong trạng thái High (Severity)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)

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)

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

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

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

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

Nhập tên Quality Gate mới

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%

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

Giới hạn số Dulicated Blocks

Thêm Line Coverage

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

dùng sonarqube

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

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

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

stages:
  - Sonar-scan

Sonar-scan:
  stage: Sonar-scan
  variables:
      GIT_STRATEGY: none
  tags:
    - <runner_tag>
  script:
  - DOCKER_BUILDKIT=1 docker run -v `pwd`:/app --workdir="/app"  sonarsource/sonar-scanner-cli sonar-scanner -X $SONAR_SCANNER_OPTS -Dsonar.host.url="$SONAR_HOST_URL" -Dsonar.login="$SONAR_TOKEN" -Dsonar.sources="." -Dsonar.projectKey="${CI_PROJECT_NAME}" -Dsonar.projectName="$CI_PROJECT_NAME" -Dsonar.projectVersion="${CI_COMMIT_TAG}_${CI_COMMIT_SHORT_SHA}";

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.

 

Mọi thắc mắc bạn có thể liên hệ:

Email: [email protected]

Telegram: @Elroy26

Leave a comment

Your email address will not be published. Required fields are marked *