System Engineering/CI, CD

CI/CD #13. jenkins(젠킨스) ERROR: ERROR: Can't construct a java object for tag:yaml 에러 조치

ZunoXI 2021. 6. 30.

개요

젠킨스 k8s 디플로이 시 ERROR: ERROR: Can't construct a java object for tag:yaml 에러 조치

jenkins kubernetes 파이프라인 오류

지난 포스팅에서 쿠버네티스 클러스터로의 배포를 위한 파이프라인을 구성 시 플러그인끼리 충돌하여 오류를 발생하는 에러가 발생했었다. 해당 에러를 조치하는 방법에 대해 기술한다.

 

 


 

1. 에러내용과 원인

 

발생했던 에러내용은 다음과 같다.

ERROR: ERROR: Can't construct a java object for tag:yaml.org,2002:io.kubernetes.client.openapi.models.V1Deployment; exception=Class not found: io.kubernetes.client.openapi.models.V1Deployment
 in 'reader', line 1, column 1:
    apiVersion: apps/v1
    ^

hudson.remoting.ProxyException: Can't construct a java object for tag:yaml.org,2002:io.kubernetes.client.openapi.models.V1Deployment; exception=Class not found: io.kubernetes.client.openapi.models.V1Deployment
 in 'reader', line 1, column 1:
    apiVersion: apps/v1
    ^

	at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:335)
	at org.yaml.snakeyaml.constructor.BaseConstructor.constructObjectNoCheck(BaseConstructor.java:229)
	at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:219)
	at io.kubernetes.client.util.Yaml$CustomConstructor.constructObject(Yaml.java:337)
	at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:173)
	at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:157)
	at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:490)
	at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:456)
	at io.kubernetes.client.util.Yaml.loadAs(Yaml.java:224)
	at io.kubernetes.client.util.Yaml.modelMapper(Yaml.java:494)
	at io.kubernetes.client.util.Yaml.loadAll(Yaml.java:272)
	at com.microsoft.jenkins.kubernetes.wrapper.KubernetesClientWrapper.apply(KubernetesClientWrapper.java:236)
	at com.microsoft.jenkins.kubernetes.command.DeploymentCommand$DeploymentTask.doCall(DeploymentCommand.java:172)
	at com.microsoft.jenkins.kubernetes.command.DeploymentCommand$DeploymentTask.call(DeploymentCommand.java:124)
	at com.microsoft.jenkins.kubernetes.command.DeploymentCommand$DeploymentTask.call(DeploymentCommand.java:106)
	at hudson.FilePath.act(FilePath.java:1251)
	at com.microsoft.jenkins.kubernetes.command.DeploymentCommand.execute(DeploymentCommand.java:68)
	at com.microsoft.jenkins.kubernetes.command.DeploymentCommand.execute(DeploymentCommand.java:45)
	at com.microsoft.jenkins.azurecommons.command.CommandService.runCommand(CommandService.java:88)
	at com.microsoft.jenkins.azurecommons.command.CommandService.execute(CommandService.java:96)
	at com.microsoft.jenkins.azurecommons.command.CommandService.executeCommands(CommandService.java:75)
	at com.microsoft.jenkins.azurecommons.command.BaseCommandContext.executeCommands(BaseCommandContext.java:77)
	at com.microsoft.jenkins.kubernetes.KubernetesDeploy.perform(KubernetesDeploy.java:42)
	at com.microsoft.jenkins.azurecommons.command.SimpleBuildStepExecution.run(SimpleBuildStepExecution.java:54)
	at com.microsoft.jenkins.azurecommons.command.SimpleBuildStepExecution.run(SimpleBuildStepExecution.java:35)
	at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: hudson.remoting.ProxyException: org.yaml.snakeyaml.error.YAMLException: Class not found: io.kubernetes.client.openapi.models.V1Deployment
	at org.yaml.snakeyaml.constructor.Constructor.getClassForNode(Constructor.java:664)
	at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.getConstructor(Constructor.java:322)
	at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:331)
	... 30 more

 

 

 

 

ERROR: ERROR: Can't construct a java object for tag:yaml.org,2002:io.kubernetes 어쩌구 저쩌구... 이는 jackson2-api와 snakeyaml 플러그인들이 서로 꼬여서 yaml파일을 제대로 읽지못하는 문제라고한다. 여러가지로 구글링을 해보며 다운그레이드도 해봤는데 결론은 kubernetes-cd라는 플러그인만 1.0으로 다운그레이드 해주면 된다.

 

 

2. 에러 조치

 

우선 다운받을 https://updates.jenkins-ci.org/download/plugins/ 사이트는 이며, 이곳에서 kubernetes-cd(kubernetes Continuous Deploy) 1.0.0 버전을 다운로드하여 서버에 업로드한다. 다음 젠킨스서버에서 플러그인파일들이 위치한 폴더로 접근후 다음 명령어로 kubernetes-cd 플러그인을 삭제한다.

 

rm -rf /var/lib/jenkins/plugins kubernetes-cd*

 

이후 다운받고 업로드한 hpi파일을 해당 플러그인 폴더에 이동시키고 권한 설정 및 jenkins를 재기동하면 플러그인이 해당버전으로 재설치 된다. (처음부터 서버로 바로 받을 수 있으면 더 간편하게 할 수 있을것 같다..)

$ cp kubernetes-cd.hpi /var/lib/jenkins/plugins/
$ cd /var/lib/jenkins/plugins/
$ chown jenkins:jenkins kubernetes-cd.hpi
$ chmod 755 kubernetes-cd.hpi
$ systemctl restart jenkins.service

 

재기동 후 설치된 플러그인을 확인해보면 아래와 같이 kubernetes continuous deploy가 1.0 버전으로 설치된 것을 알 수 있다. 이후 다시 빌드를 시전한다.

 

 

 

정상적으로 빌드가 완료되었다 :)

반응형

댓글