Todo => task two: Sonarqube

การเขียนโปรแกรมจะขาดเรื่องการทำ Code scanner ไปไม่ได้เลย เพราะจะช่วยทำให้ชุดคำสั่งของเรามีคุณภาพ ทั้งยังช่วยทำให้เราทราบว่าชุดคำสั่งในจุดใดที่จะเป็นปัญหาอนาคตได้

สำหรับบทความนี้เราจะมีแนะนำการสร้าง Sonarqube ในเครื่องขึ้นมาเพื่อใช้สำหรับทำ code scan กันครับ โดยเริ่มต้นจากติดตั้งเครื่องมือกันก่อน

Install .NET Tool

$> dotnet tool install --global dotnet-sonarscanner --version 4.8.0

และหลังจากนั้นเราจะมาทำการตั้งค่า max_map ให้ WSL กันก่อนนะครับ สำหรับบางเครื่องอาจจะถูกตั้งค่ามาน้อยเกินไป ทำให้ไม่สามารถรัน Sonarqube ได้ครับ

ให้เปิด PowserShell ขึ้นมา จากนั้น ให้พิมพ์คำสั่งด้านล่าง แล้ว Enter

$> wsl -d docker-desktop

หลังจากเราเข้ามาใน WSL ของ Docker แล้ว ก็ให้พิมพ์คำสั่งนี้ เพื่อตั้งค่า max_map

$> sysctl -w vm.max_map_count=262144

จากนั้นก็ให้ปิด PowerShell ไปได้เลยครับ

ขั้นตอนต่อไปเราก็จะมาสร้าง docker-compose สำหรับ Sonarqube กันครับ โดยคำสั่งข้างในก็จะมี ดังนี้

จากนั้นก็สั่งนี้ เพื่อเรียกให้ Docker รัน Container ตามที่คำสั่งด้านบน และให้รอสักครู่

$> docker-compose up -d

จากนั้นเปิดหน้า Browser แล้วเข้าไปที่ http://localhost:10082 ก็จะเจอกับหน้าจอต้อนรับของ Sonarqube ดังภาพ

สำหรับ Username และ Password ก็ตามนี้ครับ

Username: admin
Password: admin

จากนั้นเราก็จะมาเริ่มทำการ Scan โปรเจคของเรากันเลยดีกว่าครับ โดยให้เราสร้างโปรเจคใน Sonarqube ขึ้นมา ซึ่งผมจะตั้งชื่อว่า Todo-Project

สำหรับขั้นตอนต่อไป จะเป็นการสร้าง token สำหรับใช้ Access เข้า Sonarqube จากตัว CLI Tool ที่เราติดตั้งเมื่อตอนแรก โดยในขั้นตอนนี้ผมจะไปสร้าง Access Token จากเมนู User Account แทนครับ โดยให้คลิกตรง User Account ตามภาพข้างล่าง

จากนั้นก็ให้เรากำหนดชื่อ Token โดยผมจะตั้งชื่อเอาไว้เป็น GToken และจากนั้นก็ให้คลิกที่ Generate ได้เลยครับ (ตัว Token หลังจากที่ Generate แล้ว ให้เก็บเอาไว้ให้ดีนะครับ เพราะต้อง Generate ใหม่ทุกครั้งในกรณีที่เราลืมครับ ไม่สามารถดู Token ของเก่าได้ครับ

จากนั้นให้เรากลับไปที่หน้า Project ของเราอีกครั้ง โดยคลิกที่เมนู Project ด้านบน จะแสดงรายชื่อ Project ที่เราสร้างไว้

จากนั้นคลิกเลือกโปรเจคของเราขึ้นมา เพื่อตั้งค่า Token สำหรับ Access ครับ โดยให้เราเลือกที่ Use existing token และใส่ Token ที่เราพึ่งได้จากการ Generate มา และคลิกที่ Continue เพื่อเข้าสู่ขั้นตอนต่อไป

สำหรับขั้นตอนต่อไปนี้ จะเป็นการแนะนำการใช้ CLI เพื่อทำการ Scan โค๊ดในโปรเจคของเรา ซึ่งหากเราคลิกที่ C# or VB.NET จะเป็นการใช้ msbuild ในการ build โปรเจค แต่สำหรับในบทความนี้เราจะไปใช้ .NET CLI กันครับ

เริ่มแรกเปิด PowerShell ขึ้นมาและเข้าไปที่โฟลเดอร์ที่จัดเก็บโปรเจคของเราครับ

จากนั้นพิมพ์คำสั่งนี้ เพื่อเป็นการ Setup ตัว Sonar Scanner ก่อนจะทำการ Scan

$> dotnet sonarscanner begin /k:"Todo-Project /d:sonar.host.url="http://localhost:10082" /d:sonar.login="e2b8e9857ee4f1f01caff705eeab376a436ddf45"

จากนั้นใช้คำสั่งของ .NET CLI เพื่อ Build project

$> dotnet build

และใช้คำสั่งนี้ เพื่อสั่งให้ Sonarqube ทำการ Scan โค๊ดและส่งผลไปให้กับ Sonarqube Server

$> dotnet sonarscanner end /d:sonar.login="e2b8e9857ee4f1f01caff705eeab376a436ddf45"

เมื่อเรากลับไปยังหน้าโปรเจคบน Sonarqube ก็จะเจอกับผล Scan ดังภาพ

โดยในส่วนของ Code Smells จะเป็นส่วนสำคัญที่เราควรให้ความสำคัญสุด เพราะจะเป็นส่วนที่แนะนำว่าโค๊ดชุดใหนอาจจะทำให้เกิดปัญหาได้ เมื่อเราคลิกเข้าไปก็จะมีรายละเอียดตามภาพ

และหากเราคลิกเข้าไปดูในแต่ละรายการ ก็จะแสดงโค๊ดในตำแหน่งที่มีปัญหารวมทั้งคำแนะนำในการแก้ไขให้

และเมื่อเราเปิดโฟลเดอร์ของโปรเจคขึ้นมา จะมีโฟลเดอร์ของ Sonar Scanner ทีถูกสร้างเอาไว้ ดังภาพ

ขั้นตอนสุดท้าย คือ เราต้องไปเพิ่มคำสั่ง ignore เพื่อไม่ให้ git เอาโฟลเดอร์ของ Sonar Scanner ติดขึ้นไปด้วย โดยให้เราเป็นไฟล์ .gitignore ขึ้นมา และเพิ่มชื่อโฟลเดอร์ของ Sonar Scanner เข้าไปในบรรทัดสุดท้าย ดังภาพ

บทความนี้ก็ขอจบเพียงเท่านี้ครับ หวังว่าพอจะมีประโยชน์กับทุกๆ ท่านครับ หากผิดพลาดประการใดก็ต้องขออภัยมา ณ ที่นี้ด้วยครับ

Source Code ( todo-task-two-sonarqube):

https://github.com/VatthanachaiW/todo-project.git

--

--