วิธีติดตั้ง Sonarqube ตรวจสอบคุณภาพ Code บน Local เพื่อไม่ต้องรอ Pipeline วิ่งอีกต่อไป!!(อัพเดท)
sonarqube คือเครื่องมือตรวจสอบคุณภาพของ Software ที่โปรแกรมเมอร์พัฒนาขึ้นมา เพื่อทำให้ Source Code ที่เขียน มีคุณภาพหรืออย่างน้อยก็ได้ตามมาตรฐานที่มันควรจะเป็นและสามารถกำหนดกฏมาตรฐานของโค้ดขึ้นมาเพิ่มเติมได้
ความสามารถของ SonarQube หลักๆ มีดังนี้
- ตรวจหาข้อผิดพลาด (Bugs) ใน Source Code
- ช่วยค้นหาพวก Source Code ที่แย่ๆ ซับซ้อน มีกลิ่นตุๆว่าจะเป็นปัญหาในอนาคต (Code Smells)
- ช่วยค้นหาช่องโหว่ต่างๆ ที่เป็นข้อผิดพลาดหรือปัญหาด้านความปลอดภัย (Vulnerabilities)
- กำหนดค่าของคุณภาพที่จะให้ผ่านได้ (Quality Gate) เช่น ต้องมี Code Coverage 70%
- ทำงานร่วมกับ Automation Tools เช่น Jenkins เพื่อทำ Continueus Integration ได้ (Continuous Code Quality)
- รองรับการตรวจสอบภาษาได้มากกว่า 20 ภาษา เช่น Java, PHP, C#, Python, Swift, C/C++, Javascript ฯลฯ
- และ Software เป็นแบบ Open Source ฟรี !!
วิธีติดตั้ง SonarQube Server
ขั้นแรกเราต้องทำการติดตั้ง SonarQube Server ที่เอาไว้สำหรับวิเคราะห์โค้ดที่เราต้องการก่อน
docker pull sonarqubedocker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
หลังจากนั้นให้เราเข้าไปที่ http://localhost:9000/
จะพบว่ามี หน้าแรกของ Sonarqube ให้ล็อกอินครับ
ให้กรอก
username : admin
password : admin
ตามภาพครับ
เมื่อล็อกอินเสร็จ ตัวระบบ SonarQube version 9.0.0.45539 จะให้ตั้งรหัสผ่านใหม่นะครับ
เมื่ออัพเดทรหัสผ่านเสร็จแล้วจะพบกับ Dashboard ที่จะเก็บผลการทดสอบและแสดงผลการผ่านเกณฑ์ที่ตั้งค่าไว้ครับ ส่วนด้านล่างของหน้าจอ จะสามารถ import project จากที่ต่างๆนำมาไว้ที่ Sonarqube ของเราได้
สร้าง Quality Gates เพื่อให้ตามมาตรฐาน NTBX ของเรา
ก่อนอื่นเราต้องมากำหนดมาตรฐานตามกำหนดของ NTBX ก่อนนะครับ เพื่อจะได้เป็นไปตามกำหนดเพื่อจะเช็คว่าก่อนที่จะ Merge โค้ดขึ้น gitlab โค้ดของเราผ่านมาตรฐาน NTBX ไหม โดยจะไม่ต้องไปเปลือง Pipeline และต้องรอว่า Sonarqube จะผ่านให้เราไหม ?
โดยเข้าไปที่เมนู Quaility Gates ครับ
ให้เราทำการสร้าง Quality Gates โดยการกดปุ่ม Create ได้เลย
เมื่อเรากรอกชื่อ Quality Gate เสร็จแล้ว หน้าตาจะเป็นแบบนี้ครับ
ให้เราเริ่ม Add Condition โดยจะมีปุ่ม Radio Button ให้เราเลือกอยู่ 2 อัน
- On New Code คือเมื่อเรากด Run Analyze ตัว Sonarqube จะทำการเทียบโค้ดใหม่ที่เพิ่มขึ้นมาจากโค้ดที่มีทั้งหมด จะทำให้โค้ดของเราที่เปลี่ยนแปลงไปทุกครั้งจะถูกนับเป็น New Code
- On Overall Code คือโค้ดทั้งหมดในโปรเจ็ค
หลังจากนั้นให้เลือก Quality Gate fails when ตามที่ NTBX กำหนดมา
โดยมาตรฐาน NTBX ปัจจุบัน 06/2021 จะเป็นเงื่อนไขดังนี้
หลังจากเพิ่ม Quality ตามกำหนดเสร็จให้กด Set as Default ได้เลย เป็นอันเสร็จสิ้น
สร้างโปรเจ็คเพื่อ Analyze โค้ด
ให้กลับมาหน้าแรกแล้วให้เราเลือกแบบ Manually เพื่อเริ่มต้นการสร้าง
- ทำการสร้าง Project ขึ้น โดยกดที่ปุ่ม Create new project และใส่ Project Key เป็นชื่อโปรเจ็คเราครับ หลังจากนั้นให้กด Set up
2.ให้เราเลือกแบบ Locally นะครับ ส่วนอื่นจะเป็นเลือกเพื่อเชื่อมต่อ pipeline ครับ
3.เมื่อสร้างชื่อ Project แล้ว เราต้องสร้าง token เพื่อที่จะใช้ในการเข้าถึง Sonarqube เพื่ออัพโหลดผลการ scan ขึ้นมา โดยจะกดปุ่ม Generate ไปเลยก็ได้ หรือจะเขียน phase บางอย่างเพื่อให้เอาไปสร้าง token ก็ได้
4. เมื่อเราได้ token มาแล้ว ให้เก็บเอาไว้ก่อน จากนั้นเลือกประเภท Project ที่ต้องการ ตัว SonarQube จะทำ sample script มาให้ครับ
เลือกติดตั้ง SonarQube ตามโปรเจ็คที่เราใช้ได้เลย
Javascipt
หากใช้ Npm ใช้คำสั่ง
npm install -D sonarqube-scanner
หากใช้ Yarn ใช้คำสั่ง
yarn add -dev sonarqube-scanner
หลังจากนั้น สร้างไฟล์ sonar-project.js ที่ root folder
ใส่ scripts ใน sonarqube-project.js
const scanner = require('sonarqube-scanner')scanner({serverUrl: 'http://localhost:9000',token: 'c439b7b2853d7fa580ed774acfc6479a20f095b7',options: {'sonar.projectName': 'phantomlancer','sonar.projectDescription': 'branch expansion system','sonar.sources': 'src'}},() => process.exit())
และเพิ่ม scripts ใน package.json
“scripts”: {…“sonar”: “node sonar-project.js”},
เมื่อเสร็จขั้นตอนก็สามารถใช้คำสั่ง
npm run sonar
เพื่อ scan Quality ของ Code
C#
เราต้องติดตั้ง dotnet-sonarscanner ก่อน โดยสามารถใช้คำสั่งนี้ได้เลย (สามารถดูรายละเอียดเพิ่มเติมได้ที่ SonarScanner for MSBuild
dotnet tool install -global dotnet-sonarscanner -version 4.6.2
การ Scan Code สามารถใช้คำสั่งนี้ได้เลย
SonarScanner.MSBuild.exe begin /k:"Test" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="2ce409ce9fd3f6d1a3b653feb9c63fdd8a76ef5a"
MsBuild.exe /t:Rebuild
SonarScanner.MSBuild.exe end /d:sonar.login="2ce409ce9fd3f6d1a3b653feb9c63fdd8a76ef5a"$ dotnet build-server shutdown$ dotnet sonarscanner begin /k:"test" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="2ce409ce9fd3f6d1a3b653feb9c63fdd8a76ef5a"
/d:sonar.language="cs"
$ dotnet build test.sln
$ dotnet sonarscanner end /d:sonar.login="2ce409ce9fd3f6d1a3b653feb9c63fdd8a76ef5a"
Java
เราต้องติดตั้ง Jacoco ก่อนครับ เพื่อออก Coverage Reports ได้
รายละเอียดเพิ่มเติมได้ที่ Jacoco With Maven
Maven
Pom.xml
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.7.201606060606</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
การ Scan Code สามารถใช้คำสั่งนี้ได้เลย
mvn sonar:sonar \-Dsonar.projectKey=Test\-Dsonar.host.url=http://localhost:9000 \-Dsonar.login=2f4cc817f08e046c5916fba44d6b293198c3f689 \-Dsonar.jacoco.reportPaths=target/jacoco.exec
Gradle
build.gradle
plugins {
id "org.sonarqube" version "2.7"
}
การ Scan Code
./gradlew sonarqube \
-Dsonar.projectKey=Test \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=2ce409ce9fd3f6d1a3b653feb9c63fdd8a76ef5a
หากเป็นภาษาอื่นๆ (JS,TS,Go,Python,PHP,…)
Windows
- ดาวน์โหลดไฟล์ SonarqubeScanner มาครับ คลิ้กตรงนี้ Downloadได้เลย
2.ให้แตกไฟล์ sonar-scanner-cli-x.x.x-windows.zip
3.เมื่อแตกไฟล์ออกมาแล้วจะมี Folder ที่ชื่อ bin,conf,jre,lib อยู่ครับ
4.ให้เข้าไปยัง System Properties แท๊บ Advance ครับ
หากหาไม่เจอสามารถค้นหาได้ที่มุม Start
หลังจากนั้นให้ทำการคลิ้กที่ Environment Variables ครับ
5.หลังจากเปิด Environment Variables ให้เลือกที่ Path แล้วคลิ้กที่ Edit…
6.ให้กด Browse แล้วไปยังโฟลเดอร์ Sonarqube-cli ที่แตกไฟล์มาครับ
แล้วให้เลือกโฟลเดอร์ bin แล้วกด OK เป็นอันเรียบร้อย
หลังจากนี้สามารถใช้แค่คำสั่งที่ Power Shell ในโฟลเดอร์ Project ของตัวเองได้เลย
sonar-scanner.bat -D"sonar.projectKey=test1(ชื่อโปรเจ็ค)"
-D"sonar.sources=."
-D"sonar.host.url=http://localhost:9000" -D"sonar.login=a1602d512413dcbfb27c2fbf3f6d26943c5523ce(Token ตอน Generate )"
หรือ Copy ที่ Sonarqube ให้มา
เมื่อเสร็จแล้วหน้าตาจะประมาณนี้
สามารถเข้าไปดูที่ http://localhost:9000/projects ได้เลย
เป็นอันเรียบร้อยครับ