Thứ năm, 14/06/2018 | 00:00 GMT+7

Cách đảm bảo chất lượng mã bằng SonarQube trên Ubuntu 16.04

Chất lượng mã là một ước tính về mức độ hữu ích và có thể bảo trì của một đoạn mã cụ thể. Mã chất lượng sẽ làm cho nhiệm vụ duy trì và mở rộng ứng dụng của bạn dễ dàng hơn. Nó giúp đảm bảo ít lỗi hơn được đưa ra khi bạn áp dụng các thay đổi cần thiết trong tương lai.

SonarQube là một công cụ open-souce hỗ trợ phân tích và báo cáo chất lượng mã. Nó quét mã nguồn của bạn để tìm các lỗi tiềm ẩn, lỗ hổng và các vấn đề về khả năng bảo trì, sau đó trình bày kết quả trong một báo cáo cho phép bạn xác định các vấn đề tiềm ẩn trong ứng dụng của bạn .

Công cụ SonarQube bao gồm hai ứng dụng con: một công cụ phân tích, được cài đặt local trên máy của nhà phát triển và một server tập trung để lưu trữ profile và báo cáo. Một version server SonarQube duy nhất có thể hỗ trợ nhiều máy quét, cho phép bạn tập trung các báo cáo chất lượng mã từ nhiều nhà phát triển ở một nơi duy nhất.

Trong hướng dẫn này, bạn sẽ triển khai một server và máy quét SonarQube để phân tích mã của bạn và tạo báo cáo chất lượng mã. Sau đó, bạn sẽ thực hiện kiểm tra trên máy của bạn bằng cách quét nó bằng công cụ SonarQube.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:

Bước 1 - Chuẩn bị cài đặt

Có một số bước ta cần thực hiện trước khi cài đặt SonarQube. Vì SonarQube là một ứng dụng Java sẽ chạy như một dịch vụ và bởi vì việc chạy các dịch vụ với quyền user root chắc chắn không phải là lý tưởng, ta sẽ tạo một user hệ thống khác đặc biệt để chạy các dịch vụ SonarQube. Sau đó, ta sẽ tạo folder cài đặt và đặt quyền của nó, sau đó ta sẽ tạo database MySQL và user cho SonarQube.

Đầu tiên, hãy tạo một user sonarqube :

  • sudo adduser --system --no-create-home --group --disabled-login sonarqube

Ta sẽ chỉ sử dụng user này để chạy dịch vụ SonarQube, vì vậy ta tạo một user hệ thống không thể đăng nhập trực tiếp vào server .

Tiếp theo, tạo folder chứa các file SonarQube:

  • sudo mkdir /opt/sonarqube

Khi folder được tạo, hãy cập nhật các quyền để user sonarqube có thể đọc và ghi các file trong folder này:

  • sudo chown -R sonarqube:sonarqube /opt/sonarqube

Các bản phát hành SonarQube được đóng gói ở định dạng nén, vì vậy hãy cài đặt tiện ích unzip bằng trình quản lý gói của bạn để bạn có thể extract các file phân phối:

  • sudo apt-get install unzip

Tiếp theo, ta cần tạo database và thông tin đăng nhập mà SonarQube sẽ sử dụng. Đăng nhập vào server MySQL với quyền là user gốc :

  • mysql -u root -p

Sau đó, tạo database SonarQube:

  • CREATE DATABASE sonarqube;
  • EXIT;

Bây giờ tạo thông tin xác thực mà SonarQube sẽ sử dụng để truy cập database .

  • CREATE USER sonarqube@'localhost' IDENTIFIED BY 'some_secure_password';
  • GRANT ALL ON sonarqube.* to sonarqube@'localhost';

Sau đó, cấp quyền để user mới được tạo có thể áp dụng các thay đổi đối với database SonarQube:

  • GRANT ALL ON sonarqube.* to sonarqube@'localhost';

Sau đó, áp dụng các thay đổi quyền và thoát khỏi console MySQL:

  • FLUSH PRIVILEGES;
  • EXIT;

Bây giờ ta đã có user và folder , hãy download và cài đặt chính SonarQube.

