「Jenkins」- 部署 | Helm Chart | Official

认识

官方提供的 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 配置,并允许自定义。

在其基础上,若要增加额外的 container 配置,则需要使用 additionalAgents.additionalContainers 字段,否则会覆盖原有的 jnlp 容器。

# 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

Jenkins on Kubernetes Engine

该笔记将记录:在 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 实例,但是文档上并无相关说明。