Theme:

Jenkins를 JDK 21로 실행하면서 프로젝트는 JDK 11로 빌드해야 하는 상황, 어떻게 설정해야 할까요?

Jenkins에서 JDK는 서버 실행용 과 빌드용 두 가지 용도로 사용됩니다. 이 차이를 이해하지 못하면 빌드 시 버전 불일치 에러가 발생합니다.

Jenkins 실행 JDK와 빌드 JDK의 차이

구분용도설정 위치
Jenkins 실행용 JDKJenkins 서버 자체를 구동하는 JDKjenkins.serviceJAVA_HOME
빌드용 JDK프로젝트를 컴파일하는 데 사용하는 JDKJenkins > Manage > Tools > JDK installations

Jenkins 서버는 JDK 21로 실행하면서, 프로젝트는 JDK 11이나 17로 빌드해야 하는 경우가 흔합니다. 이를 위해 빌드용 JDK를 별도로 설치하고 Jenkins에 등록해야 합니다.

JDK 설치

OpenJDK 11 설치

BASH
# 다운로드
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 설치

BASH
# 다운로드
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

설치 확인

BASH
/app/jdk-11/bin/java -version
/app/jdk-17/bin/java -version

Jenkins에 JDK 등록

빌드 시 사용할 JDK를 Jenkins의 Global Tool Configuration에 등록합니다.

등록 절차

  1. Jenkins 로그인
  2. Manage Jenkins > Tools > JDK installations 이동
  3. Add JDK 클릭
  4. 아래 항목 입력:
항목설명예시
NameJenkins 내에서 사용할 별칭OpenJDK11
JAVA_HOMEJDK가 설치된 절대 경로/app/jdk-11
  1. Save 클릭

여러 버전의 JDK를 등록해두면 파이프라인 스크립트에서 tools { jdk 'OpenJDK17' } 형태로 프로젝트별 JDK 버전을 지정할 수 있습니다.

트러블슈팅

{PATH} doesn't look like a JDK directory 에러

** 원인:** JAVA_HOME 경로에 JRE 경로를 입력한 경우 발생합니다. Jenkins 빌드에는 컴파일러(javac)가 포함된 JDK가 필요합니다.

** 확인 방법:**

BASH
# 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로 빌드를 시도하는 경우 발생합니다.

** 해결:**

  1. Jenkins의 JDK installations에 JDK 17이 등록되어 있는지 확인합니다.
  2. 파이프라인 스크립트의 tools 블록에서 올바른 JDK 버전을 지정합니다.
GROOVY
pipeline {
    agent any
    tools {
        jdk 'OpenJDK17'  // JDK installations에 등록한 Name과 일치해야 함
    }
    stages {
        stage('Build') {
            steps {
                sh 'java -version'
                sh 'mvn clean package'
            }
        }
    }
}

정리

항목설명
실행용 JDKJenkins 서버 자체를 구동 (jenkins.serviceJAVA_HOME)
빌드용 JDK프로젝트 컴파일 (Jenkins Tools > JDK installations)
설정 위치Manage Jenkins > Tools > JDK installations
Pipeline 지정tools { jdk 'Name값' } (Name은 대소문자 구분)
JRE vs JDKJenkins 빌드에는 javac가 포함된 JDK가 필요 (JRE 불가)
댓글 로딩 중...