[Infra] SonarQube Jenkins 연동

SonarQube

프로그램 정적 분석 도구로, 실행 없이 코드를 분석하는 것

 

SonarQube 설치

  • docker-compose를 이용해 설치하는 방법
  • sonarqube를 사용하기 위해서는 PostgreSQL DB가 필요
    • sonarqube를 실행하기 전, postgresql에서 sonar 유저와 DB 생성 필요
  • docker-compose.yml
  sonarqube:
    image: sonarqube:community
    ports:
     - "9000:9000"
    container_name: sonarqube
    depends_on:
      - postgres
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/${DATABASE}
      SONAR_JDBC_USERNAME: ${DB_USERNAME}
      SONAR_JDBC_PASSWORD: ${DB_PASSWORD}
      SONAR_WEB_CONTEXT: /sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
    networks:
     - infra

  postgres:
    image: postgres:13
    container_name: postgresql
    environment:
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DATABASE}
    networks:
      - infra
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data
      
      
...
volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

 

SonarQube - Nginx

  • nginx를 설정할 때, sonar.web.context 기본 설정이 "/" 이므로 docker-compose.yml 이를 변경해주어야 함
location /sonar {
     proxy_pass          https://sonarqube:9000;
     proxy_set_header    Host               $host;
     proxy_set_header    X-Real-IP          $remote_addr;
     proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
     proxy_set_header    X-Forwarded-Proto  $scheme;
}

SonarQube 와 Jenkins 연동

  • SonarQube 사이트에 정상적으로 접근 되었을 때, 프로젝트 생성
  • administration → security → users → token 생성 ⇒ 사용자로 토큰 생성

Jenkins 설정

  • plugins → SonarQube Scanner for Jenkins
  • 위에 sonarqube에서 받은 token을 creditionals에서 secret text로 등록
  • Jenkins 관리 → System
    • SonarQube servers 에서 Envirionment variables 체크
    • name 설정
    • server url 설정 → nginx 한 경로
    • 위에서 creditional 토큰이 나타나면 그걸 등록
  • Jenkins 관리 → Tool
    • SonarQube Scanner Installations
      • Name 설정
      • version 자동 생성되므로 하나 선택해서 설정

Spring Boot 적용

  • Gradle에 해당 내용 추가
plugins {
    id "org.sonarqube" version "4.4.1.3373"
} 

sonar {
    properties {
        property "sonar.projectKey", "{프로젝트 생성 이름}"
        property "sonar.projectName", "{앱이름}"
    }
}

 

  • pipeline 추가
	stage('Compile and SonarQube Analysis') {
            steps {
                script {
                    withSonarQubeEnv('{SonarQube 서버에서 등록한 이름}') {
                        dir("./backend") {
                          sh "chmod +x gradlew"
                          sh "./gradlew clean compileJava sonarqube -Dsonar.gradle.skipCompile=true"
                        }
                    }
                }
            }
        }

 

React 적용

  • sonar-project.properties 파일 생성
    • sonar.projectKey={프로젝트 이름} 추가
  • pipeline 추가
	stage('SonarQube Analysis') {
          def scannerHome = tool '{SonarQube Tools에서 등록한 Scanner 이름}';
          withSonarQubeEnv('{SonarQube 서버에서 등록한 이름}') {
            sh "${scannerHome}/bin/sonar-scanner"
          }
        }

 

 

SonarQube 분석

처음 화면

  • 오른쪽 pass는 quality gate status로, pass or faile을 통해 프로젝트 상태를 확인가능
  • 아래 하단은 코드 분석 요약
    • Security: 보안성 규칙 - 해커가 악용할 수 있는 코드에 대한 규칙이거나 CWE, SANS Top 25, OWASP Top 10을 근간으로 하는 규칙인가
    • Reliability: 신뢰성 규칙 - 명백하게 틀린 규칙이거나 잘못된 코드에 대한 규칙인가
    • Maintainability: 유지보수성 - 규칙이 신뢰성도 아니고 보안성도 아닌 경우
    • Hotspots Reviewed: 주의가 필요한 잠재적인 보안 이슈
    • Duplications: 코드 중복

Overview

  • 특정 프로젝트를 이동하면, 프로젝트 분석 결과 출력
  • Overview, Issue, Security Hotsspots, Measures, Code, Activity 6개의 메뉴로 구성

Quality Gate Status

  • Pass or Fail (통과여부)에 따라 프로젝트의 상태를 쉽게 확인 가능
  • Passed가 아닌 경우 문제를 일으킨 측정항목 및 통과에 필요한 값들을 즉시 확인 가능

OverallCode

  • 주요 지표에 대한 합계를 최근 분석과 전체로 구분하여 보여줌
  • 해당 지표를 클릭하면 수정해야 할 상세 내용을 출력

Issues

  • 모든 이슈 사항을 확인 가능
  • 왼쪽의 필터를 통해 원하는 이슈만 찾아 볼 수 있음
  • Severity : 심각도 - 프로젝트 분석을 위해서 규칙들의 집한인 Quality Profile을 사용하며 적용된 규칙이 얼마나 심각하고 중요한지를 나타냄

코드 뷰어

  • 이슈를 클릭하면 상세페이지로 이동하여 코드 뷰어가 보임
  • 문제의 내용을 보여주고 해결을 위한 가이드 제공
  • 상단에는 해당 파일의 분석 지표를 요약해서 보여주며, 문제가 발생한 라인이 어디인지 상세 내용으로 표시

  • Why is this an Issue 클릭시 이슈 이유 제공
  • How can I fix it? 은 이슈를 해결할 방안 제시
  • Activity: 이슈를 만든 활동
  • 중복 코드 발생시 좌측의 코드 라인 옆에 회식 수직 라인으로 표시되며, 회색라인을 클릭하면 중복된 파일과 라인 정보가 나타남

Security Hotspot

  • 보안에 위협이 될 수 있는 분석 결과

Measures

  • Reliablility, Security, Duplications 등 다양한 관점의 분석 결과를 주요 지표와 그래프로 보여주며, 해당 문제의 상세 페이지로 이동하는 드릴 다운 기능 제공

Code

  • 프로젝트의 디렉토리 구조와 실제 코드
  • 디렉토리나 파일별 주요 지표 확인 가능

Activity

  • 프로젝트 분석 수행 히스토리 제공

'Infra' 카테고리의 다른 글

[Infra] BackEnd Blue-Green 배포  (1) 2024.05.27
[Infra] Spring Boot Pipeline 구축  (0) 2024.05.25
[Infra] React Pipeline 구축  (0) 2024.05.25
[Infra] Nginx 설정  (0) 2024.05.25
[Infra] Docker-Compose 를 통한 DB 구축  (0) 2024.05.25