自动化与交付 · 高级

CI/CD 持续交付

将源码、测试、镜像摘要、发布门禁与回退证据串联,先在测试环境建立可追溯的交付流程。

CI/CDDockerKubernetes自动化

场景目标

交付一条经测试环境验证的源码到镜像摘要再到部署的可追溯流水线,证明失败门禁有效、凭据隔离有效,并完成一次有记录的上一版本恢复演练。

环境要求

准备具有可运行测试的业务源码、组织选定的受支持 Jenkins/JDK/插件组合、Docker 构建环境、Trivy 漏洞库以及兼容的 Kubernetes 测试集群;登记所有版本。需要按项目划分的 SCM、仓库推送和命名空间部署凭据,禁止将生产凭据暴露给不可信分支或共享不可信执行节点。约定单次构建时长、并发数、磁盘缓存、镜像留存与测试命名空间配额。备份 Jenkinsfile、部署清单和已验收镜像摘要,评审状态迁移兼容性。估时 300 分钟为单应用试点,不含测试体系建设、插件升级或生产上线。

参考架构 · 非实时拓扑

源码、制品门禁与测试环境交付架构

Jenkins 读取受保护流水线,在隔离节点测试和构建同一候选制品,经扫描与审批门禁后按摘要交付 Kubernetes 测试环境,并保留验收证据。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

源码、制品门禁与测试环境交付架构:组件关系图Jenkins 读取受保护流水线,在隔离节点测试和构建同一候选制品,经扫描与审批门禁后按摘要交付 Kubernetes 测试环境,并保留验收证据。 Jenkins → 受保护源码仓库:检出指定提交;Jenkins → 隔离构建节点:调度受限任务;隔离构建节点 → Trivy:提交候选制品;Trivy → 测试与审批门禁:风险与执行状态;测试与审批门禁 → Jenkins:批准或阻断推进;隔离构建节点 → 制品仓库:推送同一制品;Jenkins → Kubernetes 测试:按摘要更新清单;Kubernetes 测试 → 制品仓库:按摘要拉取;验收与发布记录 → Kubernetes 测试:冒烟与状态核对。箭头说明见下方流向解读。
逻辑参考图,默认交付目标为测试环境,门禁表示需要配置的流程职责;不表示真实流水线已接通或生产自动发布已启用。

受保护源码仓库

数据 / 制品

保存试点源码和经审阅 Jenkinsfile,分支与脚本修改权限决定哪些任务可以触达敏感阶段。

