Kubernetes/삽질

[Helm] jenkins - 플러그인 버전 충돌 디버깅하기

비번변경 2025. 4. 23. 23:32

현상

AWS EKS 환경에서 Jenkins를 Helm으로 설치해서 동작시키고 있는데, 서비스가 종료되었다가 재시작하면서 동작을 안 하고 있는 상태이다.

대체로 단순 서비스 재시작 시 Jenkins가 정상적으로 올라오지 않는 상황은 Jenkins 버전과 플러그인 버전 충돌이 원인일 수 있다.

관련해서 확인하고 해결할 수 있는 부분을 적어둔다.

 

참고로 구성은 다음과 같다.

  • 쿠버네티스 클러스터 / 버전 : AWS EKS / kubernetes 1.27.6
  • Helm Chart

 

 

describe

플러그인 버전 충돌이 발생하면 대체로 플러그인 설치가 진행되는 initContainer에서의 오류를 확인할 수 있다.

아래 내용은 describe pods로 확인한 Events 내용이다.

 

 

logs

initContainer의 로그를 확인하여 어느 부분에서 오류가 발생했는지 확인한다.

kubectl logs jenkins-0 init

 

- 아래 내용은 initContainer의 로그 일부이다. 

Multiple plugin prerequisites not met:
Plugin kubernetes:3937.vd7b_82db_e347b_ (via credentials:1380.va_435002fa_924) depends on configuration-as-code:1836.vccda_4a_122a_a_e, but there is an older version defined on the top level - configuration-as-code:1670.v564dc8b_982d0,
Plugin workflow-aggregator:596.v8c21c963d92d (via pipeline-input-step:495.ve9c153f6067b_->credentials:1380.va_435002fa_924) depends on configuration-as-code:1836.vccda_4a_122a_a_e, but there is an older version defined on the top level - configuration-as-code:1670.v564dc8b_982d0,
Plugin git:5.1.0 (via credentials:1380.va_435002fa_924) depends on configuration-as-code:1836.vccda_4a_122a_a_e, 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,

위 내용에서는 플러그인이 의존하고 있는 플러그인 버전을 확인할 수 있다.

예로 들어 kubernetes:3937.vd7b_82db_e347b_은 configuration-as-code:1836.vccda_4a_122a_a_e을 의존하고 있지만, 현재 설치된 버전이 configuration-as-code:1670.v564dc8b_982d0라서 문제가 되고 있다.

 

- 아래 내용은 플러그인과 Jenkins 버전 충돌에 관련된 로그이다. nitContainer의 로그 중 플러그인 간 버전 충돌에 이어서 확인할 수 있다.

json-api (20240303-41.v94e11e6de726) requires a greater version of Jenkins (2.414.3) than 2.414.1,

mina-sshd-api-core (2.14.0-143.v2b_362fc39576) requires a greater version of Jenkins (2.426.3) than 2.414.1,

mailer (472.vf7c289a_4b_420) requires a greater version of Jenkins (2.440.1) than 2.414.1,

pipeline-model-api (2.2218.v56d0cda_37c72) requires a greater version of Jenkins (2.426.3) than 2.414.1,

pipeline-input-step (495.ve9c153f6067b_) requires a greater version of Jenkins (2.440) than 2.414.1,

credentials-binding (681.vf91669a_32e45) requires a greater version of Jenkins (2.414.3) than 2.414.1,

kubernetes-credentials (190.v03c305394deb_) requires a greater version of Jenkins (2.426.3) than 2.414.1,

... 생략 ...

예로 들어 현재 설치된 Jenkins 버전이 2.414.1인데, json-api는 2.414.3를 요구하고 있다는 내용이다.

 

 

해결

대충 로그를 종합해서 확인해보니, 플러그인 버전과 Jenkins 버전을 다음과 같이 수정해서 배포하면 문제가 해결될 것 같다.

플러그인
- configuration-as-code: 1670.v564dc8b_982d0 -> 1836.vccda_4a_122a_a_e
Jenkins
- APP VERSION : 2.414.1 -> 2.440.1

 

플러그인 버전 수정

values.yaml에서 installPlugins 속성을 수정한다.

https://github.com/jenkinsci/helm-charts/blob/main/charts/jenkins/values.yaml#L405

  # List of plugins to be install during Jenkins controller start
  installPlugins:
    - kubernetes:4054.v2da_8e2794884
    - workflow-aggregator:596.v8c21c963d92d
    - git:5.1.0
    # 기존 버전
    # - configuration-as-code:1670.v564dc8b_982d0
    # 신규 버전
    - configuration-as-code:1836.vccda_4a_122a_a_e

 

Jenkins APP VERSION 업그레이드

jenkins 버전은 chart 버전과 관련이 있는 것 같다. https://artifacthub.io/packages/helm/jenkinsci/jenkins 에서 오른쪽에 위치한 Application version을 보면 최신 버전의 차트의 Jenkins 버전을 확인할 수 있다.

그리고 바로 밑의 Chart versions See all을 사용해 차트 버전을 자유롭게 이동할 수 있다. 차트 버전을 쭉 조회해 보면서 확인했을 때 차트 버전 5.0.14부터 5.1.2까지가 Jenkins 2.440.1 버전을 사용한다.

이번 글에서는 5.1.0버전으로 업그레이드하려고 한다.

 

아래 명령으로 수정한 values.yaml을 사용해서 Jenkins를 재배포하자.

helm upgrade -f ./jenkins-values.yaml jenkins jenkins/jenkins --version 5.1.0
# helm upgrade  -f ./jenkins-values.yaml jenkins jenkins/jenkins --version 5.1.0
coalesce.go:220: warning: cannot overwrite table with non table for jenkins.agent.image (map[repository:jenkins/inbound-agent tag:3206.vb_15dcf73f6a_9-3])
coalesce.go:220: warning: cannot overwrite table with non table for jenkins.controller.initScripts (map[])
coalesce.go:220: warning: cannot overwrite table with non table for jenkins.controller.sidecars.configAutoReload.image (map[registry:docker.io repository:kiwigrid/k8s-sidecar tag:1.26.1])
coalesce.go:220: warning: cannot overwrite table with non table for jenkins.controller.image (map[pullPolicy:Always registry:docker.io repository:jenkins/jenkins tag:<nil> tagLabel:jdk17])
coalesce.go:220: warning: cannot overwrite table with non table for jenkins.helmtest.bats.image (map[registry:docker.io repository:bats/bats tag:v1.10.0])
Error: UPGRADE FAILED: template: jenkins/templates/tests/jenkins-test.yaml:20:24: executing "jenkins/templates/tests/jenkins-test.yaml" at <.Values.helmtest.bats.image.registry>: can't evaluate field registry in type interface {}

 

유감스럽게도 다른 오류가 발생하는 것을 확인했다……. 이 오류는 다른 글에서 확인해 보겠다.

일단 플러그인 버전 충돌은 이 글에서 설명한 방식으로 수정하면 된다.

 

 

참고 문서

https://stackoverflow.com/questions/70371814/unable-to-install-jenkins-from-helm-chart

https://mingming-96.tistory.com/129

https://artifacthub.io/packages/helm/jenkinsci/jenkins

728x90