mingming

Jenkins Plugin Version Error 본문

kubernetes

Jenkins Plugin Version Error

mingming_96 2024. 3. 22. 22:18

교육과정에서 프로젝트 당시 사용중이던 vm에 오랜만에 접속해보니 Jenkins가 Error 상태에 빠져있었습니다.

해당 파드를 몇번 재시작해보니 init container에서 에러가 발생한 것을 확인할 수 있었습니다.

 

Log 확인

Jenkins Pod의 로그를 확인해봐도 별다른 에러를 발견할 수 없었습니다.

root@master:~# kubectl logs jenkins-0
Defaulted container "jenkins" out of: jenkins, config-reload, config-reload-init (init), init (init)
Error from server (BadRequest): container "jenkins" in pod "jenkins-0" is waiting to start: PodInitializing

 

위의 로그를 확인해보니 현재 4개의 컨테이너가 존재하는데 그 중 config-reload-init, init 두 개의 init container가 존재하고 있는 것을 확인할 수 있었습니다.

config-reload-init log

root@master:~# kubectl logs jenkins-0 -c config-reload-init
{"time": "2024-03-22T12:41:46.203037+00:00", "msg": "Starting collector", "level": "INFO"}
{"time": "2024-03-22T12:41:46.203904+00:00", "msg": "No folder annotation was provided, defaulting to k8s-sidecar-target-directory", "level": "WARNING"}
{"time": "2024-03-22T12:41:46.204470+00:00", "msg": "Loading incluster config ...", "level": "INFO"}
{"time": "2024-03-22T12:41:46.206178+00:00", "msg": "Config for cluster api at 'https://10.96.0.1:443' loaded...", "level": "INFO"}
{"time": "2024-03-22T12:41:46.206671+00:00", "msg": "Unique filenames will not be enforced.", "level": "INFO"}
{"time": "2024-03-22T12:41:46.207093+00:00", "msg": "5xx response content will not be enabled.", "level": "INFO"}
{"time": "2024-03-22T12:41:46.208027+00:00", "msg": "Performing list-based sync on configmap resources: {'label_selector': 'jenkins-jenkins-config', 'namespace': 'default'}", "level": "INFO"}
{"time": "2024-03-22T12:41:46.279270+00:00", "msg": "Writing /var/jenkins_home/casc_configs/jcasc-default-config.yaml (ascii)", "level": "INFO"}

 

inti log

Plugin workflow-aggregator:596.v8c21c963d92d (via pipeline-model-definition:2.2184.v0b_358b_953e69->git-client:4.7.0) depends on configuration-as-code:1775.v810dc950b_514, but there is an older version defined on the top level - configuration-as-code:1670.v564dc8b_982d0,
Plugin git:5.1.0 (via git-client:4.7.0) depends on configuration-as-code:1775.v810dc950b_514, but there is an older version defined on the top level - configuration-as-code:1670.v564dc8b_982d0

 

두 개의 init container log를 살펴보니 init 컨테이너에서 에러가 발생했음을 알 수 있었습니다.

 

해결 방법

플러그인 종속성 충돌로 인해 에러가 발생한 것으로 보입니다. 현재 workflow-aggregator 와 git 플러그인이 configuration-as-code 1775.v810dc950b_514 버전에 호환되며 현재 설치된 버전과는 호환이 되지 않는 것 같습니다.

 

1. configmap 수정

제 경우 helm을 통해 배포를 진행하였고 플러그인 버전이 configmap에 기록되어 있습니다. 

 

kubectl get configmap

NAME                           DATA   AGE
jenkins                        2      90d
jenkins-jenkins-jcasc-config   1      90d
kube-root-ca.crt               1      123d
my-metallb-config              1      113d

 

kubectl describe configmap jenkins

Name:         jenkins
Namespace:    default
Labels:       app.kubernetes.io/component=jenkins-controller
              app.kubernetes.io/instance=jenkins
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=jenkins
Annotations:  meta.helm.sh/release-name: jenkins
              meta.helm.sh/release-namespace: default

Data
====
plugins.txt:
----
kubernetes:4029.v5712230ccb_f8
workflow-aggregator:596.v8c21c963d92d
git:5.1.0
configuration-as-code:1670.v564dc8b_982d0
apply_config.sh:

 

plugins.txt의 내용을 수정 후 파드를 재시작 해보겠습니다.

 

kubectl edit configmap jenkins

  plugins.txt: |-
    kubernetes:4029.v5712230ccb_f8
    workflow-aggregator:596.v8c21c963d92d
    git:5.1.0
    configuration-as-code:1775.v810dc950b_514 ## 수정

 

init container 에러는 사라졌지만 새로운 에러가 발생했습니다.

java.io.IOException: Failed to load: Jackson 2 API Plugin (jackson2-api 2.17.0-379.v02de8ec9f64c)
 - Update required: JSON Api Plugin (json-api 20231013-3.v20f3c247f2fe) to be updated to 20231013-17.v1c97069404b_e or higher

 

 

 

Jackson 2 API Plugin의 버전이 낮아 발생한 에러같습니다. 

 

해당 부분은 다음에 다시 수정해보도록 하겠습니다. 


 

json-api의 버전이 낮아 발생한 에러입니다. 해당 버전을 수정하기 위해선 Jenkins의 Pod의 Volume안에 있는 메타데이터 값을 수정해야 합니다.

 

Jenkins 파드의 볼륨과 Jenkins 파드의 Jenkins Container 부분을 살펴보면 다음과 같습니다.

    Mounts:
      /var/jenkins_home from jenkins-home (rw)
      /var/jenkins_home/casc_configs from sc-config-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-8r546 (ro)

 

/var/jenkins_home 경로를 jenkins-home 볼륨으로 마운트 한다 라는 의미입니다. jenkins-home 볼륨은 Volumes 필드에 정의되어 있습니다.

Volumes:
  plugins:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  jenkins-config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      jenkins
    Optional:  false
  plugin-dir:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  jenkins-secrets:
    Type:                Projected (a volume that contains injected data from multiple sources)
    SecretName:          jenkins
    SecretOptionalName:  <nil>
  jenkins-cache:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  jenkins-home:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  jenkins
    ReadOnly:   false
  sc-config-volume:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  tmp-volume:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>

'kubernetes' 카테고리의 다른 글

Jenkins 버전 업그레이드  (0) 2024.12.26
Kubectl 버전 업그레이드  (1) 2024.09.01
Killer.sh CKA 문제 풀이  (0) 2024.01.29
Kubernetes - Kustomize  (0) 2023.12.03
Kubernetes Secret  (2) 2023.10.29