Coding Gun

ติดตั้ง SonarQube ด้วย Docker

การใช้ sonarqube ผ่านทาง container นั้นจะดีกว่าติดต้ังลงบน server โดยตรง ตรงที่เราสามารถนำไปใส่ไว้ใน CI/CD ได้ง่ายกว่า โดยเฉพาะการใช้งาน sonar-scanner-cli

ติดตั้ง SonarQube Server ด้วย Docker

เราจะแยกการติดตั้งออกเป็น 2 ส่วนคือการติดตั้ง sonarqube server และ sonar scanner เพราะจริงๆแล้วเราไม่จำเป็นต้องใช้ container ทั้งหมด เราสามารถเลือกติดตั้ง sonarqube server เป็น container แต่ใช้ sonar-scanner แบบติดตั้งลงในเครื่องตรงๆก็ได้ หรือในทางกลับกันเราสามารถ run sonar-scanner ผ่าน container แต่ส่งผลลัพธ์ขึ้นไปยัง sonarqube server ที่ติดตั้งแบบ bare-metal(ติดตั้งลงบนเครื่องตรงๆ) ก็ได้

สร้าง sonarqube server

เราจะใช้ image ชื่อว่า sonarqube โดย default sonarqube จะใช้ port 9000

  1. สร้าง sonarqube server ขึ้นมาด้วยคำสั่ง

    docker run -d --name sonarqube -p 9000:9000 sonarqube
    
  2. เปิด browser ขึ้นมาแล้วเข้าไปที่ URL http://localhost:90000 เราจะเข้าสู่หน้า login ให้ login ด้วย user admin และ password เป็น admin

  3. ระบบจะบังคับให้เราเปลี่ยน password ใหม่

    Sonarqube forced update password

  4. หลังจาก update password เสร็จแล้วก็จะเข้าสู่หน้า dashbord ดังรูป

    Sonarqube dashboard

SonarQube ตอนนี้จะยังไม่มี database สำหรับเก็บข้อมูลถาวร ถ้า restart server ข้อมูลทุกอย่างก็จะหายหมด

ติดตั้ง SonarQube Server ด้วย Docker Compose

การใข้ sonarqube ผ่านทาง docker compose จะสะดวกกว่า dokcer ธรรมดาตรงที่เราสามารถสร้าง network ได้เลย เพราะเราจำเป็นต้องมีทั้ง sonarqube server และ sonarqube database โดยมีขั้นตอนต่างๆ ดังนี้

  1. สร้างไฟล์ docker-compose.yml ไว้ใน folder ที่เก็บ source code
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
version: '3.6'
services:
  sonarqube:
    image: sonarqube:9-community
    hostname: sonarqube
    container_name: sonarqube
    depends_on:
      - sonarqube-db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://sonarqube-db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
    ports:
      - "9000:9000"

  sonarqube-db:
    image: postgres:15.2-alpine3.17
    hostname: postgresql
    container_name: postgresql
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonar
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

จากไฟล์ dokcer-compose ด้านบนเราจะสร้าง service ขึ้นมา 2 ตัวคือ sonarqube และ sonarqube-db ซึ่ง database ในตัวอย่างนี้เราจะใช้ postgreSql นอกจาก postgreSql แล้ว sonarqube ยัง support ทั้ง MS SQL Server และ Oracle อีกด้วย

สิ่งที่ต้องกำหนดให้ตรงกันคือ SONAR_JDBC_USERNAME และ SONAR_JDBC_PASSWORD ในบรรทัดที่ 11-12 ต้องตรงกับ POSTGRES_USER และ POSTGRES_PASSWORD ในบรรทัดที่ 25-26 ไม่งั้น sonarqube server จะไม่สามารถ connect ไปที่ postgresql ได้

  1. เมื่อพร้อมแล้วให้ start sonarqube server ด้วยคำสั่ง
    docker-compose up -d
    
  2. หลังจากนั้นก็เข้าสู่ sonarqube server ผ่านทาง http://localhost:9000 เหมือนในตัวอย่างแรก

SonarQube Scanner ด้วย Docker

ส่วนสุดท้ายจะเป็นการ run sonar scanner ด้วย docker ซึ่งตัว sonar scanner นั้นจะเป็นผู้ scan และส่งผลลัพธ์กลับขึ้นไปยัง sonarqube server ดังนั้นเราสามารถเลือกได้ว่าจะติดตั้งผ่านทาง command line หรือจะ run ผ่าน docker ซึ่งการ run ผ่าน docker จะใช้คำสั่งนี้

docker run --rm -it -v ${PWD}:/usr/src \
        --network host \
        --name sonar-scanner \
        -e SONAR_HOST_URL="http://localhost:9000" \
        -e SONAR_LOGIN="TOKEN" \
        sonarsource/sonar-scanner-cli

สิ่งที่ต้องเข้าใจในการใช้งาน sonar scanner cli ผ่านทาง docker คือ

อ่านต่อเพิ่มเติมได้ที่นี่

Phanupong Permpimol
Follow me

Software Engineer ที่เชื่อในเรื่องของ Process เพราะเมื่อ Process ดี Product ก็จะดีตาม ปัจจุบันเป็นอาจารย์และที่ปรึกษาด้านการออกแบบและพัฒนา Software และ Web Security