全部组件职责 8 个组件
受保护源码仓库
保存试点源码和经审阅 Jenkinsfile,分支与脚本修改权限决定哪些任务可以触达敏感阶段。
Jenkins
调度测试、构建、扫描和部署阶段,按项目及阶段隔离 SCM、仓库与测试环境凭据;生产凭据不进入本试点。工具介绍 Jenkins
隔离构建节点
使用固定输入完成测试和候选镜像构建,限制并发、超时与磁盘。缓存不能替代当前提交测试。工具介绍 隔离构建节点
验收与发布记录
关联冒烟、部署事件、脱敏日志和恢复结果,并记录人工确认与观察窗口;未验证阶段保持未完成。
测试与审批门禁
表示流水线需要实现的准入规则及人工确认环节,不是独立已部署服务;失败测试、扫描异常和过期例外阻断推进。
Trivy
扫描同一候选制品,记录工具与漏洞库时间;风险阻断和扫描器运行错误均不能静默当作通过。工具介绍 Trivy
Kubernetes 测试
只向核对过的测试集群和命名空间部署候选摘要,验证配额、拉取权限、探针、可用副本和业务冒烟。工具介绍 Kubernetes 测试
制品仓库
保存镜像 manifest 和层,固定摘要关联源码、构建号及报告;标签不能代替验收制品身份。工具介绍 制品仓库
流向解读 9 条连接
  1. 1

    Jenkins 受保护源码仓库

    数据 / 请求 · 检出指定提交

    箭头表示流水线发起只读检出请求,返回的源码与 Jenkinsfile 需对应同一确定提交。

  2. 2

    Jenkins 隔离构建节点

    控制 / 管理 · 调度受限任务

    只在获准执行节点运行阶段任务,不让不可信分支共享生产权限。

  3. 3

    隔离构建节点 Trivy

    数据 / 请求 · 提交候选制品

    将构建结果交给扫描阶段,报告必须关联即将推广的相同内容摘要。

  4. 4

    Trivy 测试与审批门禁

    观测 / 查询 · 风险与执行状态

    报告扫描范围、风险判定和工具执行状态,异常不能通过忽略退出码放行。

  5. 5

    测试与审批门禁 Jenkins

    控制 / 管理 · 批准或阻断推进

    测试、扫描、例外和必要审批满足后才推进下游;生产适配属于独立评审。

  6. 6

    隔离构建节点 制品仓库

    数据 / 请求 · 推送同一制品

    执行节点在门禁允许的阶段推送并记录仓库返回的摘要,推送权限仅限约定范围。

  7. 7

    Jenkins Kubernetes 测试

    控制 / 管理 · 按摘要更新清单

    部署身份只修改批准的测试对象,保留上一已验收摘要和配置作为恢复点。

  8. 8

    Kubernetes 测试 制品仓库

    数据 / 请求 · 按摘要拉取

    目标节点运行时向仓库发起受授权拉取,镜像数据返回运行端,身份必须与报告一致。

  9. 9

    验收与发布记录 Kubernetes 测试

    观测 / 查询 · 冒烟与状态核对

    按发布契约检查测试请求、可用副本和指标,记录实际观察结果而非只看部署命令退出码。

从架构到实施

  1. 01

    从可恢复试点确定权限与输入

    确认源码、业务测试和状态依赖,隔离执行节点与凭据,编排测试阻断和固定输入构建。

  2. 02

    让同一摘要穿过门禁与部署

    关联扫描与例外记录,核对目标集群、命名空间、配额及权限,部署同一候选摘要而不是浮动标签。

  3. 03

    把恢复验证作为交付的一部分

    执行测试环境业务冒烟与指标观察,演练上一摘要恢复,明确状态迁移边界及尚未完成的生产前置条件。

故障域与操作边界

凭据掩码不是任务隔离

能修改流水线的人可能间接调用凭据;必须控制脚本权限、节点隔离和分支准入,不能只依赖日志掩码。

镜像回退不能撤销全部状态

数据库迁移、外部写入和队列消费需独立兼容或补偿方案,恢复旧镜像不自动恢复这些副作用。

测试发布不等于生产上线

扫描通过也不等于业务正确或完整安全。生产仍需独立审批、受保护凭据、窗口与观察责任,图中不默认启用。

架构依据与版本核对 2 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

方案说明

架构与交付路径

建议用 Jenkins 从受保护源码分支读取 Jenkinsfile,在隔离执行节点完成测试与 Docker 镜像构建,经 Trivy 扫描和业务验收后将制品写入受控仓库,再按镜像摘要部署到指定 Kubernetes 环境。构建一次的同一摘要贯穿测试和发布,记录源码提交、构建号、报告与环境版本。

适用边界

实际运行依赖可构建源码、业务测试、受保护凭据、仓库及目标环境,本内容不表示流水线已接通,也不声称生产自动发布已经完成。默认目标是测试环境;生产发布需要项目已有的受保护分支、审批门禁和变更窗口。镜像扫描不能证明业务正确或完整安全,应用回退也不能自动撤销数据库迁移和外部副作用。

全局验收

一次测试提交可追溯到固定镜像摘要,失败测试或阻断级扫描结果不能进入发布阶段,未授权分支拿不到发布凭据。测试发布应完成可用副本、冒烟请求与关键指标检查;回退演练使用之前验证过的摘要,记录恢复耗时和状态兼容性。所有 <...> 均为需替换的占位符,具体命令先在隔离环境验证。

配套知识

官方参考

工具编排

