การวิเคราะห์โค้ดด้วย SonarQube
สร้างโปรเจคใน SonarQube
-
เข้าใช้งาน https://codescan.in.psu.ac.th และเข้าสู่ระบบด้วย PSU Passport
-
คลิกปุ่ม
Create Project
->Local Project
เพื่อสร้างโปรเจคใหม่ -
กรอกข้อมูลโปรเจค ดังรูป
-
เลือก
Baseline
ดังรูป จากนั้นคลิกปุ่มCreate Project
-
หน้าจอเมื่อสร้างโปรเจคเสร็จสิ้น โดยค่าเริ่มต้น Project จะเป็น Public หากต้องการปรับเป็น Private ให้แจ้ง Admin (แจ็ค, เอก, กร)
สร้าง PAT เพื่อใช้งาน SonarQube Scanner CLI บน Azure DevOps
-
คลิกที่
Username
เลือกเมนูMy Account
->Security
->Generate Token
-
ตั้งชื่อ Token เลือกประเภทเป็น
Golbal Analysis Token
และกำหนดหมดอายุเป็นNo expiration
แล้วคลิกปุ่มGenerate
-
คัดลอก Token ที่ได้ และเก็บไว้เพื่อใช้งาน จะไม่สามารถเปิด Token ดูได้ในภายหลัง
ติดตั้ง SonarQube Server Extension ใน Azure DevOps
-
ไปที่
Collection Settings
ต้องมีสิทธิจัดการ Collection -
เลือกเมนู
Extensions
->Browse marketplace
-
ค้นหา
SonarQube Server
และคลิกปุ่มGet it free
-
เลือก
Select team project collection
แล้วคลิกปุ่มInstall
เมื่อติดตั้งเสร็จสิ้น เลือกProceed to collection
การสร้าง Service connections ไปยัง SonarQube Server
-
ไปที่
Project Settings
-
เลือกเมนู
Service connections
->New service connection
-
เลือก
SonarQube Server
และกรอกข้อมูลดังนี้Server Url
: http://codescan.in.psu.ac.thToken
: ค่า PAT ที่สร้างไว้Service connection name
: ชื่อ Connection ใช้คำว่า sonarqube เพื่อให้ตรงกับ pipeline.ymlGrant access permission to all pipelines
: เลือกเครื่องหมายถูก จะได้ไม่ต้องกำหนดสิทธิ์ให้แต่ละ Pipeline แต่จะสามารถใช้งานได้ทุก Pipeline ที่สร้างใน Project นี้
-
คลิกปุ่ม
Save
การสร้าง Azure DevOps Pipeline สำหรับวิเคราะห์โค้ดด้วย SonarQube
-
สร้าง Pipeline ใหม่ โดยเลือกเมนู
Pipelines
->New Pipeline
-
เลือก
Azure Repos Git
เพิ่มรูป -
และเลือกโปรเจคที่ต้องการวิเคราะห์ จากนั้นคลิกปุ่ม
Continue
-
เลือก
Starter pipeline
และคลิกปุ่มSave and run
-
แก้ไขค่า
Pipelines
ดังนี้[PROJECT_NAME]
: ชื่อโปรเจคที่สร้างใน SonarQube[PROJECT_KEY]
: โปรเจค Key ที่สร้างใน SonarQube[PROJECT_PATH]
: Path ไปยังไฟล์ .sln[SDK_VERSION]
: เวอร์ชัน SDK ที่ใช้ในโปรเจค ตัวอย่างเช่น 8.0.401 หรือ 8.0.x
pool: agent-pool-codescan trigger: - master variables: project_name: '[PROJECT_NAME]' project_key: '[PROJECT_KEY]' solution: '**/*.sln' sdk_version: [SDK_VERSION] steps: - task: UseDotNet@2 inputs: packageType: sdk version: $(sdk_version) installationPath: $(Agent.ToolsDirectory)/dotnet - task: SonarQubePrepare@7 inputs: SonarQube: 'sonarqube' scannerMode: 'dotnet' projectKey: '$(project_key)' projectName: '$(project_name)' - task: DotNetCoreCLI@2 inputs: command: 'restore' projects: '$(solution)' - task: DotNetCoreCLI@2 inputs: command: 'build' projects: '$(solution)' arguments: '--configuration Release --no-restore' - task: SonarQubeAnalyze@7 inputs: jdkversion: 'JAVA_HOME_17_X64' - task: SonarQubePublish@7 inputs: pollingTimeoutSec: '300'
-
คลิกปุ่ม
Save and run
- เลือกเมนู
Pipelines
->Runs
เพื่อตรวจสอบสถานะของ Pipeline -
คลิกที่รายการผลการรัน เลือก
Extensions
เพื่อดูผลการวิเคราะห์โค้ดQuality Gate
: จะแสดงผลการวิเคราะห์โค้ดว่าผ่านหรือไม่ โดยจะแสดงเป็นสีเขียวหรือแดง ถ้าผ่านจะเป็นสีเขียว ถ้าไม่ผ่านจะเป็นสีแดง และจะแสดงข้อความว่าเกิดข้อผิดพลาดอะไรขึ้นSee analysis details on SonarQube
: เป็นลิงก์ที่จะนำไปยังหน้า SonarQube เพื่อดูรายละเอียดของการวิเคราะห์โค้ด
การตรวจสอบผลการวิเคราะห์โค้ดบน SonarQube Server
-
ไปที่หน้าโปรเจคที่สร้างใน SonarQube และคลิกที่
Dashboard
(หรือคลิกลิ้งค์มาจาก DevOps ก็จะมายังหน้านี้ของโปรเจค)Security
: จำนวน issue ที่เกี่ยวกับความปลอดภัย เช่น SQL Injection, XSS, CSRF เป็นต้นReliability
: จำนวน issue ที่เกี่ยวกับความน่าเชื่อถือของโค้ด เช่น Null Pointer Exception, Unhandled Exception เป็นต้นMaintainability
: จำนวน issue ที่เกี่ยวกับความสามารถในการบำรุงรักษาโค้ด เช่น Code Smell, Duplicated Code เป็นต้น