问题阐述
新版的sonarQube在扫描java代码的时候,要求sonar-project.properties里sonar.java.binaries字段必须填写。这个sonar.java.binaries是“指向包含与源文件对应的已编译字节码文件的目录”,一般来说,maven框架的话,是target/classes。
但是!问题来了,有的时候,我们的代码静态扫描是在还没有编译之前就开始的。例如我们从Jenkins的pipeline里定义了git 拉取代码,然后直接执行SonarQube analysis。并不进行编译。这样我们的Jenkins里是会报错的。那我们该如何处理呢?
解决方案
1.错误的解决方案:网上流行的是去sonarQube的plugins下面的sonar-java替换成4.10版本。但是,这样做其实是不对的,这样会引发其他的不兼容报错
2.正确的解决方案是:先生成一个空的目录,然后把sonar-project.properties指向这个目录。这样就能避免这个错误。下面提供一段pipeline,以供参考
Talk is cheap,show me the code
stage('create empty folder') { steps { sh "mkdir /tmp/empty" sh "echo -e 'sonar.java.binaries=/tmp/empty' >> ./sonar-project.properties" } } stage('SonarQube analysis') { steps { script { def scannerHome = tool 'sonarqubescanner4.0' withSonarQubeEnv('sonar') { // If you have configured more than one global server connection, you can specify its name sh "${scannerHome}/bin/sonar-scanner" } } } }