SonarQube Part 1

SonarQube คืออะไร

ผมเขียนเกี่ยวกับ Sonarqube ไว้หลายตอน คุณสามารถกด Link ด้านล่างเพื่ออ่านที่เกี่ยวกับ Sonarqube ตอนต่างๆได้เลย

เอ่อจะบอกว่ามันคืออะไรแบบคำนิยามจริงจังก็ลำบาก สำหรับใครที่อยากได้คำนิยามจริงจังก็ตามลิ้งนี้ไปเลย sonarqube แต่ถ้าเอาง่ายๆแบบที่ผมเข้าใจมันก็คือตัวโปรแกรมที่ไว้เช็คคุณภาพของ Code ตรวจสอบว่า Code ของเราเนี่ยมีส่วนไหนที่มันดูสุ่มเสี่ยงที่จะสร้างปัญหาไหม คือคนที่มาเป็นโปรแกรมเมอร์เขียน Code เนี่ยเขียน Code เป็นอยู่ละไม่ว่าจะเป็น For loop if else แต่การเขียน Code ที่ดีนั้นต้องใช้เวลา ประสบการณ์ ซึ่งไอประสบการณ์ส่วนใหญ่เนี่ยมันแลกมาด้วยการเอาขึ้น Production แล้วเกิดปัญหา หรือ ต้องมีผู้หลักผู้ใหญ่ (เรียกซะใหญ่โต) หรือ senior มา Review code ให้เพื่อบอกข้อเสียและปัญหาที่จะตามมาถ้าเขียน Code แบบนี้

ทำอย่างถูกบีบด้วยเวลา

การ Review code เป็นเรื่องที่ดีครับ จริงๆผมอยากให้มีคนมา Review code เสียเหลือเกิน แต่น่าเสียดายด้วยจำนวนโปรแกรมเมอร์ที่น้อยอีกทั้งต่างคนต่างยุ่งกับงานของตัวเอง ผมล่ะฝันอยากให้บริษัททำแค่ Service เดียวแล้วช่วยกันเขียน Code ช่วยกัน Review ขายมัน Service เดียว แต่ในความเป็นจริงมันไม่ใช่แบบนั้นบริษัทต้องหารายได้ให้มากที่สุด บริษัทก็รับงานมาอย่างมหาศาล โปรแกรมเมอร์ก็เร่งกันเขียน Code ให้มันขึ้น Production ทัน ไม่มีใครเหลือเวลามาสั่งสอน ส่งต่อความรู้

ในเมื่อคนสอนไม่มีคงต้องช่วยเหลือตัวเอง

ในสถานการณ์บีบคั้นแบบนี้คงต้องช่วยเหลือตัวเองดังคำที่ว่า

ตนแลเป็นที่พึ่งแห่งตน

หรือถ้าใครเคยดู Eureka Seven ก็น่าจะคุ้นกับคำว่า

อย่าอ้อนขอ จงไขว่คว้ามา ไม่อย่างนั้นก็ไม่มีทางประสบความสำเร็จ

ตัวช่วยที่ง่ายพอจะทำได้ไม่ต้องพึ่งคนอื่นมาก ไม่ต้องใช้เวลานานก็เห็นจะเป็น SonarQube ตัวนี้นี่แหละครับ

ลงเลยละกัน

หลังจากฝอยมานานมาเริ่มลงเลยละกัน ตามเคยครับสมัยนี้มีเทคโนโลยีที่เรียกว่า container แล้วทำให้เราไม่ต้อง install โปรแกรมลงที่เครื่องจริงๆ ทดลองเล่นอะไรแล้วพังก็แค่ลบ container แล้วสร้าง container ใหม่มาเล่นได้เรื่อยๆ ดังนั้นเรามาลง SonarQube ด้วย Docker กันครับ ใครไม่เคยใช้ไปลองเล่นได้ที่ https://www.codeschool.com/courses/try-docker

