현상
AWS EKS 환경에서 Jenkins를 Helm으로 설치해서 동작시키고 있는데, 서비스가 종료되었다가 재시작하면서 동작을 안 하고 있는 상태이다.
대체로 단순 서비스 재시작 시 Jenkins가 정상적으로 올라오지 않는 상황은 Jenkins 버전과 플러그인 버전 충돌이 원인일 수 있다.
관련해서 확인하고 해결할 수 있는 부분을 적어둔다.
참고로 구성은 다음과 같다.
- 쿠버네티스 클러스터 / 버전 : AWS EKS / kubernetes 1.27.6
- Helm Chart
- repository : https://charts.jenkins.io
- chart version : 4.6.1
- app version : 2.414.1
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