Skip to main content
0
ไม่มีหมวดหมู่

วิเคราะห์โค้ดแบบอัตโนมัติด้วย SonarQube และ Jenkins

สวัสดีครับ สำหรับตอนนี้มาอยู่กับอีกครึ่งมือที่มีประโยชน์และใช้งานกันค่อนข้างเยอะมากในสาย DevOps ในการทำ automate ต่าง ๆ ด้วยเครื่องมือที่ชื่อว่า “Jenkins” และเราจะเอามาต่อกับเครื่องมือสุดทรงพลัง ปลอดภัยเอาไว้ใช้วิเคราะห์หาช่องโหว่ในโค้ดได้มันคือ “SonarQube” ซึ่งสองตัวนี้จะมีวิธีการใช้ยาก ง่ายยังไงมาดูกัน!

เครื่องมือตัวแรก Jenkins คืออะไร?

Jenkins คือ เป็นเครื่องมือที่ใช้สำหรับการทำ CI/CD (Continuous Integration/Continuous Delivery) ช่วยให้นักพัฒนาซอร์ฟแวร์อย่างเรา ๆ สามารถทำงานร่วมกันได้อย่างมีประสิทธิภาพ โดยการทำให้กระบวนการต่าง ๆ ทำงานอัตโนมัติ โดยส่วนที่มันทำงานอัตโนมัตินั้นเราจะเขียน Pipeline ไว้แล้วตอนใช้งานค่อยมารัน ส่วนที่เราสามารถกำหนดหรือเอา Jenkins ไปใช้ได้ เช่น

  • Jenkins สามารถรวบรวมโค้ดจาก (Version Control System อย่าง Git, SVN, Mercurial ฯลฯ และทำการ compile, build, ทดสอบ (test) โค้ดของเราโดยอัตโนมัติ
  • รองรับการทดสอบโค้ดหลายประเภท เช่น unit tests, integration tests, functional tests ฯลฯ
  • การจัดการการ Deploy (Deployment): Jenkins สามารถ deploy โค้ดที่ผ่านการทดสอบแล้วไปยัง staging environment หรือ production environment

สามารถติดตั้ง Jenkins ได้ตามขั้นตอนนี้

การตั้งค่าสำหรับการใช้งานครั้งแรก


จากนั้นจะเจอ Jenkins ทำงานอยู่ที่ http://localhost:8080/

เครื่องมือตัวที่สอง SonarQube คืออะไร?

SonarQube คือ แพลตฟอร์มสำหรับการวิเคราะห์คุณภาพโค้ด (Code Quality) โดยใช้ Static Code Analysis (การวิเคราะห์โค้ดแบบคงที่) เพื่อหาจุดบกพร่องหรือเรียกง่าย ๆ ว่า Bugs รวมไปถึง Code Smells และช่องโหว่ด้านความปลอดภัย (Security Vulnerabilities) ต่าง ๆ อีกด้วย

เริ่มต้นใช้งาน SonarQube

โดยในตอนนี้ผมจะใช้ Docker ในการรัน SonarQube มาแล้วทำการเปิดใช้งานผ่านเว็บ browser ที่ port 9001 (ตัวอย่างจะไม่ได้มีการต่อ volume ไว้หาก container ดับไปข้อมูลจะหาย) สามารถติดตั้ง SonarQube แบบเต็มได้ที่ลิงก์นี้ https://docs.sonarsource.com/sonarqube/9.8/setup-and-upgrade/install-the-server/

หรือจะใช้คำสั่ง

docker run -it --rm -p 9001:9000 sonarqube

docker run: คำสั่งสำหรับรันคอนเทนเนอร์

-it: เปิดคอนเทนเนอร์ในโหมด Interactive

–rm: ลบคอนเทนเนอร์เมื่อหยุดทำงาน

-p 9001:9000: กำหนดพอร์ต 9001 บนโฮสต์ กับพอร์ต 9000 บนคอนเทนเนอร์

sonarqube: ชื่อDocker Image ของ SonarQube

หลังจากนั้นเราสามารถเปิด SonarQube ที่ http://localhost:9001 โดย username / password แรกคือ admin กับ admin

เมื่อเข้ามาแล้วระบบจะให้เราทำการอัปเดต Password

หลังจากนั้นจะได้เ้ขามาที่หน้าหลักของ SonarQube หลังจากนั้นให้ทำการกดเลือก “Create a local project”

แล้วทำการสร้างตั้งชื่อโปรเจกต์

เมื่อเรากรอกเสร็จทำการกด Create Project เราจะได้โปรเจกต์ของ SonarQube มารอไว้

สร้าง Pipeline บน Jenkins

หลังจากที่เรามี Project รอในฝั่งของ SonarQube แล้ว เรามาทำการสร้าง Pipeline ตัวที่จะทำให้ระบบไปเอาโค้ดของเราบน Repository อย่าง GitHub เอาไปให้ SonarQube ทำการวิเคราะห์กัน โดยการกลับไปที่ http://localhost:8080 แล้วทำการเลือก “New Item”

หลังจากนั้นทำการตั้งชื่อ และ เลือก “Pipeline”


หลังจากนั้นเลื่อนลงมาด้านล่างตรง Pipeline > Definition เลือกเป็น “Pipeline script from SCM”

ส่วนต่อมา SCM เลือกเป็น Git แล้วนำ Repository URL จาก GitHub มาใส่ รวมไปถึงเลือก Branch ด้วยโดยผมจะเลือกเป็น main

ก่อนจะกด Save ให้ทำการใส่ชื่อไฟล์ Pipeline ของ Jenkins ด้วย


โดยไฟล์นี้จะต้องมีอยู่ใน GitHub Repo ด้วย

โดยโค้ดของไฟล์ Jenkinsfile มีดังนี้

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                git 'https://github.com/aeff60/simple-express-app.git'
                bat "npm install"
            }
        }

        stage('Scan') {
            steps {
                withSonarQubeEnv(installationName: 'sq1') {
                    bat "npm install sonar-scanner"
                    bat 'npx sonar-scanner -X -X -Dsonar.projectKey=mywebapp'
                }
            }
        }
    }
}

หลังจากนั้นก็ทำการกด Build Now ได้เลย

เมื่อ Pipeline ทำงานเสร็จแล้วเราก็จะได้ตามรูปนี้สามารถดู Log ของแต่ละ Process ได้


อย่างตัวอย่างนี้ก็จะเป็น Log ของส่วนที่เป็นการ Scan ด้วย SonarQube

ซึ่งเราสามารถกดที่ Icon SonarQube เพื่อไปยังหน้าโปรเจกต์ SonarQube ได้

เราก็จะเห็นได้ว่า SonarQube ก็จะบอกจุดที่โค้ดมีความเสี่ยงหรือช่องโหว่มาให้แล้วนั่นเอง

Sirasit Boonklang

Author Sirasit Boonklang

More posts by Sirasit Boonklang
Close Menu

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

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

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า