一、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 URLhttps://kubernetes.default.svc

  • Namespacejenkins

  • Jenkins URLhttp://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 流程

  1. Git 提交触发流水线

  2. Jenkins 构建并推送镜像

  3. 更新 Helm Chart 版本

  4. ArgoCD 自动检测变化并同步集群

  5. 完成自动化发布

实现从代码提交到部署上线的全自动 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 集成
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