코드의 여백

SonarQube와 GitHub Actions로 정적 코드 품질 관리하기

by rowing0328

Intro

이번 글에서는 SonarQube를 Docker Compose를 이용해 실행하는 방법과 GitHub App과의 연동을 통해 코드 분석 환경을 자동화하는 과정을 다룬다.

 

이를 통해 안정적이고 효율적인 코드 분석 환경을 구축하는 방법을 배운다.

 

 

정적 코드 분석이란

정적 코드 분석은 소프트웨어를 실행하지 않고 코드 자체를 분석하여 잠재적인 결함, 보안 취약점, 코드 스멜(Code Smell) 등을 발견하는 방법이다.

 

다만, 코드 실행 없이 이루어지기 때문에 메모리 누수, 스레드 경쟁, 성능 문제와 같은 런타임 오류를 발견할 수 없다는 한계가 있다.

 

반면, 동적 코드 분석은 소프트웨어를 실제로 실행하면서 코드의 동작을 분석하여 런타임 문제를 식별하는 방법이다.

이를 통해 메모리 사용, 스레드 동기화, 성능, 보안 취약점 등 실행 중에 발생하는 다양한 문제를 발견할 수 있다.

 

 

Docker Compose로 SonarQube 실행

SonarQube는 기본적으로 H2 데이터베이스를 사용하지만, 안정적인 운영을 위해 PostgreSQL을 사용한다.

컨테이너 환경에서 실행하기 위해 아래와 같은 docker-compose.yml 파일을 작성한다.

 

docker-compose.yml

services:
  sonarqube:
    image: sonarqube:community
    hostname: sonarqube
    container_name: sonarqube
    read_only: true
    depends_on:
      postgresql:
        condition: service_healthy
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://postgresql: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
      - ./sonarqube_temp:/opt/sonarqube/temp
    ports:
      - "9000:9000"
    networks:
      - ${NETWORK_TYPE:-ipv4}

  postgresql:
    image: postgres:15
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 10s
      timeout: 5s
      retries: 5
    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
    networks:
      - ${NETWORK_TYPE:-ipv4}

networks:
  ipv4:
    driver: bridge
    enable_ipv6: false

 

environment

  • SONAR_JDBC_URL: jdbc:postgresql://postgresql:5432/sonar
    PostgreSQL 데이터베이스에 연결하기 위한 JDBC URL
  • SONAR_JDBC_USERNAME: sonar
    PostgreSQL 사용자 이름
  • SONAR_JDBC_PASSWORD: sonar
    PostgreSQL 비밀번호

 

networks

  • ${NETWORK_TYPE:-ipv4}
    `:-ipv4`는 기본값을 설정하는 연산자이다.

 

 

SonarQube & GitHub App 연동

1. SonarQube에 로그인 (http://your-ec2-ip:9000)

  • 초기 아이디 & 비밀번호 : admin

 

2. developer setting 클릭한다.

 

3. new github app 클릭하고, App name과 프로젝트 Homepage URL를 작성한다.

 

4. Callback URL의 경우 SonarQube의 퍼블릭 ip를 설정한다.

 

5. Permissions Access를 아래와 같이 설정한다.

  • Repository
    Checks - Read and write
    Issues - Read and write
    Metadata - Read-only
    Pull requests - Read and write
    Commit statuses - Read-only
    Contents - Read-only
    Workflows - Read and write

 

  • Organization
    Members - Read-only
    Projects - Read-only

 

  • Account (OAuth 로그인 필요로 하는 경우)
    Email address - Read-only

 

6. Import from GitHub Setup 클릭하고, 필수 항목을 입력한다.

  • GitHub API URL, App ID, Clinet ID & Secret, Private Key는 GitHub App Setting을 참고하자.

 

7. Choose an organization의 프로젝트를 선택 후, 희망하는 저장소를 import 한다.

 

8. 아래 선택은 상황에 맞게 하자!

 

9. 추가된 저장소를 선택하고, With GitHub Actions 클릭 후, GitHub Secrets를 아래 내용을 참고해 생성한다.

 

 

10. 아래 내용을 참고해 Workflow YAML과 gradle을 추가한다.

 

 

마무리

SonarQube와 GitHub Actions를 연동하면서,

코드 품질 관리와 자동화를 통해 개발 효율성을 크게 높일 수 있었다.

 

특히, Docker Compose로 환경 구성을 간소화하고,

GitHub Secrets를 활용해 보안성을 유지하며 워크플로우를 구축한 점이 유익했다.

 

다음 포스팅에서는 Jacoco 연동을 통해 테스트 커버리지를

SonarQube로 스스로 검증하는 시간을 가져보겠다.

 


참고 자료 :

SonarQube - GitHub Offical integration

 

GitHub integration

SonarQube's integration with GitHub Enterprise and GitHub.com allows you to maintain code quality and security in your GitHub repositories.

docs.sonarsource.com

 

SonarQube GitHub Offical Docker Example

 

docker-sonarqube/example-compose-files/sq-with-postgres/docker-compose.yml at master · SonarSource/docker-sonarqube

:whale: SonarQube in Docker. Contribute to SonarSource/docker-sonarqube development by creating an account on GitHub.

github.com

블로그의 정보

코드의 여백

rowing0328

활동하기