ติดตั้ง Sonarqube บน Google Kubernetes ครบเซ็ตบน n1-standard-1 node เดียวประหยัดๆ
Sonarqube เป็น open-source platform สำหรับ check code quality และวิเคราะห์ code เพื่อหา bugs, code smells, และช่องโหว่ security แบบอัตโนมัติ แก้ปัญหา technical debt รองรับมากกว่า 25 ภาษา (community edition รองรับ Java, JavaScript, C#, TypeScript, Kotlin, Ruby, Go, Scala, Flex, Python, PHP, HTML, CSS, XML และ VB.NET)
อ่านต่อได้ที่นี่ https://www.sonarqube.org/
Sonarqube ค่อนข้างเป็นที่นิยม และใน Google Kubernetes Marketplace ก็มีให้กดคลิกเดียวเสร็จ แต่ version ก็จะเก่า 7.6 (ตอนนี้ 8.0) และประเด็นสำคัญคือมันจะ set ให้กิน Server กับ SQL Service แบบจัดเต็ม สุดท้ายแล้วค่า server จะแพงมากๆๆ ประมาณเดือนละ 2 พันกว่าบาท
ผมคิดว่าสำหรับ Startup ที่ทีมงาน Programmer ไม่เกิน 20 คน ก็ยังไม่จำเป็นต้องลงทุนเยอะขนาดนั้นกับระบบแบบนี้ ถ้าลด spec ลงมาหน่อย เอา volumn, database, engine ทั้งหมดมาไว้บน Kube อาจจะโหลดช้าหน่อย แลกกับราคาถูกลงกว่าก็เป็น trade-off ไป ข้อดีอีกอย่างของการเอาขึ้น Kube คือ ถ้าเราไม่ได้ใช้งานบ่อย หรือใส่ใน CI/CD เราสามารถ scale Pod เฉพาะตอนที่จะใช้งานได้ แล้วเราก็เอา node ไปใช้งานอย่างอื่นก็ได้ (เรียกว่างกสุดๆ)
1. สร้าง cluster
สร้าง cluster และ config kubectl
ให้ไปชี้ที่ cluster นี้ด้วยคำสั่ง
gcloud container clusters get-credentials [CLUSTER_NAME]
https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl
2. สร้าง secret สำหรับ postgres password
secret เป็นที่เก็บ password ของ Kube เวลาอยากใช้เราก็มาอ้างอิงตัว secret จะได้ไม่ต้องเก็บไว้ในที่ที่อาจจะหลุดได้ง่าย คำสั่งข้างล่างเราสร้าง secret ชื่อ postgres-pwd ใส่ค่า RandomGeneratedPassword เข้าไป
kubectl create secret generic postgres-pwd --from-literal=password=RandomGeneratedPassword
3. สร้าง Google Clound Engine Persistent Disk
Disk ราคาไม่ได้แพงมาก ใครจะเอา ssd ก็ได้ หรือใครคิดว่าโปรเจคอาจจะโตมาก มี code เพิ่มหลายล้านบรรทัดก็จัด 200GB ไปเผื่อๆก็ได้ เนื่องจากเรางก แค่ 10GB ก็พอขำๆ
gcloud compute disks create --size=10GB --zone=asia-southeast1-a sonar-postgres-pd
4. สร้าง PV PVC
เราจะมาสร้าง persistent volume ไว้เก็บ database กัน สร้างไฟล์ sonar-pv-postgres.yaml และ sonar-pvc-postgres.yaml
แล้วใช้คำสั่ง
kubectl apply -f sonar-pv-postgres.yaml
kubectl apply -f sonar-pvc-postgres.yaml
5. สร้าง Postgresql Deployment และ Service
สร้างตัว deployment ของ database จริงๆ ตั้งชื่อไฟล์ sonar-postgres-deployment.yaml
และ sonar-postgres-service.yaml
แล้วก็ apply มัน
kubectl apply -f sonar-postgres-deployment.yaml
kubectl apply -f sonar-postgres-service.yaml
6. สร้าง Sonarqube Deployment และ Service
ทำเหมือนเดิมกับ Sonarqube (เราจะใช้ version 7.7 เพราะตั้งแต่ 7.8 ขึ้นไป มันจะเช็ค vm.max_map_count = 262144 ให้ Elasticsearch ทำให้รัน service ไม่ได้)
kubectl apply -f sonarqube-deployment.yaml
kubectl apply -f sonarqube-service.yaml
7. สร้าง project
จากนั้นเราจะสามารถเข้าไปดู dashboard ได้ผ่านทาง ip ของ sonarqube service ที่เราสร้างขึ้น แต่ต้อง /sonar ด้วย เช่น http://36.34.87.154/sonar
8. สั่ง scanner ส่งไฟล์ขึ้น server
ติดตั้งตัว scanner ในเครื่องเรา หรือ Jenkins เพื่ออัพ code ขึ้นไปให้ server วิเคราะห์ รายละเอียดตามลิงค์ข้างล่างได้เลย
โดยรวมจากที่ใช้งานแล้วอัพ code ไปหลายสิบ project รวมๆเกือบ 1 ล้านบรรทัด dashboard ก็ยังเร็วอยู่ ไม่มีช้าหรือค้างแต่อย่างใด ในราคาที่ลดลงกว่าครึ่ง