회사 내에서 개발기에 배포하는 과정을 자동화시키기 위해서 서버에 젠킨스를 적용하는 과정에서 발생한 이슈이고 정리하기 위해서 글을 작성한다...!
문제 상황 정리
- 현재 Jenkins는 docker를 이용해서 jdk-17 버전으로 사용 중이다. (즉, 컨테이너 내부는 jdk-17)
- 하지만 내가 진행한 프로젝트는 jdk-1.8을 사용한다.
- 버전이 달라 컨테이너 내부에서 gradlew build를 진행할 수 없다..!!
어떻게 해결할 수 있을까? 빌드할 때 java의 버전을 동적으로 변경시켜주어야 한다.
그렇다면 먼저 볼륨을 연결해서 거기에 jdk를 설치해 두고 스크립트를 짜서 step을 시작할 때 환경변수를 바꿔주면 되지 않을까? 생각했다.
(왜냐하면 현재 로컬에서는 스크립트를 짜서 동적으로 java버전을 관리하고 있기 때문에 자연스럽게 먼저 이 생각을 떠올렸다)
나름 괜찮아 보이는 생각이었고 그렇게 하면 될 것 같았다.
근데 혹시나 이걸 jenkins에서 지원해주지 않을까!? 생각해서 문서를 찾아보았다.
https://www.jenkins.io/doc/book/pipeline/syntax/#tools
있다.. tools라는 기능이!!!
이 기능을 사용하면 자동으로 다운로드되고 PATH에 등록을 해주는 것으로 보인다. 정말 그런지 확인을 해보자.
이 기능을 사용하기 위해서는 먼저 tools에 등록을 해주어야 한다.
Tools 등록하기
해당 메뉴에 들어가서 JDK installations 항목을 찾아서 해당 내용을 등록해 주었다.
- Name: pipeline에서 사용할 이름을 작성해 주면 된다.
- Download URL for binary archive: 압축형태로 제공되는 jdk를 받을 url을 입력해 주면 된다. 나는 아마존의 corretto를 사용하였다. (*.zip과 *.tar.gz 형식만 지원한다)
- Subdirectory of extracted archive: 압축을 해제하면 나오는 디렉토리의 명을 적어주면 된다.
그 이전 경로는 자동으로 작성되기 때문에 압축해제하면 나오는 디렉토리의 명만 적어주면 된다.
나의 경우에는 (/var/jenkins_home/tools/hudson.model.JDK/jdk-8/amazon-corretto-11.0.23.9.1-linux-x64)가 풀네임이 된다.
만약 기존에 존재하는 JDK를 사용하고 싶다면 'Install automatically'를 체크해제해서 단순히 JAVA_HOME만 변경해 주면 된다.
Tools 사용방법
pipeline {
agent any
tools {
jdk 'jdk-8'
}
stages {
stage('jdk-8확인') {
steps {
sh '기본은 jdk-8로 변경'
sh 'java -version'
sh 'javac -version'
}
}
}
}
이와 같이 사용하면 해당 pipeline을 사용할 때에는 jdk-8을 사용해서 수행할 수 있게 된다.
모든 stage에 적용할 때 사용하면 편리하게 적용할 수 있게 된다.
결과를 살펴보면 자동으로 JAVA_HOME과 PATH모두 변경이 되는 것을 확인할 수 있었다.
+ echo 기본은 jdk-8로 변경
기본은 jdk-8로 변경
[Pipeline] sh
+ echo /var/jenkins_home/tools/hudson.model.JDK/jdk-8/amazon-corretto-8.412.08.1-linux-x64
/var/jenkins_home/tools/hudson.model.JDK/jdk-8/amazon-corretto-8.412.08.1-linux-x64
[Pipeline] sh
+ echo /var/jenkins_home/tools/hudson.model.JDK/jdk-8/amazon-corretto-8.412.08.1-linux-x64/bin:/var/jenkins_home/tools/hudson.model.JDK/jdk-8/amazon-corretto-8.412.08.1-linux-x64/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/var/jenkins_home/tools/hudson.model.JDK/jdk-8/amazon-corretto-8.412.08.1-linux-x64/bin:/var/jenkins_home/tools/hudson.model.JDK/jdk-8/amazon-corretto-8.412.08.1-linux-x64/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Pipeline] sh
+ java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment Corretto-8.412.08.1 (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM Corretto-8.412.08.1 (build 25.412-b08, mixed mode)
[Pipeline] sh
+ javac -version
javac 1.8.0_412
만약 중간에 버전을 바꿔줘야 한다면
루트 블록에 작성해 주는 것이 아닌 각 stage마다 작성해 주면 된다.
pipeline {
agent any
stages {
stage('기본 버전은 jdk-17') {
steps {
sh 'echo 기본 버전확인'
sh 'echo $JAVA_HOME'
sh 'echo $PATH'
sh 'java -version'
sh 'javac -version'
}
}
stage('jdk-8확인') {
tools{
jdk 'jdk-8'
}
steps {
sh 'echo jdk-8로 변경'
sh 'echo $JAVA_HOME'
sh 'echo $PATH'
sh 'java -version'
sh 'javac -version'
}
}
stage('jdk-11확인') {
tools{
jdk 'jdk-11'
}
steps {
sh 'echo jdk-11로 변경'
sh 'echo $JAVA_HOME'
sh 'echo $PATH'
sh 'java -version'
sh 'javac -version'
}
}
}
}
'Devops' 카테고리의 다른 글
코드리뷰 약어 살펴보기 (0) | 2023.08.04 |
---|---|
[Docker] Dockerfile 작성하는 방법 (0) | 2023.06.29 |
AWS 알아보기 6 - DynamoDB & Elasticache (0) | 2023.06.11 |
AWS 알아보기 5 - AWS RDS & Aurora (0) | 2023.06.11 |
AWS 알아보기 4 - 메시지 큐 (Message Queue) (0) | 2023.06.11 |