Bước 2 - Download và cài đặt SonarQube

Bắt đầu bằng cách thay đổi folder làm việc hiện tại thành folder cài đặt SonarQube:

  • cd /opt/sonarqube

Sau đó, truy cập trang download SonarQube và lấy liên kết download SonarQube 7.0. Có hai version SonarQube có sẵn để download trên trang, nhưng trong hướng dẫn cụ thể này, ta sẽ sử dụng SonarQube 7.0.

Sau khi nhận được liên kết, hãy download file :

  • sudo wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.0.zip

Sau đó extract file :

  • sudo unzip sonarqube-7.0.zip

Sau khi các file extract , hãy xóa file zip đã download vì bạn không cần nó nữa:

  • sudo rm sonarqube-7.0.zip

Bây giờ tất cả các file đã sẵn sàng, đã đến lúc cấu hình SonarQube.

Bước 3 - Cấu hình Server SonarQube

Ta cần chỉnh sửa một số thứ trong file cấu hình SonarQube. Cụ thể:

  • Ta cần chỉ định tên user và password mà server SonarQube sẽ sử dụng cho kết nối database .
  • Ta cũng cần yêu cầu SonarQube sử dụng MySQL cho database backend của ta .
  • Ta sẽ yêu cầu SonarQube chạy ở chế độ server , điều này sẽ mang lại hiệu suất được cải thiện.
  • Ta cũng sẽ yêu cầu SonarQube chỉ nghe trên địa chỉ mạng local vì ta sẽ sử dụng Reverse Proxy .

Bắt đầu bằng cách mở file cấu hình SonarQube:

  • sudo nano sonarqube-7.0/conf/sonar.properties

Đầu tiên, thay đổi tên user và password mà SonarQube sẽ sử dụng để truy cập database thành tên user và password bạn đã tạo cho MySQL:

/opt/sonarqube/sonarqube-7.0/conf/sonar.properties
     ...      sonar.jdbc.username=sonarqube     sonar.jdbc.password=some_secure_password      ...  

Tiếp theo, yêu cầu SonarQube sử dụng MySQL làm trình điều khiển database :

/opt/sonarqube/sonarqube-7.0/conf/sonar.properties
     ...      sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false      ...  

Cuối cùng, yêu cầu SonarQube chạy ở chế độ server và chỉ lắng nghe địa chỉ local :

/opt/sonarqube/sonarqube-7.0/conf/sonar.properties
     ...      sonar.web.host=127.0.0.1     sonar.web.javaAdditionalOpts=-server  

Khi các trường đó đã được cập nhật, hãy lưu file .

Tiếp theo, ta sẽ cấu hình server SonarQube chạy như một dịch vụ để nó tự động khởi động khi server khởi động lại.

Tạo file dịch vụ:

  • sudo nano /etc/systemd/system/sonarqube.service

Thêm nội dung sau vào file chỉ định cách dịch vụ SonarQube sẽ bắt đầu và dừng lại:

/etc/systemd/system/sonarqube.service
 [Unit] Description=SonarQube service After=syslog.target network.target  [Service] Type=forking  ExecStart=/opt/sonarqube/sonarqube-7.0/bin/linux-x86-64/sonar.sh start ExecStop=/opt/sonarqube/sonarqube-7.0/bin/linux-x86-64/sonar.sh stop  User=sonarqube Group=sonarqube Restart=always  [Install] WantedBy=multi-user.target 

Bạn có thể tìm hiểu thêm về các file đơn vị systemd trong Tìm hiểu Đơn vị Systemd và Tệp Đơn vị .

Đóng và lưu file , sau đó khởi động dịch vụ SonarQube:

  • sudo service sonarqube start

Kiểm tra trạng thái của dịch vụ SonarQube đảm bảo rằng nó đã bắt đầu và đang chạy như mong đợi:

  • service sonarqube status

Nếu dịch vụ đã khởi động thành công, bạn sẽ thấy một dòng có nội dung “Đang hoạt động” tương tự như sau:

