# SonarQube 분석 설정 (SonarScanner CLI 용) # # Jenkinsfile.sonar 가 이 파일을 그대로 읽고, 아래 항목만 실행 시점에 -D 로 덮어쓴다. # sonar.projectVersion : 빌드 번호 # sonar.java.libraries : ci/sonar-classpath.gradle 이 덤프한 컴파일 클래스패스 # sonar.java.test.libraries : 위 + 테스트 클래스패스 # sonar.junit.reportPaths : 테스트를 실행한 경우에만 # # 로컬에서 수동 분석 시(스캐너는 JDK 17 필요): # gradle clean classes testClasses # gradle -I ci/sonar-classpath.gradle exportSonarClasspath # sonar-scanner -Dsonar.host.url=... -Dsonar.token=... \ # -Dsonar.java.libraries="$(cat build/sonar/java-libraries.txt)" sonar.projectKey=djb-eapim-portal sonar.projectName=DJB eAPIM Portal sonar.sourceEncoding=UTF-8 # --- 분석 대상 ------------------------------------------------------------- # src/main/resources 를 포함시켜 Thymeleaf 템플릿(XSS), yml/properties(하드코딩 시크릿)까지 검사한다. sonar.sources=src/main/java,src/main/resources sonar.tests=src/test/java # --- Java ------------------------------------------------------------------ # 소스는 Java 8. 스캐너 실행 JRE 는 별개로 17 이상이어야 한다(Jenkinsfile.sonar 참고). sonar.java.source=8 sonar.java.binaries=build/classes/java/main sonar.java.test.binaries=build/classes/java/test # --- 제외 대상 ------------------------------------------------------------- # 서드파티 번들/컴파일 산출물/바이너리. 분석해도 우리가 고칠 수 없는 코드는 뺀다. sonar.exclusions=\ **/build/**,\ **/node_modules/**,\ **/lib/**,\ **/libs/**,\ **/local_jars/**,\ src/main/resources/static/plugins/**,\ src/main/resources/static/js/egovframework/**,\ src/main/resources/static/js/**/*.min.js,\ src/main/resources/static/js/lodash.js,\ src/main/resources/static/js/popper.js,\ src/main/resources/static/js/daterangepicker.js,\ src/main/resources/static/js/json-lint.js,\ src/main/resources/static/html/**,\ src/main/resources/static/css/**,\ src/main/resources/static/sass/**,\ src/main/resources/static/font/**,\ src/main/resources/static/webfonts/**,\ src/main/resources/static/img/** # 자동 생성 코드(MapStruct Impl, QueryDSL Q클래스)는 build/ 아래라 이미 제외된다. # Thymeleaf 인라인 표현식([[${...}]], /*[[${...}]]*/)은 JS 파서가 읽지 못해 # "Failed to parse file ... Unexpected token" 으로 분석이 중단된다. # JS 분석에서만 빼고 HTML(web) 센서는 그대로 두어 템플릿 XSS 룰은 유지한다. # 기본값이 **/node_modules/** 이므로 재정의 시 함께 명시해야 한다. sonar.javascript.exclusions=\ **/node_modules/**,\ src/main/resources/templates/** # --- SCM ------------------------------------------------------------------- # blame 기반 "새 코드" 판정을 위해 Jenkins Job 에서 shallow clone 을 쓰지 않는다. sonar.scm.provider=git # --- 브랜치 ---------------------------------------------------------------- # sonar.branch.name 은 SonarQube Developer Edition 이상에서만 동작한다. # Community Edition 에서 지정하면 분석이 실패하므로 기본적으로 설정하지 않는다. # sonar.branch.name=feats/ci-test