sonarQube解决sonar.java.binarie必填参数的问题
问题阐述
新版的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"
}
}
}
}