认识
官方提供的 Helm Chart 配置,其用来在 Kubernetes Cluster 中部署 Jenkins 服务。
组成
Init Containers:
- config-reload-init
- init
Containers:
- jenkins
- config-reload
values.yaml
agent.podName // 仅用于控制默认 podTemplate 的名称。
agent.containerCap // Max number of agents to launch for a whole cluster.
性质
数据持久化 volume workspaceVolume
volume,其用于其他目录的持久化,例如 /var/lib/contaienrs/、……
workspaceVolume,其用于挂载 Workspace 目录,进而实现工作目录的持久话。
在 values.yaml 中,workspaceVolume 的取值被注释,其为数组,但实际使用 table 格式。
https://github.com/jenkinsci/helm-charts/blob/main/charts/jenkins/templates/_helpers.tpl#L538C1-L539C1
创建多个 PodTemplate 配置
在 Helm Chart 中,其使用 agent 术语来代指 PodTemplate 配置。
additionalAgents: // 继承默认 agent 配置,并允许自定义。
# 09/23/2025 通过查看 Chart 内容,在 additionalAgents 中,其无法为特定 Container 单独配置 runAsUser/runAsGroup 参数。
构建
helm repo add jenkinsci https://charts.jenkins.io helm repo update jenkinsci helm search repo jenkinsci/ helm pull jenkinsci/jenkins --version 4.1.12 # jenkins-4.1.12.tgz #
应用
with Helm Chart by Official | Jenkins 2.346.1
该笔记将记录:在 Kubernetes Cluster 中,如何部署 Jenkins 服务,重点将现有 Jenkins 服务迁移到 Kubernetes 中;
注 1:针对我们的环境,迁移是我们的重点工作,所以部署过程会涉及迁移相关的内容;
# 我们 Jenkins 2.345 版本,但是没有该版本的 Chart 资源,
# 而 4.1.12 对应 Jenkins 2.346.1 版本,最贴近(算是微小升级)
helm show values ./jenkins-4.1.12.tgz > jenkins-4.1.12.helm-values.yaml
vim jenkins-4.1.12.helm-values.yaml
... 修改 storageClass 参数,以配置其使用的存储类;
... 修改 Ingress 参数,以保留服务提供 HTTP 访问;
... agent.disableDefaultAgent: true
helm upgrade --install --namespace jenkins --create-namespace \
jenkins ./jenkins-4.1.12.tgz -f jenkins-4.1.12.helm-values.yaml
# 查看密码
kubectl exec --namespace jenkins -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo
# 服务登录
# admin:<password>
on Kubernetes | with Helm v3
https://www.jenkins.io/doc/book/installing/kubernetes/#install-jenkins-with-helm-v3
官方文档 | https://www.jenkins.io/doc/book/installing/docker
镜像仓库 | https://hub.docker.com/r/jenkins/jenkins
代码仓库 | https://github.com/jenkinsci/docker
helm show values ./jenkins-5.8.47.tgz -f jenkins-5.8.47.tgz.helm-values.yaml
vim jenkins-5.8.47.tgz.helm-values.yaml
... nameOverride: "jenkins-ci"
... fullnameOverride: "jenkins-ci"
... persistence.storageClass:
... persistence.size:
... controller.image:
... controller.username:
... controller.password:
... controller.ingress:
... controller.additionalPlugins:
... controller.initializeOnce: true
helm upgrade --install --namespace cicd-platform --create-namespace \
jenkins-ci ./jenkins-5.8.47.tgz -f jenkins-5.8.47.tgz.helm-values.yaml
创建多个 PodTamplate 配置,并启用继承
# 09/24/2025 Helm Chart jenkins-5.8.83.tgz
在实际构建中,Node.js 14 16 20 Maven Flutter HBuilderX …,都可能会用到(通常不是在单次构建中)。最开始,我们通过单个 PodTemplate 单次完成所有 Container 的创建(sleep infinity)。
现在,我们希望在构建时,仅需要的 Container 被创建。在默认模板中,保留创建常用 Container 定义(例如 helm kubectl buildah …)。在其他模板中,继承该模板的配置。
添加 PodTemplate 的方法有很多,但并不等于这些方法能够实现 PodTemplate 的继承:
- agent,其能够创建 default PodTemplate 配置,我们在其中保存公用的 Container 定义,例如 helm kubectl buildah …
- additionalAgents,通过查看 Chart 内容,若其配置 additionalContainers 参数,则会覆盖 Default Agent additionalContainers 配置,无法实现继承。
- PodTemplate 其支持 inheritFrom 参数,所以我们通过 agent.podTemplates 来定义 PodTemplate 配置,并指定 inheritFrom: “default” 参数。
改进
通过 Helm Chart 部署,集群会产生 default-xxxxxxx 的 Pod 实例,但是文档上并无相关说明。