การ Install มี 2 แบบ

  1. ลงแบบไม่ต้องมี Database

    ลงแบบนี้เน้นไว้ใช้คนเดียว หรือใช้ทดลองอะไรบางอย่าง ไม่เหมาะเอาขึ้นไปใช้เป็น Centralize Quality หรือไปใช้เป็นอุปกรณ์ในการทำ DevOps แบบจริงจัง แต่จริงๆก็ทำได้นะถ้าไม่ได้กะทำใหญ่โตรองรับ Concurrent หรือมี Project เป็นร้อยเป็นพันกะ Scale

    1
    docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

    แค่บรรทัดเดียวท่านจะได้ SonarQube มาให้ใช้งานแล้วครับ

  2. ลงแบบมี Database

อันนี้สำหรับลงแล้วกะเอาไปใช้สำหรับเป็นเครื่องมือ DevOps เผื่อสำหรับ scale หรือเก็บข้อมูลแบบ Persistent ไว้บน Database ถ้า container หายไปอะไรที่ Config ไว้ก็จะยังอยู่บน Database ครับ อันนี้ Database ที่ทาง SonarQube เป็น Postgres นะครับ (รูปช้าง)

วิธีลง Database อันนี้แล้วแต่เลยนะครับ จะลงแบบเป็นเครื่องจริงๆหรือจะลงแบบ Docker ก็ได้ อันนี้ผมขอลงเป็นแบบ Docker ละกันเพื่อง่ายเผื่อเสียเผื่อพังจะได้ลบแล้วสร้างใหม่ง่าย

1
2
# ลง Database ก่อนนะครับ
docker run --name sonar_postgres -d -p 5432:5432 -e "POSTGRES_PASSWORD=root" -e "POSTGRES_USER=root" -e "POSTGRES_DB=sonarqube" postgres

รายละเอียดการ Config ค่าอื่นๆเกี่ยวกับ docker postgres สามารถอ่านได้ที่ https://hub.docker.com/_/postgres/

ต่อไปทำการลง App อันนี้จะวุ่นๆนิดหน่อยเพราะต้องเชื่อมต่อระหว่าง Database กับ App ด้วย

1
2
3
4
5
6
# ลง App ต่อกันเลย
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 --link sonar_postgres:postgres \
-e SONARQUBE_JDBC_USERNAME=root \
-e SONARQUBE_JDBC_PASSWORD=root \
-e SONARQUBE_JDBC_URL=jdbc:postgresql://postgres/sonarqube \
sonarqube

รายละเอียดการ Config ค่าอื่นๆเกี่ยวกับ docker sonar สามารถอ่านได้ที่ https://hub.docker.com/_/sonarqube/

สรุปที่ผมทำไปข้างบนคือ ขั้นแรกทำการสร้าง docker ที่เป็น postgres sql จากนั้นสร้าง sonarqube ขึ้นมาแล้วต่อเข้ากับ postgres ที่พึ่งสร้างไปตรงส่วนที่เชื่อมต่อคือตรง –link sonar_postgres:postgres ส่วน -e เป็นการกำหนด Environment จะเห็นว่าผมตั้งค่า environment ที่เป็น username password ตรงกับที่ตั้งใน container ของ postgres ส่วนตรง SONARQUBE_JDBC_URL นั้นกำหนดค่า url ตามที่กำหนดตรง link : –link sonar_postgres:postgres

ลองเข้าไปดูสิว่าใช้งานได้จริงรึเปล่า

ก็ลองเข้าใช้งานตาม ip ของเครื่องเลยครับ ตอนที่ผมลงนั้นผมจะลงให้มัน bind port เข้ากับเครื่องที่ Run docker ไปด้วย หากใครลง Docker กับเครื่องตัวเองเลยก็สามารถเข้าได้ที่ http://127.0.0.1:9000 แต่เครื่องของผม ผมลง docker บน VirtualBox อีก ip ของผมจะแตกจากของคนที่ลงบนเครื่องของผมจะเป็น http://192.168.56.101:9000 (เผื่อเห็นภาพแล้วจะสงสัย)

ขอตัดจบแค่นี้ก่อน

เขียนไปเขียนมาผมว่ามันเริ่มยาวละ ยาวมากไปก็ไม่ค่อยดีเลยขอตัดจบตรงนี้ละกัน (ไรวะยังไม่ได้ใช้งานเลย) ตอนหน้าเดี๋ยวมาอธิบายวิธีการใช้งานตัว SonarQube กันครับ

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