[SonarQube] SonarQube 업그레이드에 따른 SonarScanner 버전을 확인해보자 (SonarQube 10.5.1)

     

     

     

    SonarQube와 SonarScanner를 간단하게 설명하자면 SonarQube가 코드 분석을 수행하고, 분석 결과를 저장하는 서버라면 SonarScanner는 실제 코드 분석을 수행하는 클라이언트 도구라고 생각하면 된다.

     

    여기서 궁금한 점 만약, SonarQube 버전이 올라가면 SonarScanner 버전도 올려야 할까? 

     

    결론부터 말하자면 그렇다.

    💡 SonarQube 10.5 버전으로 업그레이드 시, Sonar-Scanner 또한 업그레이드 필요 (최소 5.0.0.2966 이상 버전 사용 필수)

     

    정말로 그런지 테스트를 해보자. 

     

    기존 버전 

    SonarQube : 8.9.4 community Edition

    Sonar-Scanner : 4.8.0.2856

    테스트 대상 버전

    SonarQube : 10.5.1 community Edition

    Sonar-Scanner : 최소 5.0.0.2966이상 ~ 6.1.0.4477

    테스트 결과

    SonarQube Version SonarScanner 결과 에러 메세지  비고
    10.5.1 4.8.0.2856 FAILURE java.lang.UnsupportedClassVersionError: SonarScanner Java Verion이 SonarQube의 Version과 맞지 않아 에러 발생함
    10.5.1  6.1.0.4477 EXECUTION SUCCESS X 24.09.21 기준 SonarScanner 최신 버전
    10.5.1 5.0.0.2966 EXECUTION SUCCESS X 실행 가능한 최소 버전 확인 
    8.9.4 4.8.0.2856 EXECUTION SUCCESS X 기존 버전

     

    에러 로그 상세

    • SonarScanner에서 내부적으로 사용하는 Java version이 달라 발생한 에러이다. SonarScanner 4.8.0 버전의 Java Version Java 11.0.17 Eclipse Adoptium (64-bit)을 사용한다. 
    INFO: Scanner configuration file: C:\\경로\\SonarQubeTest\\sonar-scanner-4.8.0.2856-windows\\bin\\..\\conf\\sonar-scanner.properties
    INFO: Project root configuration file: NONE
    INFO: SonarScanner 4.8.0.2856
    INFO: Java 11.0.17 Eclipse Adoptium (64-bit)
    INFO: Windows 10 10.0 amd64
    INFO: User cache: C:\\Users\\seong\\.sonar\\cache
    INFO: Analyzing on SonarQube server 10.5.1.90531
    INFO: Default locale: "ko_KR", source code encoding: "x-windows-949" (analysis is platform dependent)
    INFO: ------------------------------------------------------------------------
    INFO: EXECUTION FAILURE
    INFO: ------------------------------------------------------------------------
    INFO: Total time: 0.845s
    INFO: Final Memory: 4M/17M
    INFO: ------------------------------------------------------------------------
    ERROR: Error during SonarScanner execution
     org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
            at java.base/java.lang.ClassLoader.defineClass1(Native Method)
            at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
            at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.base/java.net.URLClassLoader.defineClass(Unknown Source)
            at java.base/java.net.URLClassLoader$1.run(Unknown Source)
            at java.base/java.net.URLClassLoader$1.run(Unknown Source)
            at java.base/java.security.AccessController.doPrivileged(Native Method)
            at java.base/java.net.URLClassLoader.findClass(Unknown Source)
            at org.sonarsource.scanner.api.internal.IsolatedClassloader.loadClass(IsolatedClassloader.java:82)
            at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
            at org.sonarsource.scanner.api.internal.batch.DefaultBatchFactory.createBatch(DefaultBatchFactory.java:32)
            at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.base/java.lang.reflect.Method.invoke(Unknown Source)
            at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
            at com.sun.proxy.$Proxy0.execute(Unknown Source)
            at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
            at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
            at org.sonarsource.scanner.cli.Main.execute(Main.java:126)
            at org.sonarsource.scanner.cli.Main.execute(Main.java:81)
            at org.sonarsource.scanner.cli.Main.main(Main.java:62)
    ERROR:
    ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.

     

    주요 에러 메세지를 좀 더 자세히 확인해 보자.

    has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

     

    1. class file version 61.0(=Java 17에서 컴파일된 클래스) 소나큐브 10.5 버전은 Java 17로 개발

    2. this version of the Java Runtime only recognizes class file versions up to 55.0(= Java 11까지만 인식할 수 있다.) 소나스캐너 4.8 버전은 Java 11로 개발

     

    즉, Java Runtime 환경이 Java 11이기 때문에 Java 17로 컴파일된 클래스를 실행을 할 수 없다는 뜻이다. 

     

    SonarScanner 버전별 명령어 Sample (Window)

    SonarScanner 6.1 Ver.

    {INSTALL_PATH}\sonar-scanner-6.1.0.4477-windows-x64\bin\sonar-scanner -Dsonar.token=토큰정보 -Dsonar.projectKey=프로젝트키 -Dsonar.java.binaries=.

     

    SonarScanner 4.8 Ver.

    {INSTALL_PATH}\sonar-scanner-4.8.0.2856-windows\bin\sonar-scanner -Dsonar.login=토큰정보 -Dsonar.projectKey=프로젝트키 -Dsonar.java.binaries=.

     

    비고 

     

    • SonarQube 10.5 버전 이후로 sonar.login, sonar.password 파라미터가 Deprecated 됨!
    • 토큰정보를 설정하는 파라미터가 다르다. (6.1 Ver. -Dsonar.token / 4.8 Ver. -Dsonar.login

    왼쪽: 6.1 Ver. 오른쪽: 4.8 Ver.

     

     

    결론

    💡  SonarQube와 SonarScanner의 버전 호환성은 아주 중요한 요소로, SonarQube 버전을 올릴 거면 SonarScanner 버전을 같이 올리자! 

     

    Ref.

    소나큐브 8.9 공식 가이드

    • Java version 11

    소나큐브 10.5 공식 가이드

    • Java version 17

     

     

    728x90

    댓글