บันทึกการแก้ไขปัญหา SonarQube Analysis .NET(C#) ทำงานนานน

ต้นเรื่อง ตอนแรกไปซนดู Monitor ของ VM แต่ละตัว แล้วพบว่าทำไม VM ที่มี SonarQube Docker ใช้ CPU / RAM นานปิดปกติ เลยเข้าไปตรวจสอบข้างใน SonarQube พบว่า background analysis task ทำงานนานมากกก

  • เดิม 1-2 นาที
  • ใหม่ 17-18 ชั่วโมง

ทำไมมันใช้เวลาเพิ่มขึ้นขนาดนั้นนนนนน สิ่งที่แรกสงสัยเลย Size ของ Code ที่เข้ามาเพิ่มครับ ตัว SonarQube มันจะใช้เวลาตรวจตามไฟล์ใหม่ที่ส่งเข้ามาครับ ตอนนี้ลองเข้าไปที่ Measures > Size > New Lines โอ้วเจอไฟล์แปลกที่ Sub-Module ครับ เพิ่มมาตั้ง 4.3 ล้าน บรรทัด

ลอง Drill-Down ลงไปอีกครับ ชัดเลย Sonar มันเอาพวก Coverage Report ใส่เข้าไปด้วยนี่เอง มาเป็นล้านบรรทัดเลยครับ (ส่วนสีแดง) / งานที่แก้จริงๆ ทั้ง Web / Winform / Service (ส่วนสีเขียว) นิดเดียวเองครับ

สรุปตอนนี้เรารู้สาเหตุกันแล้ว มาจากการที่ตัว SonarQube มันกวาดไฟล์ที่ไม่จำเป็น อย่าง เช่น Test Coverage เข้าไป Process ด้วย โดยแนวทางการแก้ไขมี 2 ทางครับ

  • Exclude (Key: sonar.exclusions)
  • Delete ไฟล์ก่อนเข้าช่วง SonarQube Analysis ครับ

สำหรับผมเลือกวิธีการ Delete ไฟล์ออกครับ เพราะว่า

  • Test Result และ Test Coverage ใน Jenkins Pipeline ผมได้ Copy แยกของทุก Project เอาไว้อีกทีนึงแล้วครับ
  • เคสนี้น่าจะเกิดจากการ Run dotnet test แบบ solution มันก็เลยไปสร้าง Folder TestResults ในทุก TestProject ตอนทำรอบแรก ผมแค่ Copy ไฟล์ออกมา ไม่คิดว่า Sonar มันจะเอาไปวิเคราะห์ด้วยครับ ทางแก้ง่ายๆ เลย PowerShell ไล่ลบออกไปครับ ^__^
stage ("Unit Test")
{
   when {
     expression {
       return params.EXECUTEUNITTEST
     }
   }
   steps {
       //Test Execution Command ......

       //Clear TestResults Before SonarAnalysis   
       dir("${BASE_PATH}\\invest-service\\UnitTest")
       {
           powershell(script: """
               \$testResultPathls=Get-ChildItem \$path -Directory -Recurse | Where-Object { \$_.Name -match 'TestResults*' } | Select FullName
                foreach(\$testResultPath in \$testResultPathls.FullName) {
                   echo "Clear Test Result Folder in \${testResultPath}"
                }
           """)
        }
   }
}

หลังจากแก้ไปแล้ว ผล SonarQube Analysis จากเกือบๆ 18 ชั่วโมง ลดลงเหลือ ประมาณ 2 นาทีแล้วครับ ^__^


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.