การวิเคราะห์โค้ดด้วย 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 เป็นต้น



















