Thứ sáu, 11/01/2019 | 00:00 GMT+7

Cách đảm bảo chất lượng mã bằng SonarQube trên Ubuntu 18.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 .

Bản thân công cụ SonarQube được làm từ hai phần: một máy quét, là một ứng dụng sẽ được cài đặt local trên máy của nhà phát triển để thực hiện phân tích mã và một server tập trung để lưu trữ 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 mã ví dụ bằng máy quét 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

Bạn cần hoàn thành một vài bước để chuẩn bị cho quá trình cài đặt SonarQube. Vì SonarQube là một ứng dụng Java sẽ chạy như một dịch vụ và vì bạn không muốn chạy các dịch vụ với quyền là user gốc , bạn sẽ tạo một user hệ thống khác đặc biệt để chạy các dịch vụ SonarQube. Sau đó, bạn sẽ tạo folder cài đặt và đặt quyền của nó, sau đó bạn sẽ tạo database MySQL và user cho SonarQube.

Đầu tiên, tạo user sonarqube :

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

User này sẽ chỉ được sử dụng để chạy dịch vụ SonarQube, do đó, điều này tạo ra 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 để cài đặt SonarQube vào:

  • sudo mkdir /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 cho phép bạn extract các file đó.

  • sudo apt-get install unzip

Tiếp theo, bạn sẽ 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 :

  • sudo mysql -u root -p

Sau đó, tạo database SonarQube:

  • CREATE DATABASE sonarqube;

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';

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;

Đến đây bạn đã có user và folder tại chỗ, bạn sẽ download và cài đặt server 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.5 Community Edition. Có nhiều version và version của SonarQube để download trên trang, nhưng trong hướng dẫn cụ thể này, ta sẽ sử dụng SonarQube 7.5 Community Edition.

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

  • sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip

Extract file :

  • sudo unzip sonarqube-7.5.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.5.zip

Cuối cùng, cập nhật các quyền để user sonarqube sẽ sở hữu các file này và có thể đọc và ghi các file trong folder này:

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

Bây giờ tất cả các file đã có sẵn, ta có thể chuyển sang cấu hình server 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 back-end 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.5/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.5/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.5/conf/sonar.properties
     ...      sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false      ...  

Vì version này của SonarQube sẽ được chạy như một server chuyên dụng, ta có thể thêm tùy chọn -server để kích hoạt chế độ server của SonarQube, điều này sẽ giúp tối đa hóa hiệu suất.

Nginx sẽ xử lý giao tiếp giữa các client SonarQube và server của bạn, vì vậy bạn sẽ yêu cầu SonarQube chỉ lắng nghe địa chỉ local .

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

Khi bạn đã cập nhật các giá trị đó, hãy lưu file .

Tiếp theo, bạn sẽ sử dụng Systemd để cấu hình SonarQube chạy như một dịch vụ để nó sẽ 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:

/etc/systemd/system/sonarqube.service
 [Unit] Description=SonarQube service After=syslog.target network.target  [Service] Type=forking  ExecStart=/opt/sonarqube/sonarqube-7.5/bin/linux-x86-64/sonar.sh start ExecStop=/opt/sonarqube/sonarqube-7.5/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 Sat 2019-01-05 19:00:00 UTC; 2s ago 

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

Đến đây, server SonarQube sẽ mất vài phút để khởi tạo hoàn toàn. Bạn có thể kiểm tra xem server đã khởi động hay chưa bằng cách truy vấn cổng HTTP:

  • curl http://127.0.0.1:9000

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 sẽ đị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. Điều này sẽ đảm bảo tất cả giao tiếp giữa các client và server SonarQube đượ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 bạn cầ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. Nếu được yêu cầu bắt đầu hướng dẫn, chỉ cần nhấp vào Bỏ qua hướng dẫn này để truy cập trang tổng quan.

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 hàng account “ Administrator ”, 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ị , hãy bấm vào Cấu hình , sau đó đến Cài đặt chung , rồi đến Bảo mật ở ngăn bên trái. Lật lựa chọn có nội dung Buộc xác thực user để cài đặt xác thực , sau đó nhấp vào nút Lưu bên dưới lựa chọn .

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

Đến đây bạn đã hoàn tất việc cài đặt server , hãy cài đặt máy quét SonarQube.

Bước 6 - Cài đặt máy 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, bạn 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:

  • sudo mkdir /opt/sonarscanner

Sau đó thay đổi vào folder đó:

  • cd /opt/sonarscanner

Download trình quét SonarQube cho Linux bằng wget :

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

Tiếp theo, extract máy quét:

  • sudo unzip sonar-scanner-cli-3.2.0.1227-linux.zip

Sau đó xóa file lưu trữ zip:

  • sudo rm sonar-scanner-cli-3.2.0.1227-linux.zip

Sau đó, bạn 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 bạn. Mở file cấu hình để chỉnh sửa:

  • sudo nano sonar-scanner-3.2.0.1227-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 dòng 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.2.0.1227-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.2.0.1227-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.2.0.1227-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 thử nghiệm trên các dự án mẫu SonarQube

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

Việc này sẽ tốn một lúc. 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: 14.128 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ INFO: Total time: 21.776s INFO: Final Memory: 17M/130M 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 server và máy quét SonarQube hoạt động với mã kiểm tra, bạn có thể sử dụng SonarQube để phân tích mã của riêng mình.

Bước 8 - Chạy quét mã của bạn

Để SonarQube phân tích mã của bạn , hãy bắt đầu bằng cách chuyển dự án của bạn đến server hoặc làm theo 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 sẽ 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 các file mã. Lưu ý điều này có liên quan đến folder chứa file cấu hình. Đặ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: ------------------------------------------------------------------------ 

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 có thể dễ dàng 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 và bảo mật Memcached trên Ubuntu 18.04
2019-01-04
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04
2018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04
2018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 18.04
2018-11-06
Cách triển khai ứng dụng Symfony 4 để sản xuất với LEMP trên Ubuntu 18.04
2018-10-18
Cách cài đặt và sử dụng Composer trên Ubuntu 18.04
2018-10-16
Làm thế nào để kiểm tra các vai trò không thể phục hồi với Molecule trên Ubuntu 18.04
2018-10-02
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04 [Quickstart]
2018-07-16
Cách bật SFTP mà không cần quyền truy cập Shell trên Ubuntu 18.04
2018-07-13
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04
2018-07-13