ข้ามไปที่เนื้อหา

การวิเคราะห์โค้ดด้วย SonarQube

สร้างโปรเจคใน SonarQube

  1. เข้าใช้งาน https://codescan.in.psu.ac.th และเข้าสู่ระบบด้วย PSU Passport

    SonarQube Login

  2. คลิกปุ่ม Create Project -> Local Project เพื่อสร้างโปรเจคใหม่

    SonarQube Create Project

  3. กรอกข้อมูลโปรเจค ดังรูป

    SonarQube Create Project Form

  4. เลือก Baseline ดังรูป จากนั้นคลิกปุ่ม Create Project

    SonarQube Create Project Baseline

  5. หน้าจอเมื่อสร้างโปรเจคเสร็จสิ้น โดยค่าเริ่มต้น Project จะเป็น Public หากต้องการปรับเป็น Private ให้แจ้ง Admin (แจ็ค, เอก, กร)

    SonarQube Create Project Complete

สร้าง PAT เพื่อใช้งาน SonarQube Scanner CLI บน Azure DevOps

  1. คลิกที่ Username เลือกเมนู My Account -> Security -> Generate Token

    SonarQube My Account

  2. ตั้งชื่อ Token เลือกประเภทเป็น Golbal Analysis Token และกำหนดหมดอายุเป็น No expiration แล้วคลิกปุ่ม Generate

    SonarQube Generate Token

  3. คัดลอก Token ที่ได้ และเก็บไว้เพื่อใช้งาน จะไม่สามารถเปิด Token ดูได้ในภายหลัง

    SonarQube Copy Token

ติดตั้ง SonarQube Server Extension ใน Azure DevOps

  1. ไปที่ Collection Settings ต้องมีสิทธิจัดการ Collection

    Collection Settings

  2. เลือกเมนู Extensions -> Browse marketplace

    Browse marketplace

  3. ค้นหา SonarQube Server และคลิกปุ่ม Get it free

    Install Extension

  4. เลือก Select team project collection แล้วคลิกปุ่ม Install เมื่อติดตั้งเสร็จสิ้น เลือก Proceed to collection

    Get it free

การสร้าง Service connections ไปยัง SonarQube Server

  1. ไปที่ Project Settings

    Project Settings

  2. เลือกเมนู Service connections -> New service connection

    New Service Connection

  3. เลือก SonarQube Server และกรอกข้อมูลดังนี้

    • Server Url: http://codescan.in.psu.ac.th
    • Token: ค่า PAT ที่สร้างไว้
    • Service connection name: ชื่อ Connection ใช้คำว่า sonarqube เพื่อให้ตรงกับ pipeline.yml
    • Grant access permission to all pipelines: เลือกเครื่องหมายถูก จะได้ไม่ต้องกำหนดสิทธิ์ให้แต่ละ Pipeline แต่จะสามารถใช้งานได้ทุก Pipeline ที่สร้างใน Project นี้

    SonarQube Server Connection

  4. คลิกปุ่ม Save

การสร้าง Azure DevOps Pipeline สำหรับวิเคราะห์โค้ดด้วย SonarQube

  1. สร้าง Pipeline ใหม่ โดยเลือกเมนู Pipelines -> New Pipeline

    New Pipeline

  2. เลือก Azure Repos Git เพิ่มรูป

  3. และเลือกโปรเจคที่ต้องการวิเคราะห์ จากนั้นคลิกปุ่ม Continue

    Select Repo

  4. เลือก Starter pipeline และคลิกปุ่ม Save and run

    Starter Pipeline

  5. แก้ไขค่า 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'
    
  6. คลิกปุ่ม Save and run

  7. เลือกเมนู Pipelines -> Runs เพื่อตรวจสอบสถานะของ Pipeline
  8. คลิกที่รายการผลการรัน เลือก Extensions เพื่อดูผลการวิเคราะห์โค้ด

    • Quality Gate: จะแสดงผลการวิเคราะห์โค้ดว่าผ่านหรือไม่ โดยจะแสดงเป็นสีเขียวหรือแดง ถ้าผ่านจะเป็นสีเขียว ถ้าไม่ผ่านจะเป็นสีแดง และจะแสดงข้อความว่าเกิดข้อผิดพลาดอะไรขึ้น
    • See analysis details on SonarQube: เป็นลิงก์ที่จะนำไปยังหน้า SonarQube เพื่อดูรายละเอียดของการวิเคราะห์โค้ด

    Pipeline Result

การตรวจสอบผลการวิเคราะห์โค้ดบน SonarQube Server

  1. ไปที่หน้าโปรเจคที่สร้างใน SonarQube และคลิกที่ Dashboard (หรือคลิกลิ้งค์มาจาก DevOps ก็จะมายังหน้านี้ของโปรเจค)

    • Security: จำนวน issue ที่เกี่ยวกับความปลอดภัย เช่น SQL Injection, XSS, CSRF เป็นต้น
    • Reliability: จำนวน issue ที่เกี่ยวกับความน่าเชื่อถือของโค้ด เช่น Null Pointer Exception, Unhandled Exception เป็นต้น
    • Maintainability: จำนวน issue ที่เกี่ยวกับความสามารถในการบำรุงรักษาโค้ด เช่น Code Smell, Duplicated Code เป็นต้น

    Project Dashboard