Jenkins Pipeline 实现蓝绿发布的核心是将环境隔离、流量切换与自动验证代码化,通过声明式流水线编排检出构建、green部署、健康检查、流量切换及回滚等阶段,并协同Kubernetes/Helm或Ansible等工具确保安全可靠。

用 Jenkins Pipeline 实现蓝绿发布,核心是把“环境隔离 + 流量切换 + 自动验证”写进代码化的流水线里,而不是靠人工点按钮。它不依赖特定操作系统(CentOS/Ubuntu 都适用),关键在 Pipeline 的结构设计和外部系统协同。
准备两套独立运行环境
蓝绿发布的基础是两个完全相同的生产级环境:一个承载当前线上版本(比如叫 blue),另一个用于部署新版本(green)。它们必须物理或逻辑隔离:
- 如果是 Kubernetes,就建两个 Deployment(
app-blue和app-green),共享同一个 Service,但通过 label selector 控制流量指向 - 如果是传统服务器,需准备两组 IP 或域名(如
blue.example.com/green.example.com),后端反向代理(Nginx、HAProxy)负责路由切换 - 数据库通常共用,但要注意新旧版本兼容性;若涉及 schema 变更,需保证向前兼容或采用双写过渡
用声明式 Pipeline 编排全流程
推荐使用 Declarative Pipeline(Jenkinsfile 管理),便于版本控制、复用和审计。典型阶段包括:
- 检出与构建:拉取代码,编译打包,推送到镜像仓库(如 Docker Registry)
- 部署 green 环境:用 kubectl 或 Ansible 更新 green 的 Deployment / 配置文件,启动新版本服务
-
健康检查与冒烟测试:调用接口验证关键路径(如
GET /health、POST /login),失败则中断流程 - 流量切换:更新 Service 的 label selector(K8s)或修改 Nginx upstream(传统架构),将 100% 流量切到 green
- 旧环境下线或保留:blue 环境可暂停、缩容为 0 副本,或保留作为快速回滚通道
安全切换与一键回滚机制
切换不是终点,而是风险控制的开始:
- 切换后自动执行 5–10 分钟观察期,采集日志、错误率、响应延迟等指标(可集成 Prometheus + Grafana)
- 设置人工确认门禁(
inputstep):关键切换前弹出审批,避免误操作 - 回滚只需反向操作——把 Service 指回 blue 标签,或恢复 Nginx 配置。整个过程应在 30 秒内完成,无需重新构建
- 建议在 Pipeline 中显式定义
rollbackstage,和主发布流程并列,避免临时手写命令出错
配合外部工具提升可靠性
Jenkins 本身不直接管理基础设施,需借力成熟工具补足能力:
-
Kubernetes + Helm:用 Helm Release 区分 blue/green,通过
helm upgrade --install部署,用helm rollback回退 - Ansible:适合非容器化环境,用 playbook 统一管理配置、启停服务、校验状态
- GitOps 工具(Argo CD / Flux):把环境状态声明存 Git,Jenkins 只负责提交变更,由 GitOps 工具自动同步,实现闭环
- 避免在 Pipeline 中硬编码密码或密钥,统一用 Jenkins Credentials Binding 或 Vault 插件注入


















