코드 품질 분석: 소나큐브는 다양한 프로그래밍 언어(Java, C#, JavaScript 등)의 코드를 분석하여 버그, 취약점, 코드 스멜 등을 찾아냅니다.
자동화 및 통합: 소나큐브는 CI/CD 파이프라인에 통합되어 자동으로 코드 품질을 검사할 수 있습니다.
보안 취약점 탐지: OWASP Top 10 등 보안 규칙을 기반으로 보안 취약점을 찾아냅니다.
커스텀 룰셋 지원: 사용자 정의 규칙을 추가하여 특정 요구사항에 맞는 코드 검사를 수행할 수 있습니다.
웹 기반 대시보드: 웹 브라우저에서 코드 분석 결과를 확인하고 관리할 수 있습니다.
정적 코드 분석: 실제 실행 없이 코드 자체를 분석하여 문제점을 발견할 수 있습니다.
코드스멜이란? 프로그래밍 코드에서 문제를 일으킬 가능성이 있는 프로그램 소스 코드의 특징을 말한다. 코드스멜의 종류: 중복 코드, 긴 메소드, 복잡한 조건문, 너무 많은 주석&클래스&메소드&전역 변수, 하드코딩 개선 방법: 메소드 추출, 조건문&클래스&긴 메소드 분해, 변수 이름 변경
실행하자마자 바로 창이 꺼지는 경우 해당 포트 번호가 이미 실행 중인 경우일 수 있음 netstat -nao | findstr :9000
위 결과일 경우 PID 18964를 종료해주면 된다. taskkill /f /pid 18964
WARNING: Please consider reporting this to the maintainers of org.sonar.process.PluginSecurityManager WARNING: System::setSecurityManager will be removed in a future release
위 오류는, 최신 자바 버전에서 System.setSecurityManager() 메소드를 지원 하지 않아 발생하는 문제라고 한다.
오류가 발생해도 실행에는 지장이 없으니 그대로 냅두면 된다!
아래와 같이SonarQube is operational가 표시되면 실행이 완료된 것이다.
소나큐브 웹 접속
1. 소나큐브 웹 접속
http://localhost:9000/ 또는 http://127.0.0.1:9000/
2. 로그인
초기 ID/PW는 admin 이므로, 입력 후 로그인을 클릭해준다.
이 후 비밀번호를 설정하는 화면이 뜬다.
7.2.1 버전의 경우 로그인 후 빠른 연동 창이 뜬다. 프로젝트명 입력 후 생성하기를 클릭해주면 토큰이 생성된다. 아래 토큰은 다시 확인이 불가하니 어디에 기록해놓는 것을 추천한다!
이후 자신의 개발 환경을 세팅해주면 친절하게 설명이 나온다.
혹여 ./gradlew sonarqube ~~ 실행시 아래 오류가 발생한다면 Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
명령어에 직접 변수를 주는 것이 아닌, build.gradle 파일에 직접 선언해주면 오류가 발생하지 않는다. gradle에 선언해놓고 빌드한 후 ./gradlew sonarqube 만 입력하여 실행해주면 된다!
소나큐브 프로젝트 연결(최신 버전)
7.2.1의 경우 로그인 후 바로 연동 과정을 진행하는 것이기 때문에 아래 단계가 필요하지 않다.
① 신규 프로젝트 생성
1. 신규 로컬 프로젝트 생성
로컬에 해당 프로젝트 소스가 있는 경우 'Create a local project' 를 클릭한다.
이후 아래 화면에서 설정하고 싶은 프로젝트명을 입력한 뒤 메인 브랜치명을 입력해준다.
나의 경우 메인 브랜치명이 Master기 때문에 Master로 설정해줬다.
이후 화면에서 Use the global setting으로 선택해주는게 편하다.
그 다음 Create project 클릭!
②-ⓐ Local 프로젝트 연결
1. 로컬 프로젝트 연결
아래처럼 메인화면에 떠있는 프로젝트를 클릭해준다.
이후 Locally 를 선택하여 지시사항대로 실행해준다.
지시 사항대로 수정 사항 커밋 후 기다리면 코드가 연동되어있는 것을 확인 할 수 있다!
②-ⓑ GitLab 프로젝트 연결
1. GitLab CI에 Sonar 관련 변수 설정
아래처럼 메인화면에 떠있는 프로젝트를 클릭해준다.
이후 With GitLab CI를 클릭해준다.
GitLab CI/CD 변수에 SONAR_HOST_URL, SONAR_TOKEN 변수를 지정하는 방법 그대로 진행해주면 된다.
설정에 CI/CD 메뉴가 없을 경우프로젝트-Settings-Visibility, project features, permissions의expand를클릭해준다. 이 후 CI/CD를 활성화 상태로 변경해주면 된다.
2. 깃랩 연결
Administration -> Configuration -> General Settings -> DevOps Platform Integrations 로 이동.
여기서 GitLab 섹션을 클릭한 뒤 Create configuration 을 클릭한다.
이후 아래와 같은 화면이 출력된다.
Personal Access Token은 GitLab에서 발급받으면 되며, 방법은 아래에 따로 정리해놨다.
3. build.gradle 설정
아래와 같이 설정해주면 된다.
org.sonarqube 버전은 gradle과 자바 버전에 맞게 설정해줘야한다.
plugins { ... id "org.sonarqube" version "4.0.0.2929" }
sonarqube-check: stage: sonarqube-check image: gradle:8.2.0-jdk17-jammy # 프로젝트에 맞는 Docker 이미지로 변경 필요 variables: SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" GIT_DEPTH: "0" SONAR_HOST_URL: "http://your-sonarqube-server" # SonarQube 서버 URL로 변경 SONAR_LOGIN: "${SONAR_TOKEN}" # GitLab CI/CD 환경변수에 SONAR_TOKEN 설정 필요 cache: key: "${CI_JOB_NAME}" paths: - .sonar/cache script: - gradle sonarqube -Dsonar.projectKey=프로젝트명 -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_LOGIN allow_failure: true only: # 사용하는 브랜치명만 입력 - merge_requests - master - main - develop
sonarqube-vulnerability-report: stage: sonarqube-vulnerability-report script: - 'curl -u "${SONAR_TOKEN}:" "${SONAR_HOST_URL}/api/issues/gitlab_sast_export?projectKey=프로젝트명&branch=${CI_COMMIT_BRANCH}&pullRequest=${CI_MERGE_REQUEST_IID}" -o gl-sast-sonar-report.json' allow_failure: true only: # 사용하는 브랜치명만 입력 - merge_requests - master - main - develop artifacts: expire_in: 1 day reports: sast: gl-sast-sonar-report.json dependencies: - sonarqube-check
위 파일을 푸시하고 나면 아래와 같이 GitLab에 해당 yml 파일이 보인다.
GitLab의 Access Token 발급 받는 방법
GitLab 접속 후 프로필 아이콘 클릭 후 Preferences 를 클릭해준다.
이후 왼쪽 메뉴에서 Access Tokens를 클릭해준다.
SonarQube 설명에 따르면 최소한의 리포터 권한은 있어야한다고 나온다.
api와 read_repository, read_api 권한을 체크한 후 생성해주면 된다.
create 클릭 시 아래 사진처럼 토큰이 생성된다.
Your new personal access token 에 있는 값을 복사해주면 된다.
GitLab Runner 설정
모든 설정을 완료한 뒤 CI/CD-Jobs 섹션에 들어가보면 failed가 떠있고, 상세 페이지로 이동해보면 아래 오류 메시지가 띄워져 있을 수 있다.
Pipeline #12 pending with stages
이럴 경우 GitLab Runner 설정이 필요한 것이다.
아래 doc을 참고하여 설치해주면 되는데, register 진행 시GitLab 프로젝트의 Settings - CI/CD - Runners의 expand를 클릭하여 Set up a specific runner manually에 있는 링크, 토큰 값들을 이용하여 세팅해주면 된다.