5 个关联工具
  1. Jenkins流水线与门禁编排组织源码、测试、报告、凭据范围与受控部署阶段。
  2. Docker Engine制品构建与摘要识别在隔离构建环境产生可追溯镜像。
  3. Trivy镜像风险门禁提供已知漏洞等检查结果,按约定策略决定是否阻断。
  4. CNCF Distribution受控制品仓库保存固定摘要的镜像,需另配 TLS 和认证授权。
  5. Kubernetes测试环境交付与状态检查承载按摘要部署、滚动状态检查和版本恢复演练。

实施步骤

共 7 步
  1. 01

    确定源码、测试与发布契约

    选择一个依赖清楚且可恢复的试点应用,明确构建入口、测试命令、运行端口、健康探测和外部服务;将数据库迁移与应用发布的依赖单独记录。以下命令仅检查本地检出的源码,<SOURCE_DIR> 为绝对路径,不会拉取或提交代码。登记当前提交与工作区状态,定义哪些分支只运行测试、哪些分支能申请部署,以及每阶段失败时的停止条件。

    git -C '<SOURCE_DIR>' status --short
    git -C '<SOURCE_DIR>' rev-parse HEAD
    验证标准

    源码提交可唯一定位,试点具备可运行的测试和明确的健康判据。发布范围、目标环境、审批责任人及状态迁移边界均写入契约;缺失的源码、测试或环境依赖被显式列为未就绪项。

    停止与回退

    本步骤只调查源码和流程,不变更应用环境。发现构建不可复现或状态迁移无法回退时,暂停部署设计,保留当前提交和评审记录;先补足试点条件,不用空测试代替业务验收。

    返回步骤起点
  2. 02

    隔离执行节点与发布凭据

    为构建任务分配受控执行节点,约定并发、工作目录、磁盘与超时,避免不可信任务共享可访问生产资源的节点。SCM 只读、仓库推送和测试环境部署使用独立凭据,绑定到需要的项目和阶段;生产凭据不进入本试点。审阅 Jenkinsfile 修改权限,防止能改脚本的人间接窃取凭据。日志掩码只是降低意外泄漏,不能替代隔离与权限控制。

    验证标准

    测试分支无法读取或调用发布凭据,任务只能访问约定的仓库与测试命名空间。执行节点资源限额和任务超时生效,凭据没有出现在源码、构建参数明文、归档文件或控制台输出中。

    停止与回退

    停用新建试点任务并撤销本次新增凭据绑定,回收空闲执行节点授权。若测试暴露了凭据,应按组织机制轮换对应凭据并检查访问记录;不能仅删除控制台文本后继续扩大发布范围。

    返回步骤起点
  3. 03

    编排测试与固定输入构建

    把检出、依赖安装、静态检查、单元测试和镜像构建拆成有清晰退出状态的阶段,保存测试报告并使失败阻断下游。基础镜像和依赖按项目策略固定版本或摘要,Docker 构建上下文通过忽略文件排除密钥和无关目录。镜像标签关联提交和构建号,构建结果记录目标架构;缓存用于提速,但不得用缓存成功代替当前提交的测试与来源验证。

    验证标准

    人为引入的测试失败在测试环境能够阻断镜像发布阶段,修复后报告与源码提交一致。检查镜像中不存在测试密钥或工作区敏感文件,架构与运行环境匹配,构建输入和输出均可追溯。

    停止与回退

    恢复上一版 Jenkinsfile 和构建定义,停用失败的试点任务触发器;保留失败报告便于定位。仅按明确清单处理试点构建缓存,不删除仓库中已在运行环境使用或被回退计划引用的镜像。

    返回步骤起点
  4. 04

    建立扫描门禁与制品记录

    对候选镜像记录仓库摘要、扫描器版本、漏洞库更新时间和报告,再依据业务确认的严重度、可利用性及例外期限决定是否阻断。明确区分发现风险的策略失败与漏洞库下载、认证或扫描器运行失败;两类结果都不得被静默视为通过。将同一摘要推进到测试阶段,禁止用可移动的 latest 标签替代验收制品;扫描通过仍需来源核验和业务测试。

    验证标准

    候选制品关联提交、构建号、摘要与报告,命中阻断策略的样本不能进入部署;扫描执行异常显示为失败或需处理状态。例外包含责任人、原因和到期时间,测试环境使用的摘要与报告对象相同。

    停止与回退

    暂停该摘要的后续推进并保留扫描证据,恢复上一版门禁配置前先评审差异。错误策略可在测试任务中修正重跑;不能靠忽略退出码或永久豁免所有高危项解除阻断,也不覆盖已验收制品。

    返回步骤起点
  5. 05

    校验目标环境并试点部署

    部署前核对集群上下文、命名空间、配额、镜像拉取权限、探针和资源请求,确认本次变更不扩大 RBAC。下例 <CONTEXT><TEST_NAMESPACE><DEPLOYMENT> 均需替换,只读取目标状态。将候选摘要写入经审阅的测试清单,先确认旧副本和上一版本摘要可恢复,再通过既定流水线部署;不得因当前示例省略业务必要的审批门禁。

    kubectl --context='<CONTEXT>' -n '<TEST_NAMESPACE>' get resourcequota
    kubectl --context='<CONTEXT>' -n '<TEST_NAMESPACE>' get deployment '<DEPLOYMENT>' -o wide
    验证标准

    环境身份、资源预算与镜像摘要相符,部署账号权限仅覆盖试点对象。发布过程在约定超时内完成可用副本检查;配额不足、拉取失败或探针失败时流水线停止,并保留具体事件用于定位。

    停止与回退

    停止后续部署阶段,按事先保存的清单恢复测试环境上一已验收摘要,确认可用副本和健康探针恢复。数据库或外部状态变更按独立方案处理;状态不兼容时优先停止推进,不能假定镜像回退即可恢复。

    返回步骤起点
  6. 06

    执行冒烟与可观测验收

    发布后执行覆盖关键读写路径的测试环境冒烟,使用专用测试数据并说明清理策略;检查错误率、延迟、重启次数和关键依赖连接,确认测试流量不会进入生产下游。将观察窗口、阈值和停止条件固化为阶段输入,并由明确角色确认结果。对失败保留部署事件、请求关联 ID 和脱敏日志,让后续排查能够区分镜像问题、配置差异与环境故障。

    验证标准

    关键业务请求、可用副本与指标全部达到发布契约,报告显示观察起止时间、执行人和测试范围。测试数据可追溯且没有污染生产系统,出现指标越界时门禁能够阻止后续环境推进。

    停止与回退

    停止测试流量并按记录清理可恢复的测试数据,恢复上一已验收部署。若错误涉及外部写入或队列消费,按业务恢复方案补偿并核对状态;保留证据和失败摘要,未定位前不扩大到其他环境。

    返回步骤起点
  7. 07

    演练恢复并形成发布交接

    在测试环境从已验收版本升级到候选版本,再恢复上一摘要,核对配置、Secret 引用和状态兼容性;记录恢复动作、开始时间与业务重新可用时间。整理源码提交、审批、镜像摘要、测试报告、部署清单和责任人之间的对应关系。生产适配作为独立评审事项,列出受保护凭据、变更窗口、监控观察和审批条件,保持本方案的测试环境边界清晰。

    验证标准

    回退演练达到事先约定的恢复目标,应用请求与持久状态一致,所有证据可以从构建记录查到。交接明确哪些阶段已经在测试环境验证、哪些生产前置条件仍未完成,没有将草稿流水线标为生产已上线。

    停止与回退

    将测试环境恢复到约定的稳定摘要并停用临时触发器,保留回退报告。若恢复耗时超标或状态核对失败,停止推广,修订应用兼容和恢复方案后重新在测试环境验收,不自动开启生产发布。

    返回步骤起点

DOUYA OPS ECOSYSTEM

体验豆芽自研工具与场景能力

部分场景提供体验环境,用于功能验证、测试和技术交流。