90DaysOfDevOps 实战:在 minikube 上使用 Helm 部署 Jenkins 的完整步骤指南
文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本篇指南基于 90DaysOfDevOps 项目 2022 年 CICD 专题中的 Jenkins 部署文档steps.md完整呈现了如何在本地 minikube 集群中通过 Helm Chart 从零部署 Jenkins、配置持久化存储与 RBAC、获取管理员密码、完成端口转发登录并更新插件的全过程。读者读完本指南后将掌握一套可复制的「Kubernetes Helm 部署 Jenkins」实操流程并能够结合仓库中的 jenkins-values.yml 与 Pipeline/Jenkinsfile 进一步配置插件、JCasC 与 Kubernetes 动态 Agent。部署流程总览整个部署流程以 steps.md 为操作主线共分为以下几个阶段启动 minikube 集群创建独立的jenkins命名空间准备持久化存储PersistentVolume与服务账户ServiceAccount RBAC添加 Jenkins 官方 Helm 仓库并更新索引通过 Helm Chart 安装 Jenkins修正存储目录权限并触发控制器重启提取初始管理员密码端口转发并以浏览器登录执行插件更新进入日常使用。仓库中配套了全部所需的 YAML 清单文件位于 2022/es/Days/CICD/Jenkins 目录下可以对照每一步逐一执行。第一步启动 minikube 集群在安装任何 Kubernetes 资源之前先启动本地集群minikube startminikube start会创建并启动一个单节点的本地 Kubernetes 集群作为 Jenkins 控制器的运行底座。执行完毕后可以用kubectl get nodes验证集群状态就绪。第二步创建 jenkins 命名空间为了资源隔离和后续清理方便将 Jenkins 的所有资源放入独立的命名空间kubectl create namespace jenkins或者直接使用仓库中提供的声明式清单kubectl create -f 2022/es/Days/CICD/Jenkins/jenkins-namespace.ymljenkins-namespace.yml 内容如下--- apiVersion: v1 kind: Namespace metadata: name: jenkins验证命名空间是否创建成功kubectl get namespaces输出中应能看到jenkins命名空间处于Active状态。后续所有 Jenkins 相关命令都会带上-n jenkins以限定作用范围。第三步准备持久化存储Jenkins 的配置、任务Jobs、插件和构建记录都存储在JENKINS_HOME默认/var/jenkins_home中因此必须为其提供持久化存储否则控制器 Pod 一旦重建所有数据都会丢失。仓库提供了基于hostPath的 PersistentVolume 定义jenkins-volume.ymlapiVersion: v1 kind: PersistentVolume metadata: name: jenkins-pv namespace: jenkins spec: storageClassName: jenkins-pv accessModes: - ReadWriteOnce capacity: storage: 20Gi persistentVolumeReclaimPolicy: Retain hostPath: path: /data/jenkins-volume/应用该清单kubectl apply -f 2022/es/Days/CICD/Jenkins/jenkins-volume.yml关键字段说明storageClassName: jenkins-pv该名称必须与后面 Helm values 中persistence.storageClass保持一致用于将 PV 与 PVC 绑定accessModes: ReadWriteOnce允许单个节点挂载读写适合单控制器场景capacity.storage: 20GiPV 声明容量而 Helm values 中 PVC 请求的默认容量为8GiPV 容量须大于等于 PVC 请求量persistentVolumeReclaimPolicy: RetainPV 释放后保留数据防止误删导致 Jenkins 数据丢失hostPath.path: /data/jenkins-volume/数据实际落在 minikube 节点的宿主机目录下这也是后续需要进入节点修正权限的原因。注意hostPath仅适用于本地开发/测试环境如 minikube在生产环境应改用云厂商的块存储或 NFS 等网络存储。第四步创建服务账户与 RBAC 授权为了让 Jenkins 控制器能够调用 Kubernetes API 动态创建/销毁 Agent Podkubernetes 插件的能力需要创建服务账户并绑定集群角色。仓库提供了完整的 jenkins-sa.yml包含三部分资源ServiceAccountapiVersion: v1 kind: ServiceAccount metadata: name: jenkins namespace: jenkinsClusterRole授予statefulsets、services、replicationcontrollers、replicasets、podtemplates、pods、pods/log、pods/exec、persistentvolumes、persistentvolumeclaims、jobs、deployments、deployments/scale、daemonsets、cronjobs、configmaps、namespaces、events、secrets等资源的create/get/watch/delete/list/patch/update权限同时对nodes提供get/list/watch/update权限。ClusterRoleBinding将上述 ClusterRole 绑定到system:serviceaccounts:jenkins组即命名空间jenkins下所有服务账户。应用清单kubectl apply -f 2022/es/Days/CICD/Jenkins/jenkins-sa.yml从源码结构看该 ClusterRole 的授权范围相当宽泛apiGroups 为*覆盖了 Jenkins Kubernetes 插件管理 Agent、Job、PVC 等场景所需的几乎所有 API 对象属于开箱即用的演示级配置在严格的生产环境中建议按最小权限原则裁剪。第五步添加 Jenkins 官方 Helm 仓库Helm Chart 安装 Jenkins 前需要先把 Jenkins 官方仓库加入本地仓库列表并更新索引helm repo list查看当前已配置的仓库随后添加 Jenkins 官方仓库helm repo add jenkinsci https://charts.jenkins.io更新仓库索引获取最新的 Chart 与版本信息helm repo update第六步使用 Helm Chart 安装 Jenkins仓库提供了经过裁剪的 jenkins-values.yml通过-f参数将其传入 Helm 安装命令chartjenkinsci/jenkins helm install jenkins -n jenkins -f 2022/es/Days/CICD/Jenkins/jenkins-values.yml $chart该 Chart 会把 Jenkins 控制器以 StatefulSet 形式部署Pod 名为jenkins-0并自动创建 PVC、Service 与 ConfigMap 等关联资源。values 文件中的核心配置解读以下是对 jenkins-values.yml 中与本次部署直接相关的关键配置的逐一说明控制器镜像与资源controller: image: jenkins/jenkins tagLabel: jdk11 imagePullPolicy: Always runAsUser: 1000 fsGroup: 1000 servicePort: 8080 targetPort: 8080 serviceType: ClusterIP resources: requests: cpu: 50m memory: 256Mi limits: cpu: 2000m memory: 4096MirunAsUser: 1000/fsGroup: 1000以非 root 用户官方镜像内 uid 1000 的jenkins用户运行与第六步之后的目录权限修正目标 uid 1000 严格对应serviceType: ClusterIPvalues 注释明确说明For minikube, set this to NodePort, elsewhere use LoadBalancer本部署选择 ClusterIP随后通过port-forward访问符合本地开发场景。内置插件安装时自动下载installPlugins: - kubernetes:1.31.3 - workflow-aggregator:2.6 - git:4.10.2 - configuration-as-code:1.55.1这四类插件分别支撑Kubernetes 动态 Agent、流水线Pipeline聚合、Git 源码拉取以及 JCasC 配置即代码。JCasC 安全域与授权策略JCasC: defaultConfig: true securityRealm: |- local: allowsSignup: false enableCaptcha: false users: - id: ${chart-admin-username} name: Jenkins Admin password: ${chart-admin-password} authorizationStrategy: |- loggedInUsersCanDoAnything: allowAnonymousRead: false用户名与密码通过${chart-admin-username}/${chart-admin-password}占位符引用 Chart 自动生成的 Secret关闭匿名注册与匿名读取仅允许登录用户执行操作。持久化与 PVC 绑定persistence: enabled: true storageClass: jenkins-pv accessMode: ReadWriteOnce size: 8GistorageClass: jenkins-pv与第三步创建的 PV 的storageClassName同名从而把 PVC 与hostPathPV 绑定PVC 请求容量 8Gi小于 PV 声明的 20Gi可以正常绑定。Agent 配置agent: enabled: true image: jenkins/inbound-agent tag: 4.11.2-4 sideContainerName: jnlp podRetention: Never containerCap: 10控制器通过 50000 端口agentListenerPort与 JNLP Agent 通信构建时按需拉起 Agent Pod构建结束后删除podRetention: Never。第七步修正存储目录权限并重启控制器由于 Jenkins 以 uid 1000 运行而hostPath目录/data/jenkins-volume默认归属于 root首次启动时 Jenkins 可能因无法写入JENKINS_HOME而陷入CrashLoopBackOff。此时需要进入 minikube 节点把目录属主改为 1000minikube ssh sudo chown -R 1000:1000 /data/jenkins-volume然后删除控制器 Pod让 StatefulSet 重建从而以正确的权限重新挂载并初始化kubectl delete pod jenkins-0 -n jenkins观察 Pod 状态直至就绪kubectl get pods -n jenkins -w-w会持续监听变化直到jenkins-0变为Running且READY为1/1。这一chown 删除 Pod的组合是使用hostPathPV 部署 Jenkins 时最关键的排障步骤与 steps.md 的原始操作序列完全一致。第八步获取初始管理员密码Chart 会把初始管理员密码写入 Secret 中通过kubectl exec在控制器容器内读取kubectl exec --namespace jenkins -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/chart-admin-password echo说明svc/jenkins表示直接使用 Service 对应的 Pod 执行命令-c jenkins指定容器名为jenkins密码文件挂载路径为/run/secrets/chart-admin-password追加 echo是为了在输出末尾补一个换行避免密码与 shell 提示符粘连难以复制。该密码对应的用户即 jenkins-values.yml 中controller.adminUser: admin默认admin。第九步端口转发并用浏览器登录由于 Service 类型为 ClusterIP需要通过port-forward将本地 8080 端口映射到控制器kubectl --namespace jenkins port-forward svc/jenkins 8080:8080随后打开浏览器访问http://localhost:8080使用第八步获取的密码以用户admin登录。port-forward会保持前台运行请保持该终端不关闭。第十步执行插件更新首次登录后Jenkins 会提示存在可用的插件更新。在界面中进入Manage Jenkins → Plugins → Updates执行插件更新并重启控制器使其生效。由于 jenkins-values.yml 中设置了installLatestPlugins: trueChart 安装阶段已自动下载插件依赖的最新版本后续 UI 内的更新则用于跟进插件的增量发布。扩展验证结合仓库 Pipeline 打通 CI 流程部署完成后可以结合仓库自带的 Pipeline/Jenkinsfile 验证 Kubernetes 动态 Agent 与容器化构建能力。该 Jenkinsfile 演示了三条关键链路动态 Agent Pod通过podTemplate定义一个包含maven与kaniko两个容器的 Pod其中kaniko容器挂载了名为dockercred的 Secret/kaniko/.docker下的config.json用于镜像仓库认证流水线阶段Clone Repository阶段使用git从远程仓库拉取代码Build Image阶段在maven容器内执行构建命令Build Hello World App阶段在kaniko容器内调用/kaniko/executor构建并推送 Docker 镜像--destination指定目标仓库配套镜像素材Pipeline/Dockerfile 基于busybox构建一个托管 index.html 的极简静态 Web 服务镜像index.html 内容为Hello World!可作为 CI 构建产物的验证样例。这套素材证明本次部署的 Jenkins 不仅是一个可登录的 Web 服务还能通过 kubernetes 插件按需拉起 Agent、并行执行多容器流水线构成完整的「CI 编排 容器镜像构建」能力。常见问题与排障要点CrashLoopBackOff优先检查是否已执行minikube ssh下的chown -R 1000:1000 /data/jenkins-volume并确认 jenkins-values.yml 中runAsUser/fsGroup均为 1000。PVC 一直Pending确认 jenkins-volume.yml 的storageClassName: jenkins-pv与 values 中persistence.storageClass完全一致且 PV 容量20Gi不小于 PVC 请求8Gi。helm install报仓库不存在确认已执行helm repo add jenkinsci https://charts.jenkins.io与helm repo update并可用helm repo list复核。浏览器无法访问 8080确认kubectl --namespace jenkins port-forward svc/jenkins 8080:8080终端仍在运行且 Pod 处于Running状态。Agent 无法连接控制器检查 values 中agentListenerPort: 50000与 Agent 配置确保 JNLP 通信链路未被 NetworkPolicy 阻断values 中networkPolicy.enabled默认为false。本指南对应的全部清单文件均可从仓库 2022/es/Days/CICD/Jenkins 目录获取其中 steps.md 为原始部署步骤、jenkins-namespace.yml 为命名空间、jenkins-sa.yml 为 RBAC、jenkins-volume.yml 为持久化卷、jenkins-values.yml 为 Helm 参数Pipeline/Jenkinsfile 及其配套 Dockerfile、index.html 可用于验证流水线构建能力。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐在 minikube 上使用 Helm 部署 Jenkins完整实操指南与 Kubernetes 流水线配置在 minikube 上使用 Helm 部署 Jenkins完整实操指南与 Kubernetes 流水线配置 本文以 90DaysOfDevOps 仓库 20文档/教程Kubernetes 集群日志监控实战基于 90DaysOfDevOps 在 Minikube 上部署 EFK StackElasticsearch Fluentd KibanaKubernetes 集群日志监控实战基于 90DaysOfDevOps 在 Minikube 上部署 EFK StackElasticsearch F文档/教程使用 Helm 在 Kubernetes 上部署 Cognee内置 PostgreSQL pgvector 的完整指南使用 Helm 在 Kubernetes 上部署 Cognee内置 PostgreSQL pgvector 的完整指南 Cognee 是开源 AI 记忆平人工智能AI AgentRAG知识图谱后端MCP 服务上一篇SuperClaude未来发展路线2025年功能规划与技术愿景下一篇Ory Hydra容器镜像优化减小体积与加速部署的5个技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →