วิธีติดตั้ง Sonarqube ตรวจสอบคุณภาพ Code บน Local เพื่อไม่ต้องรอ Pipeline วิ่งอีกต่อไป!!(อัพเดท)

pete
ntbx
Published in
5 min readJul 6, 2021

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 ของเราได้

หน้าแรกของ sonarqube

สร้าง Quality Gates เพื่อให้ตามมาตรฐาน NTBX ของเรา

ก่อนอื่นเราต้องมากำหนดมาตรฐานตามกำหนดของ NTBX ก่อนนะครับ เพื่อจะได้เป็นไปตามกำหนดเพื่อจะเช็คว่าก่อนที่จะ Merge โค้ดขึ้น gitlab โค้ดของเราผ่านมาตรฐาน NTBX ไหม โดยจะไม่ต้องไปเปลือง Pipeline และต้องรอว่า Sonarqube จะผ่านให้เราไหม ?

โดยเข้าไปที่เมนู Quaility Gates ครับ

default ของ sonarqube จะเป็นแบบนี้ครับ

ให้เราทำการสร้าง Quality Gates โดยการกดปุ่ม Create ได้เลย

ให้เรากรอกชื่อ Quality Gate (ส่วนของผมจะใช้ชื่อ NTBX)

เมื่อเรากรอกชื่อ Quality Gate เสร็จแล้ว หน้าตาจะเป็นแบบนี้ครับ

ให้เราเริ่ม Add Condition โดยจะมีปุ่ม Radio Button ให้เราเลือกอยู่ 2 อัน

  1. On New Code คือเมื่อเรากด Run Analyze ตัว Sonarqube จะทำการเทียบโค้ดใหม่ที่เพิ่มขึ้นมาจากโค้ดที่มีทั้งหมด จะทำให้โค้ดของเราที่เปลี่ยนแปลงไปทุกครั้งจะถูกนับเป็น New Code
  2. On Overall Code คือโค้ดทั้งหมดในโปรเจ็ค

หลังจากนั้นให้เลือก Quality Gate fails when ตามที่ NTBX กำหนดมา

เมื่อเสร็จให้กด Add Condition แล้วเพิ่มไปเรื่อยๆ

โดยมาตรฐาน NTBX ปัจจุบัน 06/2021 จะเป็นเงื่อนไขดังนี้

หลังจากเพิ่ม Quality ตามกำหนดเสร็จให้กด Set as Default ได้เลย เป็นอันเสร็จสิ้น

สร้างโปรเจ็คเพื่อ Analyze โค้ด

หน้าแรกของ sonarqube

ให้กลับมาหน้าแรกแล้วให้เราเลือกแบบ Manually เพื่อเริ่มต้นการสร้าง

หลังจากกด Create New Project จะมีให้กรอก Project Key
  1. ทำการสร้าง Project ขึ้น โดยกดที่ปุ่ม Create new project และใส่ Project Key เป็นชื่อโปรเจ็คเราครับ หลังจากนั้นให้กด Set up
หลังจากกด setup จะมีให้เลือก analyze repository

2.ให้เราเลือกแบบ Locally นะครับ ส่วนอื่นจะเป็นเลือกเพื่อเชื่อมต่อ pipeline ครับ

จะมีช่องให้ Generate Token หรือจะกรอกเองก็ได้ครับ

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

  1. ดาวน์โหลดไฟล์ SonarqubeScanner มาครับ คลิ้กตรงนี้ Downloadได้เลย

2.ให้แตกไฟล์ sonar-scanner-cli-x.x.x-windows.zip

3.เมื่อแตกไฟล์ออกมาแล้วจะมี Folder ที่ชื่อ bin,conf,jre,lib อยู่ครับ

4.ให้เข้าไปยัง System Properties แท๊บ Advance ครับ

หากหาไม่เจอสามารถค้นหาได้ที่มุม Start

เมื่อพิมพ์ environment ก็จะเจอ Edit the system environment variables

หลังจากนั้นให้ทำการคลิ้กที่ Environment Variables ครับ

คลิ้กที่ Environment Variables

5.หลังจากเปิด Environment Variables ให้เลือกที่ Path แล้วคลิ้กที่ Edit…

หน้าจอ 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 ให้มา

Copy แถบโค้ดมาใช้ได้เลย
วางโค้ดใส่ PowerShell แล้ว Enter ได้เลยครับ

เมื่อเสร็จแล้วหน้าตาจะประมาณนี้

สามารถเข้าไปดูที่ http://localhost:9000/projects ได้เลย

เป็นอันเรียบร้อยครับ

--

--