파란하늘의 지식창고
article thumbnail
반응형

could not find 'java' executable in java_home or path. 에러가 꼭 sonarqube를 사용할 때만 발생하는 것은 아니지만 내 경우 sonarqube scanner를 사용하려고 할 때 저 에러가 발생하였다.

[bluesky-boot maven deploy] $ /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/SonarQube_Scanner/bin/sonar-scanner -Dsonar.host.url=http://172.18.97.117:9000 "-Dsonar.projectBaseDir=/var/jenkins_home/workspace/bluesky-boot/bluesky-boot maven deploy"
test /var/jenkins_home/tools/hudson.model.JDK/jdk11/bin/java
Could not find 'java' executable in JAVA_HOME or PATH.
WARN: Unable to locate 'report-task.txt' in the workspace. Did the SonarScanner succeeded?
ERROR: SonarQube scanner exited with non-zero code: 1

이 경우 원인은 sonarqube가 아니라 jenkins jdk 설정이 문제였다.

만약 Global Tool Configuration에서 아래와 같이 Open JDK를 설정하였다면

실제 설치되는 위치는 "/var/jenkins_home/tools/hudson.model.JDK/jdk11/jdk-11" 이 된다.

sonarqube scanner를 실행하는 "/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/SonarQube_Scanner/bin/sonar-scanner"의 스크립트에서 찾는 java path는 다음과 같다.

if [ ! -f "$jar_file" ] ; then
  echo "File does not exist: $jar_file"
  echo "'$sonar_scanner_home' does not point to a valid installation directory: $sonar_scanner_home"
  exit 1
fi

use_embedded_jre=false
if [ "$use_embedded_jre" = true ]; then
  export JAVA_HOME=$sonar_scanner_home/jre
fi

if [ -n "$JAVA_HOME" ]
then
  java_cmd="$JAVA_HOME/bin/java"
else
  java_cmd="$(which java)"
fi

if [ -z "$java_cmd" -o ! -x "$java_cmd" ] ; then
  echo "Could not find 'java' executable in JAVA_HOME or PATH."
  exit 1
fi

여기서 확인하는 $JAVA_HOME은 "/var/jenkins_home/tools/hudson.model.JDK/jdk11" 이 패스를 찾는다.

결국 자동으로 install 한 JDK의 tar.gz 압축을 풀면 생기는 jdk-11 디렉터리가 아니나 그 상위 디렉터리까지만 JAVA_HOME 패스로 잡히게 되어 java path를 찾지 못한 것이다.

이 경우 jdk11/jdk-11 디렉터리의 내용을 jdk11 위치로 옮겨주면 올바르게 JAVA_HOME path를 인식하게 된다.

before : /var/jenkins_home/tools/hudson.model.JDK/jdk11/jdk-11

after : /var/jenkins_home/tools/hudson.model.JDK/jdk11

첨에 다른 곳에서도 비슷한 문제가 있어 System Configuration에 Environment variables에 JAVA_HOME 변수를 추가하여 사용하였었다.

sonar-scanner 쉘 스크립트에서  이 변수를 찾지 못하는지 모르겠지만 jdk 패스를 다시 잡아주고 나면 Environment variables의 변수를 제거해도 정상적으로 동작한다.

(결국 패스만 잘 설정하면 해결된다.)

 

반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요