2021. 10. 7. 16:44ㆍJAVA
진행하게 된 계기
현재 진행중인 모든 프로젝트의 환경은 Spring boot 2.1.2, java 1.8로 되어있다.
이번 새로운 프로젝트에서 nosql을 적용해야 했고 현재 aws환경이라 aws의 DynamoDB를 채택했다. 그렇기에 DynamoDB 라이브러리를 사용해야 했는데 지원하는 최소 버전이 Spring boot 2.1.4 이기에 Spring boot 버전 업이 필요했다. 그렇지만 이번에 버전업을 한다면 이후 기준이 되는 버전이 됐어야 했고 좀더 최신의 사양을 사용해야한다고 생각이 들었기에 최근 Spring boot 에서 표준버전으로 많이 사용되는 2.5.5를 선택했다.
이후 이참에 java 버전도 올리고싶은 니즈가 있어서 올해 17 LTS가 나왔기에 이전 LTS인 java 11을 선택하여 프로젝트를 생성했다.
문제점
개요에서 설명했듯이 대부분의 프로젝트의 java 버전은 1.8이며 서버에 설치되어있는 기본 java 버전도 다 1.8이었다. 로컬에서 11로 올려서 테스트를 할때는 인텔리제이에서 지원하는 java 11이 있어 문제가 없었지만 실제 배포 프로세스는 아래와 같아서 이슈가 있었다.
- 젠킨스에서 빌드 후 파일을 aws S3에 업로드
- S3에 업로드 되면 aws codedeploy가 감지하여 지정 인스턴스에 appspec.yml을 기반으로 배포
- 배포된 인스턴스에서 앱이 실행됨
위와 같은 순서이지만 1번에서 빌드를할때 젠킨스 기본 java 버전이 1.8이라 java 11 프로젝트를 빌드할때 에러 발생했다. 그렇다고 기본 java 버전을 11로 바꾸자니 다른 java 1.8 프로젝트들이 빌드가 안될 상황이라 서치중 아래와같은 해결법을 찾았다.
참고 블로그 : https://blog.leocat.kr/notes/2020/02/01/jenkins-multiple-jdk-on-jenkins
또한 1번이 해결 된다하더라도 3번도 기본 java를 11로 바꿔줘야 정상적으로 실행이 된다.
아래에 해결법을 자세히 작성하도록 하겠다.
해결법
문제점 1번
젠킨스에서 빌드시 에러발생 해결 방법
# openJdk 11 설치
sudo apt install openjdk-11-jdk
설치시 기본 자바 버전이 11로 바뀌기 때문에 다시 1.8로 바꿔줍니다.
# 아래의 명령어 실행 후 java, javac 1.8 선택
sudo update-alternatives --config java
sudo update-alternatives --config javac
그다음 젠킨스에 들어가서 설정을 추가한다. (아래 참고)
참고 블로그 : https://blog.leocat.kr/notes/2020/02/01/jenkins-multiple-jdk-on-jenkins
위와 같이 java의 경로를 적어주면 된다. (Ubuntu 20.04.2 LTS 기준)
/usr/lib/jvm/java-8-openjdk-amd64
/usr/lib/jvm/java-11-openjdk-amd64
해당 배포 프로젝트를 클릭 후 "구성" 을 클릭 후 JDK를 설정해 준다.
위처럼 설정 후 배포시 빌드가 성공한다.
문제점 3번
배포될 서버 java 버전 변경
# openJdk 11 설치
sudo apt install openjdk-11-jdk
위의 과정을 거치면 java 기본버전이 11로 바뀌게 된다. 만약 안바뀌었던가, 다른버전을 다시 깔아 바뀌게 된다면 아래의 과정에서 java 11버전을 선택한다.
# 아래의 명령어 실행 후 java, javac 11 선택
sudo update-alternatives --config java
sudo update-alternatives --config javac