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의 변수를 제거해도 정상적으로 동작한다.
(결국 패스만 잘 설정하면 해결된다.)
'Study > CI&CD' 카테고리의 다른 글
SonarLint & Connected Mode를 STS(Eclipse)에서 사용해보기 (0) | 2022.07.08 |
---|---|
[troubleshooting] sonatype nexus BufferUnderflowException 발생 (0) | 2022.02.21 |
[troubleshooting] docker nerdctl pull 명령어 사용 시 received unexpected HTTP status: 503 Service Unavailable 응답 오는 경우 (0) | 2021.12.21 |
jenkins execute shell 에서 사용할 수 있는 환경 변수 목록 확인 (0) | 2021.08.05 |
github 사용 유용한 팁 모음 (0) | 2021.04.01 |
[troubleshooting] maven jib build 사용 시 snapshot update가 안되는 경우 (0) | 2020.10.22 |
Jenkins 에서 Maven Project 동적으로 버전 변경하여 빌드하기 (0) | 2020.09.12 |
Docker가 Window에서 Disk 활성시간이 100%가 되고 응답없는 경우 (0) | 2019.08.02 |
Docker에 Spring Cloud Data Flow 설치하기 (0) | 2019.08.01 |
SonarQube 사용하기 (0) | 2019.07.31 |