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:
- Một server Ubuntu 16.04 có bộ nhớ 2GB trở lên được cài đặt theo hướng dẫn cài đặt server ban đầu Ubuntu 16.04 này , bao gồm user sudo không phải root và firewall .
- Oracle Java 8 được cài đặt trên server , được cấu hình theo phần Oracle JDK trong hướng dẫn cài đặt Oracle JDK này .
- Nginx và MySQL, được cấu hình theo phần Nginx và MySQL trong hướng dẫn cài đặt LEMP này .
- Certbot (ứng dụng Let's Encrypt), được cấu hình theo Cách cài đặt Let's Encrypt với khối server Nginx trên Ubuntu 16.04 sau đây .
- Tên domain đủ điều kiện và bản ghi A trỏ tới server nơi bạn sẽ cài đặt SonarQube. Nếu bạn đang sử dụng dịch vụ DNS của DigitalOcean, hướng dẫn cài đặt bản ghi DNS này sẽ giúp bạn cài đặt điều đó. Ta sẽ sử dụng
sonarqube.example.com
trong hướng dẫn này.
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:
... 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 :
... 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 :
... 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:
[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:
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 :
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:
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 .
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:
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:
Đế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:
# 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.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:
# 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.
Các tin liên quan
Cách cài đặt Webmin trên Ubuntu 18.042018-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