持续交付:Jenkins 凭据、流水线与发布停止点

从提交、构建到制品晋级和灰度验收,区分构建重试、应用回退与数据库恢复。

CI/CD自动化

持续交付:Jenkins 发布运维

职责边界

Jenkins 在本蓝图中负责执行已审阅的构建与交付流程。GitLab 保存源码与评审,Nexus 或 Harbor 保存制品,Kubernetes 承接部署;批准变更和判断业务恢复仍由责任人承担。流水线成功只表示所配置步骤成功,不能代替生产验收。本方案的流水线、部署权限和演练都尚待目标环境授权验证。

参数化多服务发布流水线

发布入口使用参数化 Pipeline,触发前需确认以下参数:

Jenkins 参数化发布界面:pack_mode、env、服务勾选与各服务独立分支选择
Jenkins 参数化发布界面:pack_mode、env、服务勾选与各服务独立分支选择
  • `pack_mode`deploy(构建并发布到目标环境)或 package(仅打包不发布,产品包可从提示地址下载)。
  • `env`:发布目标环境,可选 dev(开发)、test(测试)、prod(生产);选择 package 模式时可忽略此项。
  • 服务多选勾选框:按需勾选本次发布的微服务模块(server 后端、frontend 前端、web Web应用、app 移动端包等);未勾选的服务本次自动跳过,不触发其构建或部署。
  • `branch`(各服务独立分支):每个服务均配有独立分支选择器,支持 master、版本 Release 标签(如 v1.15.0v1.14.0)及阶段里程碑分支(如 star_2026_7_30);不同服务可分别选用不同分支。
发布前核对:确认目标环境、各服务分支与上次已验收版本的差异,不要在未评审的分支上直接发布生产。

流水线阶段总览

一次完整构建的典型流水线阶段及执行耗时:

Jenkins CI 流水线 Stage View:各阶段耗时与历史构建成功记录
Jenkins CI 流水线 Stage View:各阶段耗时与历史构建成功记录
  • Declarative: Tool Install(~455 ms):检查并就绪 JDK、Node.js、Docker 等工具链。
  • Init(~1 s):初始化工作区,读取并校验发布参数。
  • Prepare(~7 s):准备依赖缓存、鉴权凭据与环境变量。
  • Log(~6 s):记录本次构建的提交、参数与触发来源。
  • checkout(~60 s):按各服务选定分支完成源码检出(含前端独立检出 ~37 s、后端独立检出 ~16 s)。
  • Build frontend~3 min 10 s):前端依赖安装与打包(耗时最长,可通过依赖缓存预热优化)。
  • build backend / frontend(~65 s):后端编译与前后端制品整合。
  • Build backendA(~31 ms):附加后端微服务模块独立构建。
  • zip(~2 s):将所有制品打包为交付安装包。
  • Transfers(~465 s):将安装包传输至目标主机或制品仓库。
  • Declarative: Post Actions(~300 ms):清理工作区,发送构建通知。
前端打包(Build frontend)是耗时最长的阶段,平均约 3 分 10 秒,可通过依赖缓存预热优化。整条链路从提交到制品传输完成约 7–10 分钟。

前提依赖与凭据隔离

登记控制器、构建节点、执行网络、缓存、工具链、插件来源及制品存储。构建账号只读所需源码,发布账号只写指定仓库或命名空间;非可信分支构建不得取得发布凭据。凭据应限制在所需项目或文件夹范围,而不是为方便而配置成所有任务可用。Jenkins 凭据安全说明

为每个发布环境定义批准人、并发限制、观察窗、超时和停止条件。证书、私钥与令牌只通过受控凭据绑定使用;不要把完整环境变量、请求头或认证配置打印进日志,也不在项目文档中保存真实值。

接入与制品晋级

先使用非生产仓库与执行节点验证提交触发、检出和测试,保存提交摘要及流水线定义版本。随后生成不可混淆的构建编号,记录依赖锁定信息、测试报告、制品校验和以及镜像摘要。通过批准门后将同一制品晋级至测试环境,而不是在每个环境重新构建。

部署步骤记录目标集群、命名空间、旧摘要、新摘要、配置版本和批准工单。数据库变更由独立审批流程控制,关联SQL 审计手册。发布末尾既要检查平台就绪状态,也要验证关键业务路径和日志、告警变化。

日常巡检与值班证据

检查队列等待、执行器占用、离线节点、工作空间磁盘、缓存增长、失败阶段分布及插件变更。观察构建时长应拆分检出、依赖下载、测试、上传和部署,不把一切归因为 Jenkins 性能。每次发布保存构建、提交、制品与部署的对应关系,并确认历史可回退制品未被仓库清理。

定期复核过期凭据、长期不用的任务和权限扩大记录。节点失联后先确认是否仍有后台进程或远端部署在执行,防止重新调度产生双重发布。

故障分支与安全重试

任务未触发时查 GitLab 事件送达、Webhook 鉴权、分支过滤和 Jenkins 排队;检出失败查仓库权限与证书;依赖失败转向 Nexus 的代理、缓存和坐标校验。上传失败先查询目标摘要或包坐标,区分完全失败与服务端已写入但响应丢失。

部署超时不要直接重跑整条流水线,先检查目标工作负载和事件,确认是否已部分生效。测试失败保留报告;凭据泄漏则停止相关任务并通过批准流程吊销、轮换和审计,不能仅删除控制台输出就宣布风险解除。

安全与备份恢复

备份范围由安装方式确定,至少核对控制器配置、任务定义、必要构建元数据及插件清单。控制器密钥与普通备份分离保管,恢复时才由授权人员合并,避免备份同时暴露密文和解密材料。Jenkins 备份与恢复文档

恢复演练在隔离网络中关闭真实触发和生产发布出口,验证任务可加载、凭据可用及制品可追踪后再申请切换。应用回退应指向已验收的旧制品和兼容配置;已提交数据库写入不会因镜像回退自动撤销,需另行评估恢复点和补偿策略。

验收与停止点

至少证明非可信分支无法读发布凭据、重复事件不会重复发布、批准门有效、制品摘要一致和发布失败可停止。记录一次旧制品回退以及业务数据兼容性结果。缺少测试证据、目标环境无法确定、回退制品缺失或数据库状态不明时,停止晋级并交由责任人判断。

官方参考

实施时对照 Jenkins 安全指南 核对控制器隔离及构建权限;完整业务链可结合持续交付场景验证。本文没有创建真实任务、安装插件或执行任何发布。

DOUYA OPS ECOSYSTEM

完善文档,帮助更多运维人

把安装、配置、API 与运维方法沉淀为清晰文档,让工具和项目更容易被正确使用。