阅读量:4
Debian 上用 Jenkins 落地蓝绿部署的完整方案
一 架构与前置准备
- 运行环境
- 在 Debian 安装 Java 11、Jenkins、Docker,并建议安装 Kubernetes 插件 与 Pipeline 插件;如需容器化交付,准备 镜像仓库(如 Docker Registry/Harbor)。
- 安全与权限:使用 RBAC 最小权限;凭据统一在 Jenkins Credentials 管理(K8s kubeconfig、Git SSH、镜像仓库账号等)。
- 目标架构
- 方案A(容器化):生产两套 Kubernetes 命名空间(如 prod-blue / prod-green),一次只承载流量的一套为 Active,另一套为 Standby;通过修改 Service 的 selector 或 Ingress 权重完成切换。
- 方案B(传统主机):两台 Nginx/HAProxy 前端 + 两套后端实例(blue/green),通过修改 upstream 指向切换流量。
二 方案一 Kubernetes 蓝绿部署
- 思路
- 预置两套完全一致的 Deployment + Service(命名空间或 Service 名区分),当前承载流量的为 Active;Jenkins 将新版本部署到 Standby,完成就绪检查与冒烟测试后,切换 Service selector 到新版本,实现秒级切换与快速回滚。
- 关键步骤
- 在代码库根目录放置 Jenkinsfile,采用 Declarative Pipeline;通过参数选择部署到 staging 或 production。
- 构建与推送镜像(示例):
- docker.build(“${env.DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER}”)
- docker push(“${env.DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER}”)
- 部署到预发布(Staging),运行自动化验收测试。
- 生产审批(input 步骤),超时例如 30 分钟。
- 生产蓝绿切换:
- 将新版本部署到 Standby(如当前是 blue,则部署到 green)。
- 等待就绪:kubectl rollout status deployment/${APP_NAME} -n ${targetNamespace} --timeout=300s
- 执行冒烟/健康检查。
- 切换流量:更新 Service selector 指向新版本标签,或更新 Ingress 的 canary/weight(若使用 Ingress-Nginx)。
- 观察指标与日志,确认稳定;如需回滚,将 Service 切回 Active 或执行 kubectl rollout undo。
- 参考 Jenkinsfile 片段(核心阶段)
- environment { DOCKER_REGISTRY = ‘registry.example.com’ APP_NAME = ‘my-app’ PROD_NAMESPACE_BLUE = ‘prod-blue’ PROD_NAMESPACE_GREEN = ‘prod-green’ KUBECONFIG = credentials(‘k8s-prod-config’) }
- parameters { choice(name: ‘DEPLOY_TO’, choices: [‘staging’,‘production’], description: ‘选择部署环境’) }
- stage(‘Blue-Green Switch’) {
when { equals expected: ‘production’, actual: params.DEPLOY_TO }
steps {
script {
def current = sh(script: “kubectl get svc ${APP_NAME} -n ${PROD_NAMESPACE_BLUE} -o jsonpath=‘{.spec.selector.version}’ || echo ‘blue’”, returnStdout: true).trim()
def target = (current == ‘blue’) ? ‘green’ : ‘blue’
def targetNs = (target == ‘blue’) ? env.PROD_NAMESPACE_BLUE : env.PROD_NAMESPACE_GREEN
def inactiveNs = (target == ‘blue’) ? env.PROD_NAMESPACE_GREEN : env.PROD_NAMESPACE_BLUE
// 1) 部署新版本到 Standby
sh “kubectl apply -f k8s/production-deployment.yaml -n ${targetNs}”
sh “kubectl rollout status deployment/${APP_NAME} -n ${targetNs} --timeout=300s”
// 2) 冒烟测试
sh “./healthcheck.sh --host ${APP_NAME}.${targetNs}.svc.cluster.local”
// 3) 切换流量(示例:更新 Service selector)
sh “”"
kubectl patch svc ${APP_NAME} -n ${PROD_NAMESPACE_BLUE} -p ‘{“spec”:{“selector”:{“app”:“${APP_NAME}”,“version”:“${target}”}}}’
“”"
// 4) 可选:短暂观察后清理旧环境
// sh “kubectl delete ns ${inactiveNs} || true”
}
}
}
注:生产上建议将切换与回滚封装为脚本/工具,并接入监控告警与日志聚合。
三 方案二 传统主机 Nginx 蓝绿部署
- 思路
- 两套后端 blue/green 目录或主机组;Nginx 通过 upstream 切换流量;Jenkins 负责发布新版本、健康检查与切换。
- 关键步骤
- 目录结构示例:/var/www/{blue,green}/current -> 版本化目录(软链)。
- Jenkins 拉取新版本、构建、发布到 Standby 目录,执行健康检查。
- 切换流量:原子替换 Nginx upstream 配置并 reload。
- 验证与回滚:若异常,立即切回 Active upstream 并 reload。
- Nginx 配置示例
- upstream backend {
server 10.0.1.10:8080; # blue
server 10.0.1.11:8080; # green
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
切换脚本思路(示意): - 将 upstream 中 server 列表替换为目标环境地址 → nginx -t → systemctl reload nginx。
该方式简单可靠,适合无 K8s 的场景。
- upstream backend {
server 10.0.1.10:8080; # blue
server 10.0.1.11:8080; # green
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
四 质量门禁 审批 回滚与可观测性
- 质量门禁
- 在流水线中加入 单元测试、静态代码分析(SonarQube)、制品扫描、E2E/冒烟测试;测试不通过则阻断发布。
- 人工审批
- 生产阶段加入 input 审批,设置 超时(如 30 分钟),保留发布审计。
- 快速回滚
- Kubernetes:kubectl rollout undo deployment/${APP_NAME} -n ${namespace};或把 Service selector 切回旧版本。
- Nginx:将 upstream 切回 Active 并 reload。
- 可观测性
- 接入 日志聚合(ELK)、指标与告警(Prometheus/Grafana)、分布式追踪;发布后在 灰度窗口 观察错误率、延迟、吞吐等关键指标,再扩大流量或完成切换。
五 常见坑与优化建议
- 数据库与有状态:蓝绿共用 生产数据库 时,确保 向后兼容(避免破坏性变更);必要时采用 双写/迁移脚本/特性开关 降低风险。
- 配置与密钥:环境配置与 Secret 随环境隔离,避免把 生产配置 带入 Standby;使用 K8s Secret 或 Vault。
- 健康检查:为 就绪探针(readiness) 与 存活探针(liveness) 配置合理阈值,避免将未就绪实例接入流量。
- 发布窗口与监控:选择 低峰时段 发布,设置 自动回滚阈值(如错误率 > 1% 自动回切),并保留 最近几次发布产物 便于应急。
- 渐进式流量:若需更平滑,可在蓝绿基础上引入 金丝雀发布(按权重逐步放量),进一步降低风险。
以上就是关于“Debian Jenkins如何实现蓝绿部署”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm