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:
- Một server Ubuntu 18.04 có bộ nhớ 3GB trở lên được cài đặt theo Cài đặt server ban đầu này với Ubuntu 18.04 , 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 bảo mật Nginx với Let's Encrypt trên Ubuntu 18.04 .
- 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
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:
... 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 ...
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 .
... 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:
[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:
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 :
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:
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 .
Đế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:
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:
Đế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:
# 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.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:
# 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.
Các tin liên quan
Cách cài đặt và bảo mật Memcached trên Ubuntu 18.042019-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