JDK 설치 및 설정
Jenkins를 JDK 21로 실행하면서 프로젝트는 JDK 11로 빌드해야 하는 상황, 어떻게 설정해야 할까요?
Jenkins에서 JDK는 서버 실행용 과 빌드용 두 가지 용도로 사용됩니다. 이 차이를 이해하지 못하면 빌드 시 버전 불일치 에러가 발생합니다.
Jenkins 실행 JDK와 빌드 JDK의 차이
| 구분 | 용도 | 설정 위치 |
|---|---|---|
| Jenkins 실행용 JDK | Jenkins 서버 자체를 구동하는 JDK | jenkins.service의 JAVA_HOME |
| 빌드용 JDK | 프로젝트를 컴파일하는 데 사용하는 JDK | Jenkins > Manage > Tools > JDK installations |
Jenkins 서버는 JDK 21로 실행하면서, 프로젝트는 JDK 11이나 17로 빌드해야 하는 경우가 흔합니다. 이를 위해 빌드용 JDK를 별도로 설치하고 Jenkins에 등록해야 합니다.
JDK 설치
OpenJDK 11 설치
# 다운로드
wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
# 압축 해제
tar -xvzf openjdk-11+28_linux-x64_bin.tar.gz -C /app
# 환경 변수 설정
echo 'export JAVA11_HOME="/app/jdk-11"' >> ~/.bashrc
echo 'export PATH="$PATH:$JAVA11_HOME/bin"' >> ~/.bashrc
source ~/.bashrc
OpenJDK 17 설치
# 다운로드
wget https://download.java.net/openjdk/jdk17.0.0.1/ri/openjdk-17.0.0.1+2_linux-x64_bin.tar.gz
# 압축 해제
tar -xvzf openjdk-17.0.0.1+2_linux-x64_bin.tar.gz -C /app
# 환경 변수 설정
echo 'export JAVA17_HOME="/app/jdk-17"' >> ~/.bashrc
echo 'export PATH="$PATH:$JAVA17_HOME/bin"' >> ~/.bashrc
source ~/.bashrc
설치 확인
/app/jdk-11/bin/java -version
/app/jdk-17/bin/java -version
Jenkins에 JDK 등록
빌드 시 사용할 JDK를 Jenkins의 Global Tool Configuration에 등록합니다.
등록 절차
- Jenkins 로그인
- Manage Jenkins > Tools > JDK installations 이동
- Add JDK 클릭
- 아래 항목 입력:
| 항목 | 설명 | 예시 |
|---|---|---|
| Name | Jenkins 내에서 사용할 별칭 | OpenJDK11 |
| JAVA_HOME | JDK가 설치된 절대 경로 | /app/jdk-11 |
- Save 클릭
여러 버전의 JDK를 등록해두면 파이프라인 스크립트에서
tools { jdk 'OpenJDK17' }형태로 프로젝트별 JDK 버전을 지정할 수 있습니다.
트러블슈팅
{PATH} doesn't look like a JDK directory 에러
** 원인:** JAVA_HOME 경로에 JRE 경로를 입력한 경우 발생합니다. Jenkins 빌드에는 컴파일러(javac)가 포함된 JDK가 필요합니다.
** 확인 방법:**
# JDK 경로에 javac가 있는지 확인
ls /app/jdk-11/bin/javac
** 해결:** JRE가 아닌 JDK의 루트 경로를 입력합니다.
| 잘못된 경로 | 올바른 경로 |
|---|---|
/app/jdk-11/jre | /app/jdk-11 |
/usr/lib/jvm/java-11-openjdk/jre | /usr/lib/jvm/java-11-openjdk |
release version 17 not supported 에러
** 원인:** 프로젝트의 소스/타겟 버전이 17인데, Jenkins가 JDK 11로 빌드를 시도하는 경우 발생합니다.
** 해결:**
- Jenkins의 JDK installations에 JDK 17이 등록되어 있는지 확인합니다.
- 파이프라인 스크립트의
tools블록에서 올바른 JDK 버전을 지정합니다.
pipeline {
agent any
tools {
jdk 'OpenJDK17' // JDK installations에 등록한 Name과 일치해야 함
}
stages {
stage('Build') {
steps {
sh 'java -version'
sh 'mvn clean package'
}
}
}
}
정리
| 항목 | 설명 |
|---|---|
| 실행용 JDK | Jenkins 서버 자체를 구동 (jenkins.service의 JAVA_HOME) |
| 빌드용 JDK | 프로젝트 컴파일 (Jenkins Tools > JDK installations) |
| 설정 위치 | Manage Jenkins > Tools > JDK installations |
| Pipeline 지정 | tools { jdk 'Name값' } (Name은 대소문자 구분) |
| JRE vs JDK | Jenkins 빌드에는 javac가 포함된 JDK가 필요 (JRE 불가) |
댓글 로딩 중...