【发布时间】:2019-12-17 15:44:49
【问题描述】:
我正在运行一个詹金斯管道。在最后一步,我的声纳分析出现错误:
var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/SonarQube_Scanner/bin/sonar-scanner
Could not find 'java' executable in JAVA_HOME or PATH.
我在我的 centos 7 中设置了我的 JAVA_HOME,当我运行 echo $JAVA_HOME 时,我得到了:
echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64
文件 sonar-scanner 中出现错误:
if [ -n "$JAVA_HOME" ]
then
java_cmd="$JAVA_HOME/bin/java"
else
java_cmd="$(which java)"
fi
java_cmd="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jre/bin/java"
echo $java_cmd
#export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64
if [ -z "$java_cmd" -o ! -x "$java_cmd" ] ; then
echo "Could not find 'java' executable in JAVA_HOME or PATH."
exit 1
fi
我尝试了很多解决方案,但仍然遇到同样的错误,请问我可以纠正它吗?
我的詹金斯管道脚本:
pipeline {
agent {
docker {
image 'node:6-alpine'
args '-v /home/nginx/console:/home -p 3000:3000'
}
}
environment {
CI = 'true'
}
stages {
stage('Install') {
steps {
sh 'npm install'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
stage('Build') {
steps {
sh 'npm run build'
}
}
stage('Deploy') {
steps {
sh 'cp -R dist/* /home'
}
}
stage('Sonarqube analysis') {
steps {
script {
scannerHome = tool 'SonarQube Scanner';
}
withSonarQubeEnv('sonar') {
sh "${scannerHome}/bin/sonar-scanner"
}
}
}
}
}
【问题讨论】:
-
export PATH="$PATH:$JAVA_HOME/bin" -
@ElliottFrisch 路径设置正确。这就是为什么当我运行 echo $JAVA_HOME 时,我得到了正确的路径。但是为什么声纳找不到这条路呢?
-
但是它是导出的吗? 事实是你的电脑不同意你。
-
你指定全局代理到docker镜像
'node:6-alpine',所有阶段都将在从这个镜像启动的容器中执行,除非你在阶段级别指定代理覆盖全局代理。如果 docker 镜像未设置 JAVA,则该错误是预期的。 -
你可以为
stage('Sonarqube analysis')指定一个java docker镜像为agent,jenkins会将工作工作区挂载到容器中,因此你的工作工作区的源代码可以在声纳扫描时在容器中访问。无需将声纳扫描分离到另一个管道作业中。或者你可以使用tool <jdk installation>来提供java,如果你已经在 Jenkins Admin 中配置了它,而不使用 java docker 镜像。
标签: java reactjs jenkins sonarqube