Jenkins 上的 Sonarscanner:在 JAVA_HOME 或 PATH 中找不到“java”可执行文件

Posted

技术标签:

【中文标题】Jenkins 上的 Sonarscanner:在 JAVA_HOME 或 PATH 中找不到“java”可执行文件【英文标题】:Sonarscanner on Jenkins: Could not find 'java' executable in JAVA_HOME or PATH 【发布时间】:2021-03-11 12:05:29 【问题描述】:

我正在尝试在 Jenkins(在 Linux 上运行)上运行 .net core sonarscanner 工具,例如:

dotnet sonarscanner begin ...

但它给出了错误

Could not find 'java' executable in JAVA_HOME or PATH.

我不确定为什么会这样,因为我在管道顶部明确设置了路径:

environment 
    JAVA_HOME="$tool 'openjdk-11'/jdk-11"
    PATH="$tool 'openjdk-11'/jdk-11/bin:$HOME/.dotnet/tools/:$PATH" 
  

通过运行以下命令,我可以看到这看起来是正确的:

sh "echo \"Java Home:\" $JAVA_HOME"

生产:

Java Home: /var/lib/jenkins/tools/hudson.model.JDK/openjdk-11

并列出目录:

sh "ls /var/lib/jenkins/tools/hudson.model.JDK/openjdk-11/jdk-11/bin"

产生:

+ ls /var/lib/jenkins/tools/hudson.model.JDK/openjdk-11/jdk-11/bin
jaotc
jar
jarsigner
java
javac
javadoc
javap
jcmd
jconsole
jdb
jdeprscan
jdeps
jhsdb
jimage
jinfo
jjs
jlink
jmap
jmod
jps
jrunscript
jshell
jstack
jstat
jstatd
keytool
pack200
rmic
rmid
rmiregistry
serialver
unpack200

然而,声纳扫描仪仍然失败并出现错误:

Could not find 'java' executable in JAVA_HOME or PATH.

更新:

关于 Dimitry 的评论 - 我正在使用工具:

在管道的顶部有这个:

  tools
      jdk 'openjdk-11'
  

关于 Marcinek 的回答 - 很好。我已经意识到在管道顶部设置 JAVA_HOME 实际上并没有做任何事情。无论我设置什么,它仍然是:

/var/lib/jenkins/tools/hudson.model.JDK/openjdk-11

【问题讨论】:

应该有一个 jenkins 配置,Java 应该是。看这里:subscription.packtpub.com/book/networking_and_servers/…因为可以有多个java安装。 我遇到了同样的问题。你解决了吗? 【参考方案1】:

变量$JAVA_HOME应该指向java的主目录,添加bin可以找到bin文件夹

您的 $JAVA_HOME 变量指向

Java Home: /var/lib/jenkins/tools/hudson.model.JDK/openjdk-11

要查找 java 可执行文件,您必须附加 jdk-11/bin

因此 JAVA_HOME 的正确路径应该是:

/var/lib/jenkins/tools/hudson.model.JDK/openjdk-11/jdk-11

PATH 应该指向:

/var/lib/jenkins/tools/hudson.model.JDK/openjdk-11/jdk-11/bin

【讨论】:

好地方。我已经更新了我的问题 - 我似乎无法更改 JAVA_HOME 变量【参考方案2】:

您可以使用“工具”部分在管道中使用 java。

pipeline 
    agent any
    tools 
        jdk 'your-jdk-tool-name' 
    

【讨论】:

是的 - 这就是我正在做的事情

以上是关于Jenkins 上的 Sonarscanner:在 JAVA_HOME 或 PATH 中找不到“java”可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

Sonarscanner MSBuild 工具未在管道中运行 - Jenkins

gitlab+jenkins+maven+docker持续集成——sonarqube及sonarscanner代码审查

SONARSCANNER命令行执行

利用 SonarScanner 静态扫描 Rainbond 上的 Maven 项目

SonarScanner 整合 SonarQube 代码质量检查完美方案

sonar+Jenkins注意的关键点或坑及sonar规则忽略或修改