Jenkins + Kubernetes 从入门到精通:CI/CD 自动化流水线实战指南
当与 Kubernetes 结合时,Jenkins 可以将每个构建任务容器化运行,实现弹性伸缩与资源隔离。每个构建任务自动在独立的 Kubernetes Pod 中执行,任务结束即销毁。能够通过流水线(Pipeline)实现代码构建、测试、部署全流程自动化。在高并发场景下,每个任务自动创建独立 Pod,提高构建效率与资源利用率。可直接运行在 Jenkins Agent 容器中,实现轻量级构建环境。
一、Jenkins 是什么
Jenkins 是一款开源的 持续集成与持续交付(CI/CD)自动化服务器,
能够通过流水线(Pipeline)实现代码构建、测试、部署全流程自动化。
当与 Kubernetes 结合时,Jenkins 可以将每个构建任务容器化运行,实现弹性伸缩与资源隔离。
一句话概括:
Jenkins + Kubernetes = 自动化部署 + 弹性 DevOps 平台。
二、Jenkins 的核心特性
| 特性 | 描述 |
|---|---|
| 插件生态丰富 | 支持上千种插件 |
| 支持多语言项目 | Java、Node.js、Python、Go 等 |
| 流水线(Pipeline) | 声明式自动化构建流程 |
| 分布式构建 | Master/Agent 模型支持并行任务 |
| 与 Git 集成 | 支持 GitHub、GitLab、Bitbucket |
| 容器化支持 | 可运行在 Docker 与 Kubernetes 中 |
| Web 可视化界面 | 直观的任务管理与日志查看 |
三、在 Kubernetes 中部署 Jenkins
1. 使用 Helm 安装 Jenkins
helm repo add jenkins https://charts.jenkins.io helm repo update helm install myjenkins jenkins/jenkins
2. 获取管理员密码
kubectl get secret myjenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode
访问 Jenkins Web 控制台:
http://<NodeIP>:8080
四、Jenkins 在 Kubernetes 中的结构
+-------------------------------------------------------------+ | Kubernetes 集群 | |-------------------------------------------------------------| | Jenkins Master Pod <-> Jenkins Agent Pods (动态生成)| |-------------------------------------------------------------| | PVC (持久卷) 保存 Jenkins 数据 | |-------------------------------------------------------------| | Docker / Kaniko 执行构建任务 | +-------------------------------------------------------------+
Jenkins Master 负责调度与控制,
每个构建任务自动在独立的 Kubernetes Pod 中执行,任务结束即销毁。
五、Jenkins 基本配置
1. 插件安装
安装以下核心插件:
-
Kubernetes Plugin
-
Git Plugin
-
Pipeline Plugin
-
Blue Ocean
-
Docker Pipeline
-
GitLab Plugin
2. 系统配置
在 Jenkins Web 界面:
Manage Jenkins → Configure System → Cloud → Kubernetes
填写:
-
Kubernetes URL:
https://kubernetes.default.svc -
Namespace:
jenkins -
Jenkins URL:
http://myjenkins:8080 -
Credentials:选择 ServiceAccount 自动认证
六、创建第一个流水线任务
1. 新建 Pipeline
New Item → Pipeline → OK
2. Pipeline Script
pipeline { agent { kubernetes { yaml """ apiVersion: v1 kind: Pod spec: containers: - name: build image: node:18 command: - cat tty: true """ } } stages { stage('Checkout') { steps { git 'https://github.com/example/node-demo.git' } } stage('Build') { steps { sh 'npm install' } } stage('Test') { steps { sh 'npm test' } } stage('Deploy') { steps { sh 'echo "Deploy to Kubernetes..."' } } } }
点击 Build Now,Jenkins 会自动创建一个临时 Pod 执行任务。
七、Declarative Pipeline(声明式流水线)详解
| 块 | 功能 |
|---|---|
agent |
指定执行环境(如 Docker 或 Kubernetes) |
stages |
定义任务阶段 |
steps |
每个阶段的执行命令 |
post |
任务后的清理或通知逻辑 |
environment |
环境变量设置 |
triggers |
触发条件(定时、Git webhook 等) |
示例:
pipeline { agent any environment { DOCKER_IMAGE = "registry.local/webapp:${BUILD_NUMBER}" } stages { stage('Build') { steps { sh 'mvn clean package' } } stage('Docker Build') { steps { sh 'docker build -t $DOCKER_IMAGE .' } } stage('Push Image') { steps { withCredentials([usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'USER', passwordVariable: 'PASS')]) { sh 'docker login -u $USER -p $PASS registry.local' sh 'docker push $DOCKER_IMAGE' } } } } post { success { echo "✅ 部署成功" } failure { echo "❌ 构建失败" } } }
参考案例:www.yfltc.cn
八、与 GitLab 自动集成
1. Webhook 配置
在 GitLab 项目中:
Settings → Webhooks → URL: http://jenkins.example.com/project/myapp
触发事件:Push events
2. Jenkinsfile 自动加载
仓库根目录创建 Jenkinsfile:
pipeline { agent any stages { stage('Clone') { steps { git branch: 'main', url: 'https://gitlab.com/team/myapp.git' } } stage('Build') { steps { sh 'npm ci && npm run build' } } stage('Deploy') { steps { sh 'kubectl apply -f k8s/' } } } }
提交后自动触发构建。
九、Jenkins 与 Docker 集成
构建镜像:
stage('Docker Build') { agent { docker { image 'docker:latest'; args '-v /var/run/docker.sock:/var/run/docker.sock' } } steps { sh 'docker build -t webapp:v1 .' sh 'docker run -d -p 8080:80 webapp:v1' } }
可直接运行在 Jenkins Agent 容器中,实现轻量级构建环境。
十、将构建结果部署到 Kubernetes
deploy.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: webapp spec: replicas: 3 selector: matchLabels: app: webapp template: metadata: labels: app: webapp spec: containers: - name: webapp image: registry.local/webapp:latest ports: - containerPort: 80
在 Pipeline 中添加:
stage('Deploy to K8s') { steps { sh 'kubectl apply -f k8s/deploy.yaml' } }
十一、Jenkins 与 Helm 集成
stage('Deploy with Helm') { steps { sh 'helm upgrade --install webapp ./charts/webapp --set image.tag=latest' } }
可实现多环境一键发布。
十二、Blue Ocean 可视化流水线
安装插件后访问:
http://jenkins.example.com/blue
展示每个阶段执行情况、日志与失败节点,支持实时可视化回放。
十三、Jenkins 分布式集群
| 节点 | 作用 |
|---|---|
| Master | 控制中心,负责任务调度 |
| Agent(Slave) | 执行任务,支持 Docker/K8s 自动创建 |
| Dynamic Pod | Jenkins Kubernetes 插件自动创建的临时执行节点 |
在高并发场景下,每个任务自动创建独立 Pod,提高构建效率与资源利用率。
十四、流水线触发机制
| 方式 | 示例 |
|---|---|
| 手动触发 | 在 Jenkins 界面点击 "Build Now" |
| 定时触发 | triggers { cron('H 2 * * *') } |
| Git Push 触发 | Webhook |
| 外部 API 调用 | curl -X POST http://jenkins/job/myapp/build |
十五、凭证管理
Jenkins 内置 Credentials 管理系统:
-
用户名密码:
usernamePassword -
SSH 密钥:
sshUserPrivateKey -
API Token:
string
使用:
withCredentials([string(credentialsId: 'kubeconfig', variable: 'KUBECONFIG')]) { sh 'kubectl get pods' }
十六、常见问题与优化
| 问题 | 解决方案 |
|---|---|
| 构建 Pod 频繁创建失败 | 检查 Jenkins ServiceAccount 权限 |
| 镜像缓存失效 | 使用 Kaniko 或 BuildKit 构建缓存 |
| 构建速度慢 | 使用本地 Docker registry |
| 日志过大 | 配置 logrotate 或远程存储 |
| 节点负载过高 | 开启 Pod 自动伸缩(HPA) |
十七、监控与报警
-
Prometheus Jenkins Exporter:监控构建任务、成功率、等待时间
-
Grafana Dashboard:可视化 Jenkins 指标
-
Slack/Email 通知:自动推送构建结果
post { success { slackSend channel: '#devops', message: "✅ 构建成功 #${BUILD_NUMBER}" } failure { slackSend channel: '#devops', message: "❌ 构建失败 #${BUILD_NUMBER}" } }
十八、Jenkins + GitOps 流程
-
Git 提交触发流水线
-
Jenkins 构建并推送镜像
-
更新 Helm Chart 版本
-
ArgoCD 自动检测变化并同步集群
-
完成自动化发布
实现从代码提交到部署上线的全自动 CI/CD。
十九、安全与备份
-
启用 HTTPS 访问
-
定期备份
/var/jenkins_home -
限制匿名访问与权限分级
-
使用 LDAP/SSO 集成
-
加密凭证存储
备份命令:
tar -czf jenkins_backup_$(date +%F).tar.gz /var/jenkins_home
二十、企业级实战架构
| 场景 | 实践方案 |
|---|---|
| 微服务持续集成 | Jenkins + Docker 构建 + Helm 部署 |
| 自动化测试 | Jenkinsfile 集成单元测试与代码覆盖率 |
| 蓝绿/灰度发布 | Pipeline 分支逻辑控制流量 |
| 多环境管理 | Dev、Staging、Prod 独立命名空间 |
| 混合云部署 | Jenkins 控制多集群 Kubernetes 部署 |
| 安全合规流水线 | 自动扫描漏洞与安全策略检查 |
| 全链路监控 | Prometheus + Grafana + Loki 集成 |
更多推荐



所有评论(0)