사용자 도구

사이트 도구


java:sonarqube

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:sonarqube [2018/10/11 16:04]
kwon37xi
java:sonarqube [2022/10/19 10:08] (현재)
kwon37xi
줄 2: 줄 2:
   * http://www.sonarsource.org/  [[java:static_analysis|Java Static Analysis]] 도구   * http://www.sonarsource.org/  [[java:static_analysis|Java Static Analysis]] 도구
   * 코드 품질 관리 툴   * 코드 품질 관리 툴
 +  * [[programming:static_analysis:sonarcloud|SonarCloud]]
   * [[gradle:sonarqube|Gradle SonarQube]]   * [[gradle:sonarqube|Gradle SonarQube]]
  
 ===== SonarQube Scanner for Jenkins ===== ===== SonarQube Scanner for Jenkins =====
   * [[ci:jenkins|Jenkins]] 사용시 [[https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins|Jenkins용 SonarQube Scanner]]를 사용하면 멀티 모듈 프로젝트를 하나로 묶는것이 더 좋고, 자동으로 sonarqube 에 대한 링크까지 생성된다.   * [[ci:jenkins|Jenkins]] 사용시 [[https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins|Jenkins용 SonarQube Scanner]]를 사용하면 멀티 모듈 프로젝트를 하나로 묶는것이 더 좋고, 자동으로 sonarqube 에 대한 링크까지 생성된다.
-  * Maven이나 Gradle Plugin이 아닌 Jenkins 혹은 명령행 Scanner 사용시 [[https://docs.sonarqube.org/display/PLUG/Java+Plugin+and+Bytecode|Java Plugin and Bytecode]]에 있는 ''sonar.java.binaries'', ''sonar.java.libraries''이 올바로 설정이 안되어 Lombok 등에 대한 false alarm이 생하게 된다.+  * Maven이나 Gradle Plugin이 아닌 Jenkins 혹은 명령행 Scanner 사용시 [[https://docs.sonarqube.org/display/PLUG/Java+Plugin+and+Bytecode|Java Plugin and Bytecode]]에 있는 ''sonar.java.binaries'', ''sonar.java.libraries''이 올바로 설정이 안되어 Lombok 등에 대한 false alarm이 생하게 된다.
   * 따라서 위 프라퍼티들을 올바로 설정할 자신이 없으면 그냥 [[gradle:sonarqube|Gradle SonarQube]] 사용 권장   * 따라서 위 프라퍼티들을 올바로 설정할 자신이 없으면 그냥 [[gradle:sonarqube|Gradle SonarQube]] 사용 권장
   * [[https://stackoverflow.com/questions/46362965/sonarqube-lombok-false-positives/46365394|sonarqube + lombok = false positives]] 참조   * [[https://stackoverflow.com/questions/46362965/sonarqube-lombok-false-positives/46365394|sonarqube + lombok = false positives]] 참조
줄 13: 줄 14:
   * [[https://docs.sonarqube.org/display/PLUG/Java+FAQ|Java FAQ - Plugins - Doc SonarQube]] 참조   * [[https://docs.sonarqube.org/display/PLUG/Java+FAQ|Java FAQ - Plugins - Doc SonarQube]] 참조
   * 해당 규칙이 false positive 인 경우 ''NOSONAR'' 보다는 Rule 자체를 변경하는 것이 좋겠다.   * 해당 규칙이 false positive 인 경우 ''NOSONAR'' 보다는 Rule 자체를 변경하는 것이 좋겠다.
-  * ''//NOSONAR''시에 항상 왜 그럴 수 밖에 없었는지 이유를 작성하자.+  * ''%%//%%NOSONAR''시에 항상 왜 그럴 수 밖에 없었는지 이유를 작성하자.
  
-==== //NOSONAR  ==== +<note warning> 
-  * 규칙 위반을 고치는게 불가능할 경우 해당 위반의 줄 맨 끝에 ''//NOSONAR''를 붙인다.+SonarQube 의 코드 퀄리티를 만족시키기 위해서 우리 사정상 어쩔 수 없거나 SonarQube 의 경고 자체가 잘못된 경우가 있는데, 억지로 이게 맞추려고 코드를 꼬아서 만들거나 해서는 안 된다. 이게 오히려 버그를 만든다. 
 + 
 +이럴때는 즉각 팀에 공유하고, 다른 방안을 도출하거나, 아래의 방법으로 처리한다. 
 +</note> 
 + 
 +==== @SuppressWarnings("all") ==== 
 +  * ''@SuppressWarnings("all")''를 클래스에 붙이면 해당 클래스의 모든 규칙 위반을 무시한다. 
 +==== NOSONAR  ==== 
 +  * 규칙 위반을 고치는게 불가능할 경우 해당 위반의 줄 맨 끝에 ''%%//%%NOSONAR''를 붙인다.
  
 ==== @SuppressWarnings("squid:룰번호") ==== ==== @SuppressWarnings("squid:룰번호") ====
줄 46: 줄 55:
   * 알림은 자기 계정의 **My Account -> Notifications**에서 프로젝트 단위, 혹은 전체 프로젝트를 지정할 수 있다.   * 알림은 자기 계정의 **My Account -> Notifications**에서 프로젝트 단위, 혹은 전체 프로젝트를 지정할 수 있다.
  
 +==== sonar.qualitygate.wait=true ====
 +  * [[https://docs.sonarqube.org/8.5/analysis/gitlab-cicd/|GitLab CI/CD | SonarQube Docs]]
 +  * sonarqube 8.x 에서는 client 에서 ''sonar.qualitygate.wait=true'' 프라퍼리트를 지정하면 sonarqube quality gate 통과여부를 검사하고 해당 job 을 성공/실패시킬 수 있다.
 ===== Jenkins Pipeline에서 Quality Gate 응답 대기 ===== ===== Jenkins Pipeline에서 Quality Gate 응답 대기 =====
 +  * sonarqube 8.x 에서는 불필요. sonarqube gradle/maven plugin 프라퍼티에 ''sonar.qualitygate.wait=true'' 사용.
 +  * [[https://www.jenkins.io/doc/pipeline/steps/sonar/|SonarQube Scanner for Jenkins]] 플러그인 설치 상태에서
 +    * Jenkins 설정에서 sonarqube URL / 인증등을 설정해주고서
 +    * [[https://plugins.jenkins.io/sonar-quality-gates/|sonar-quality-gates]] 플러그인은 사용 안하는게 나은듯.
   * Quality Gate 응답을 기다리고 실패이면 UNSTABLE로 변경<code groovy>   * Quality Gate 응답을 기다리고 실패이면 UNSTABLE로 변경<code groovy>
 timeout(time: 10, unit: 'MINUTES') { timeout(time: 10, unit: 'MINUTES') {
줄 57: 줄 73:
 </code> </code>
   * Declarative Pipeline 에서 아래 사용시 무조건 FAILURE로 바꿔버림<code>   * Declarative Pipeline 에서 아래 사용시 무조건 FAILURE로 바꿔버림<code>
- waitForQualityGate abortPipeline: true+stage("Quality Gate") { 
 +    steps { 
 +        timeout(time: 2, unit: 'MINUTES') { 
 +            waitForQualityGate abortPipeline: true 
 +        } 
 +    } 
 +
 </code> </code>
 +  * Sonarqube의 [[https://docs.sonarqube.org/latest/project-administration/webhooks/|Administration -> Configuration -> Web Hooks]] 에서 ''http://JENKINS-SERVER/sonarqube-webhook/'' 설정 필요.
 ===== Installing Sonar ===== ===== Installing Sonar =====
   * [[http://docs.codehaus.org/display/SONAR/Installing+Sonar|Installing Sonar]]   * [[http://docs.codehaus.org/display/SONAR/Installing+Sonar|Installing Sonar]]
줄 93: 줄 117:
 </code> </code>
   * 위와 같은 오류 발생시에는 SonarQube **Settings -> General Settings -> Java -> FindBugs**에 들어가 FindBug에서 timeout을 늘려줘야한다.   * 위와 같은 오류 발생시에는 SonarQube **Settings -> General Settings -> Java -> FindBugs**에 들어가 FindBug에서 timeout을 늘려줘야한다.
 +
 +===== Analysis Parameter =====
 +  * https://docs.sonarqube.org/latest/analysis/analysis-parameters/
 +
 +==== duplication exclude ====
 +  * ''sonar.cpd.exclusions=sonar.cpd.exclusions=**/AssemblyInfo.cs,**/*.g.cs,**/Mappings/*.cs''
 +
  
 ===== 참조 ===== ===== 참조 =====
줄 98: 줄 129:
   * [[https://www.sonarsource.com/docs/CognitiveComplexity.pdf|SonarQube 인지적 복잡도 Cognitive Complexity]]   * [[https://www.sonarsource.com/docs/CognitiveComplexity.pdf|SonarQube 인지적 복잡도 Cognitive Complexity]]
   * [[https://github.com/SonarQubeCommunity/sonar-build-breaker|SonarQubeCommunity/sonar-build-breaker: Build Breaker Plugin for SonarQube]]   * [[https://github.com/SonarQubeCommunity/sonar-build-breaker|SonarQubeCommunity/sonar-build-breaker: Build Breaker Plugin for SonarQube]]
 +  * [[https://medium.com/@joypinkgom/%EC%86%8C%EC%8A%A4-%EC%A0%95%EC%A0%81-%EB%B6%84%EC%84%9D%EB%8F%84%EA%B5%AC-sonarqube-%EB%A6%AC%EC%84%9C%EC%B9%AD-9d48fc62b01f|소스 정적 분석도구 SonarQube 리서칭 - Chan Ahn - Medium]]
java/sonarqube.1539241484.txt.gz · 마지막으로 수정됨: 2018/10/11 16:04 저자 kwon37xi