● sonarqube.service - SonarQube service    Loaded: loaded (/etc/systemd/system/sonarqube.service; enabled; vendor preset    Active: active (running) since Sun 2018-03-04 01:29:44 UTC; 1 months 14 days 

Tiếp theo, cấu hình dịch vụ SonarQube để tự động khởi động khi server khởi động :

  • sudo systemctl enable sonarqube

Như với hầu hết các ứng dụng Java khác, SonarQube sẽ mất một khoảng thời gian để khởi tạo. Khi quá trình khởi tạo hoàn tất, bạn có thể chuyển sang bước tiếp theo.

Bước 4 - Cấu hình Reverse Proxy

Bây giờ ta đã có server SonarQube đang chạy, đã đến lúc cấu hình Nginx, đây sẽ là Reverse Proxy và trình kết thúc HTTPS cho version SonarQube của ta .

Bắt đầu bằng cách tạo file cấu hình Nginx mới cho trang web:

  • sudo nano /etc/nginx/sites-enabled/sonarqube

Thêm cấu hình này để Nginx có thể định tuyến lưu lượng truy cập đến SonarQube:

/ etc / nginx / sites-enable / sonarqube
 server {     listen 80;     server_name sonarqube.example.com;      location / {         proxy_pass http://127.0.0.1:9000;     } }  

Lưu và đóng file .

Tiếp theo, hãy đảm bảo file cấu hình của bạn không có lỗi cú pháp:

  • sudo nginx -t

Nếu bạn thấy lỗi, hãy sửa chúng và chạy lại sudo nginx -t . Khi không có lỗi, hãy khởi động lại Nginx:

  • sudo service nginx restart

Để kiểm tra nhanh, bây giờ bạn có thể truy cập http:// sonarqube.example.com trong trình duyệt web của bạn . Bạn sẽ được chào đón với giao diện web SonarQube.

Bây giờ, ta sẽ sử dụng Let's Encrypt để tạo certificate HTTPS cho quá trình cài đặt của bạn để dữ liệu sẽ được truyền an toàn giữa server và máy local của bạn. Sử dụng certbot để tạo certificate cho Nginx:

  • sudo certbot --nginx -d sonarqube.example.com

Nếu đây là lần đầu tiên bạn certificate request Let's Encrypt, Certbot sẽ nhắc nhập địa chỉ email của bạn và thỏa thuận EULA. Nhập email của bạn và chấp nhận EULA.

Sau đó, Certbot sẽ hỏi bạn muốn cấu hình cài đặt bảo mật của bạn như thế nào. Chọn tùy chọn để chuyển hướng tất cả các yêu cầu đến HTTPS, đảm bảo mọi yêu cầu được gửi đến server của bạn sẽ được mã hóa.

Bây giờ ta đã hoàn tất việc cài đặt Reverse Proxy , ta có thể chuyển sang bảo mật server SonarQube của bạn .

Bước 5 - Bảo mật SonarQube

SonarQube xuất xưởng với tên user và password administrator mặc định của admin . Mật khẩu mặc định này không an toàn, vì vậy ta sẽ muốn cập nhật nó thành một thứ gì đó an toàn hơn như một phương pháp bảo mật tốt.

Bắt đầu bằng cách truy cập URL cài đặt của bạn và đăng nhập bằng thông tin đăng nhập mặc định.

Sau khi đăng nhập, hãy nhấp vào tab Quản trị , chọn Bảo mật từ danh sách thả xuống, sau đó chọn User :

Tab quản trị  user  SonarQube

Từ đây, nhấp vào bánh răng nhỏ ở bên phải của hàng account "admin" , sau đó nhấp vào “Thay đổi password ”. Đảm bảo thay đổi password thành password dễ nhớ nhưng khó đoán.

Bây giờ, hãy tạo một user bình thường mà bạn có thể sử dụng để tạo các dự án và gửi kết quả phân tích đến server của bạn từ cùng một trang. Nhấp vào nút Tạo user ở trên cùng bên phải của trang:
Hộp thoại  user  mới SonarQube

Sau đó, tạo mã thông báo cho một user cụ thể bằng cách nhấp vào nút trong cột “Mã thông báo” và đặt tên cho mã thông báo này. Bạn cần mã thông báo này sau khi gọi trình quét mã, vì vậy hãy nhớ ghi nó vào một nơi an toàn.

Cuối cùng, bạn có thể nhận thấy rằng version SonarQube được mở rộng ra global và bất kỳ ai cũng có thể xem kết quả phân tích và mã nguồn của bạn.
Cài đặt này rất không an toàn, vì vậy ta sẽ cấu hình SonarQube để chỉ cho phép user đã đăng nhập truy cập vào trang tổng quan. Từ cùng một tab quản trị, nhấp vào Cấu hình , sau đó nhấp vào Bảo mật ở ngăn bên trái. Lật nút trên trang này để yêu cầu xác thực user .

 Lựa chọn  xác thực SonarQube Force

Bây giờ ta đã hoàn tất việc cài đặt server của bạn , hãy cài đặt máy quét.

Bước 6 - Cài đặt trình quét mã

Trình quét mã của SonarQube là một gói riêng biệt mà bạn có thể cài đặt trên một máy khác với máy chạy server SonarQube, chẳng hạn như máy trạm phát triển local của bạn hoặc server phân phối liên tục. Có các gói có sẵn cho Windows, MacOS và Linux mà bạn có thể tìm thấy tại trang web SonarQube

Trong hướng dẫn này, ta sẽ cài đặt trình quét mã trên cùng một server lưu trữ server SonarQube của ta .

Bắt đầu bằng cách tạo một folder cho máy quét và thay đổi vào folder mới:

  • sudo mkdir /opt/sonarscanner
  • cd /opt/sonarscanner

Sau đó download trình quét SonarQube cho Linux bằng wget :

  • sudo wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip

Extract máy quét, sau đó xóa file lưu trữ zip:

  • sudo unzip sonar-scanner-cli-3.0.3.778-linux.zip
  • sudo rm sonar-scanner-cli-3.0.3.778-linux.zip

Sau đó, ta cần sửa đổi một số cài đặt để máy quét hoạt động với cài đặt server của ta . Mở file cấu hình để chỉnh sửa:

  • sudo nano sonar-scanner-3.0.3.778-linux/conf/sonar-scanner.properties

Trước tiên, hãy cho máy quét biết nơi nó sẽ gửi kết quả phân tích mã. Bỏ comment bắt đầu bằng sonar.host.url và đặt nó thành URL của server SonarQube của bạn:

/opt/sonarscanner/sonar-scanner-3.0.3.778-linux/conf/sonar.properties
    sonar.host.url=https://sonarqube.example.com 

Lưu và đóng file . Bây giờ làm cho máy quét có thể thực thi binary :

  • sudo chmod +x sonar-scanner-3.0.3.778-linux/bin/sonar-scanner

Sau đó, tạo một softlink để bạn có thể gọi máy quét mà không cần chỉ định đường dẫn:

  • sudo ln -s /opt/sonarscanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner

Bây giờ máy quét đã được cài đặt , ta đã sẵn sàng chạy lần quét mã đầu tiên của bạn .

Bước 7 - Chạy quét kiểm tra

Nếu bạn chỉ muốn tìm hiểu xung quanh SonarQube để xem nó có thể làm gì, bạn có thể cân nhắc chạy quét thử nghiệm trên các dự án mẫu SonarQube . Đây là các dự án ví dụ được tạo bởi group SonarQube có chứa nhiều vấn đề mà sau đó SonarQube sẽ phát hiện và báo cáo.

Tạo một folder làm việc mới trong folder chính của bạn, sau đó thay đổi thành folder :

  • cd ~
  • mkdir sonar-test && cd sonar-test

Download dự án mẫu:

  • wget https://github.com/SonarSource/sonar-scanning-examples/archive/master.zip

Extract dự án và xóa file lưu trữ:

  • unzip master.zip
  • rm master.zip

Tiếp theo, chuyển sang folder dự án mẫu:

  • cd sonar-scanning-examples-master/sonarqube-scanner

Chạy máy quét, chuyển cho nó mã thông báo bạn đã tạo trước đó:

  • sonar-scanner -D sonar.login=your_token_here

Khi quá trình quét hoàn tất, bạn sẽ thấy thông tin như thế này trên console :

INFO: Task total time: 9.834 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ INFO: Total time: 14.076s INFO: Final Memory: 47M/112M INFO: ------------------------------------------------------------------------ 

Báo cáo của dự án mẫu bây giờ sẽ nằm trên console SonarQube như sau:

 Control panel  SonarQube

Đến đây bạn đã xác nhận cả server và máy quét SonarQube đều hoạt động như mong đợi, bạn có thể đặt SonarQube hoạt động phân tích mã của bạn .

Chuyển dự án của bạn đến server hoặc làm theo các bước trong Bước 6 để cài đặt và cấu hình máy quét SonarQube trên máy trạm của bạn và cấu hình nó để trỏ đến server SonarQube của bạn.

Sau đó, trong folder root của dự án của bạn, hãy tạo file cấu hình SonarQube:

  • nano sonar-project.properties

Bạn sẽ sử dụng file này để cho SonarQube biết một vài điều về dự án của bạn :

Đầu tiên, xác định khóa dự án , là một ID duy nhất cho dự án. Bạn có thể sử dụng bất kỳ thứ gì bạn muốn, nhưng ID này phải là duy nhất cho version SonarQube của bạn:

sonar-project.properties
     # Unique ID for this project     sonar.projectKey=foobar:hello-world      ...  

Sau đó, chỉ định tên và version dự án để SonarQube có thể hiển thị thông tin này trong console :

sonar-project.properties
     ...      sonar.projectName=Hello World Project     sonar.projectVersion=1.0      ...  

Cuối cùng, cho SonarQube biết nơi tìm kiếm các file mã. Lưu ý điều này có liên quan đến folder mà file cấu hình cư trú. Đặt nó vào folder hiện tại:

sonar-project.properties
     # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.     sonar.sources=.  

Đóng và lưu file .

Bạn đã sẵn sàng chạy phân tích chất lượng mã trên mã của riêng mình. Chạy lại sonar-scanner , chuyển nó vào mã thông báo của bạn:

  • sonar-scanner -D sonar.login=your_token_here

Khi quá trình quét hoàn tất, bạn sẽ thấy một màn hình tóm tắt tương tự như sau:

INFO: Task total time: 5.417 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ INFO: Total time: 9.659s INFO: Final Memory: 39M/112M INFO: ------------------------------------------------------------------------ 

Và báo cáo chất lượng mã của dự án bây giờ sẽ nằm trên console SonarQube.

Kết luận

Trong hướng dẫn này, bạn đã cài đặt server và máy quét SonarQube để phân tích chất lượng mã. Đến đây bạn có thể đảm bảo mã của bạn dễ bảo trì và dễ bảo trì bằng cách đơn giản chạy quét - SonarQube sẽ cho bạn biết các vấn đề tiềm ẩn có thể ở đâu!

Từ đây, bạn có thể cần đọc tài liệu SonarQube Scanner để tìm hiểu cách chạy phân tích trên máy phát triển local của bạn hoặc như một phần của quy trình xây dựng của bạn.


Tags:

Các tin liên quan

Cách cài đặt Webmin trên Ubuntu 18.04
2018-05-17
Cách thiết lập chia sẻ Samba cho tổ chức nhỏ trên Ubuntu 16.04
2018-05-11
Cách tự động hóa triển khai Elixir-Phoenix với Distillery và edeliver trên Ubuntu 16.04
2018-05-03
Cách thiết lập khóa SSH trên Ubuntu 18.04
2018-04-27
Cách nâng cấp lên Ubuntu 18.04 Bionic Beaver
2018-04-26
Có gì mới trong Ubuntu 18.04 Bionic Beaver
2018-04-26
Cách cài đặt và cấu hình Ghost trên Ubuntu 16.04
2018-04-13
Cách lưu trữ một trang web với Caddy trên Ubuntu 16.04
2018-04-12
Cách thiết lập khóa SSH trên Ubuntu 16.04
2018-04-12
Cách đồng bộ hóa dữ liệu đã chuyển đổi từ MongoDB sang Elasticsearch với Transporter trên Ubuntu 16.04
2018-04-05