IT

[젠킨스] 이슈 - 젠킨스 시작 시 Font 관련 에러 발생 (feat. NullPointerException) 본문

CI CD/jenkins

[젠킨스] 이슈 - 젠킨스 시작 시 Font 관련 에러 발생 (feat. NullPointerException)

abcee 2020. 3. 30. 22:54

Issue (특이 사항)

젠킨스(jenkins)는 jetty was engine 기반에서 돌아가는 서비스로 java runtime 환경을 필요로 한다. 또한 jenkins 2.46 후에 나온 버전들은 java 8 or 11 을 요구한다.

리눅스 환경에서 리포지토리(repository)의 패키지를 통한 java 설치가 아닌 바이너리 이진(binary ) 파일로 jdk 파일을 업로드하여 사용할 경우 아래와 같은 오류가 발생하였다.

AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"? See also: https://jenkins.io/redirect/troubleshooting/java.awt.headless

java.lang.NullPointerException
	at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
	at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
	at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
	at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
	at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:367)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:312)
	at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
	at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)

jenkins url 접속 시 보여지는 에러

 

Error Analysis, Test, Cause (에러 분석, 테스트, 원인)

Error Analysis

리눅스에서 jenkins를 구동하면 java.awt.headless 옵션을 true로 주어 awt 라이브러리를 리눅스에서 사용할 수 있도록 만들고 jenkins에서 이를 사용한다.

 

Test

- 사용 JDK 종류(Vendor) : oracle openjdk, oracle jdk, zulu openjdk

- Running with JDK 7 : 바이너리 이진 파일을 업로드 하여 사용해도 이상 없이 정상 실행 됨

- Running with JDK 8 or 11 : 리포지토리(repository)의 패키지를 통한 jdk 설치 사용 시  정상 실행 됨

- Running with JDK 8 or 11 : 바이너리 이진 파일 업로드 하여 사용 시 NullPointerException 발생

 

Cause

jdk8, 11에서 awt 라이브러리 사용 시 font 설정을 가져오는데 바이너리 이진(binary) 파일 사용 시 font 설정 properties 가 존재하지 않아 NullPointerException이 발생한다.

 

 

Solution (해결 방법)

jdk/lib/fontconfig.properties 파일을 생성하여 아래와 같이 기본 설정으로 내용을 채운다.

version=1
sequence.allfonts=default

 

Comments