场景目标
交付一条经测试环境验证的源码到镜像摘要再到部署的可追溯流水线,证明失败门禁有效、凭据隔离有效,并完成一次有记录的上一版本恢复演练。
自动化与交付 · 高级
将源码、测试、镜像摘要、发布门禁与回退证据串联,先在测试环境建立可追溯的交付流程。
交付一条经测试环境验证的源码到镜像摘要再到部署的可追溯流水线,证明失败门禁有效、凭据隔离有效,并完成一次有记录的上一版本恢复演练。
准备具有可运行测试的业务源码、组织选定的受支持 Jenkins/JDK/插件组合、Docker 构建环境、Trivy 漏洞库以及兼容的 Kubernetes 测试集群;登记所有版本。需要按项目划分的 SCM、仓库推送和命名空间部署凭据,禁止将生产凭据暴露给不可信分支或共享不可信执行节点。约定单次构建时长、并发数、磁盘缓存、镜像留存与测试命名空间配额。备份 Jenkinsfile、部署清单和已验收镜像摘要,评审状态迁移兼容性。估时 300 分钟为单应用试点,不含测试体系建设、插件升级或生产上线。
Jenkins 读取受保护流水线,在隔离节点测试和构建同一候选制品,经扫描与审批门禁后按摘要交付 Kubernetes 测试环境,并保留验收证据。
点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。
保存试点源码和经审阅 Jenkinsfile,分支与脚本修改权限决定哪些任务可以触达敏感阶段。
箭头表示流水线发起只读检出请求,返回的源码与 Jenkinsfile 需对应同一确定提交。
只在获准执行节点运行阶段任务,不让不可信分支共享生产权限。
将构建结果交给扫描阶段,报告必须关联即将推广的相同内容摘要。
报告扫描范围、风险判定和工具执行状态,异常不能通过忽略退出码放行。
测试、扫描、例外和必要审批满足后才推进下游;生产适配属于独立评审。
执行节点在门禁允许的阶段推送并记录仓库返回的摘要,推送权限仅限约定范围。
部署身份只修改批准的测试对象,保留上一已验收摘要和配置作为恢复点。
目标节点运行时向仓库发起受授权拉取,镜像数据返回运行端,身份必须与报告一致。
按发布契约检查测试请求、可用副本和指标,记录实际观察结果而非只看部署命令退出码。
能修改流水线的人可能间接调用凭据;必须控制脚本权限、节点隔离和分支准入,不能只依赖日志掩码。
数据库迁移、外部写入和队列消费需独立兼容或补偿方案,恢复旧镜像不自动恢复这些副作用。
扫描通过也不等于业务正确或完整安全。生产仍需独立审批、受保护凭据、窗口与观察责任,图中不默认启用。
图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。
建议用 Jenkins 从受保护源码分支读取 Jenkinsfile,在隔离执行节点完成测试与 Docker 镜像构建,经 Trivy 扫描和业务验收后将制品写入受控仓库,再按镜像摘要部署到指定 Kubernetes 环境。构建一次的同一摘要贯穿测试和发布,记录源码提交、构建号、报告与环境版本。
实际运行依赖可构建源码、业务测试、受保护凭据、仓库及目标环境,本内容不表示流水线已接通,也不声称生产自动发布已经完成。默认目标是测试环境;生产发布需要项目已有的受保护分支、审批门禁和变更窗口。镜像扫描不能证明业务正确或完整安全,应用回退也不能自动撤销数据库迁移和外部副作用。
一次测试提交可追溯到固定镜像摘要,失败测试或阻断级扫描结果不能进入发布阶段,未授权分支拿不到发布凭据。测试发布应完成可用副本、冒烟请求与关键指标检查;回退演练使用之前验证过的摘要,记录恢复耗时和状态兼容性。所有 <...> 均为需替换的占位符,具体命令先在隔离环境验证。
选择一个依赖清楚且可恢复的试点应用,明确构建入口、测试命令、运行端口、健康探测和外部服务;将数据库迁移与应用发布的依赖单独记录。以下命令仅检查本地检出的源码,<SOURCE_DIR> 为绝对路径,不会拉取或提交代码。登记当前提交与工作区状态,定义哪些分支只运行测试、哪些分支能申请部署,以及每阶段失败时的停止条件。
git -C '<SOURCE_DIR>' status --short
git -C '<SOURCE_DIR>' rev-parse HEAD源码提交可唯一定位,试点具备可运行的测试和明确的健康判据。发布范围、目标环境、审批责任人及状态迁移边界均写入契约;缺失的源码、测试或环境依赖被显式列为未就绪项。
本步骤只调查源码和流程,不变更应用环境。发现构建不可复现或状态迁移无法回退时,暂停部署设计,保留当前提交和评审记录;先补足试点条件,不用空测试代替业务验收。
为构建任务分配受控执行节点,约定并发、工作目录、磁盘与超时,避免不可信任务共享可访问生产资源的节点。SCM 只读、仓库推送和测试环境部署使用独立凭据,绑定到需要的项目和阶段;生产凭据不进入本试点。审阅 Jenkinsfile 修改权限,防止能改脚本的人间接窃取凭据。日志掩码只是降低意外泄漏,不能替代隔离与权限控制。
测试分支无法读取或调用发布凭据,任务只能访问约定的仓库与测试命名空间。执行节点资源限额和任务超时生效,凭据没有出现在源码、构建参数明文、归档文件或控制台输出中。
停用新建试点任务并撤销本次新增凭据绑定,回收空闲执行节点授权。若测试暴露了凭据,应按组织机制轮换对应凭据并检查访问记录;不能仅删除控制台文本后继续扩大发布范围。
把检出、依赖安装、静态检查、单元测试和镜像构建拆成有清晰退出状态的阶段,保存测试报告并使失败阻断下游。基础镜像和依赖按项目策略固定版本或摘要,Docker 构建上下文通过忽略文件排除密钥和无关目录。镜像标签关联提交和构建号,构建结果记录目标架构;缓存用于提速,但不得用缓存成功代替当前提交的测试与来源验证。
人为引入的测试失败在测试环境能够阻断镜像发布阶段,修复后报告与源码提交一致。检查镜像中不存在测试密钥或工作区敏感文件,架构与运行环境匹配,构建输入和输出均可追溯。
恢复上一版 Jenkinsfile 和构建定义,停用失败的试点任务触发器;保留失败报告便于定位。仅按明确清单处理试点构建缓存,不删除仓库中已在运行环境使用或被回退计划引用的镜像。
对候选镜像记录仓库摘要、扫描器版本、漏洞库更新时间和报告,再依据业务确认的严重度、可利用性及例外期限决定是否阻断。明确区分发现风险的策略失败与漏洞库下载、认证或扫描器运行失败;两类结果都不得被静默视为通过。将同一摘要推进到测试阶段,禁止用可移动的 latest 标签替代验收制品;扫描通过仍需来源核验和业务测试。
候选制品关联提交、构建号、摘要与报告,命中阻断策略的样本不能进入部署;扫描执行异常显示为失败或需处理状态。例外包含责任人、原因和到期时间,测试环境使用的摘要与报告对象相同。
暂停该摘要的后续推进并保留扫描证据,恢复上一版门禁配置前先评审差异。错误策略可在测试任务中修正重跑;不能靠忽略退出码或永久豁免所有高危项解除阻断,也不覆盖已验收制品。
部署前核对集群上下文、命名空间、配额、镜像拉取权限、探针和资源请求,确认本次变更不扩大 RBAC。下例 <CONTEXT>、<TEST_NAMESPACE> 和 <DEPLOYMENT> 均需替换,只读取目标状态。将候选摘要写入经审阅的测试清单,先确认旧副本和上一版本摘要可恢复,再通过既定流水线部署;不得因当前示例省略业务必要的审批门禁。
kubectl --context='<CONTEXT>' -n '<TEST_NAMESPACE>' get resourcequota
kubectl --context='<CONTEXT>' -n '<TEST_NAMESPACE>' get deployment '<DEPLOYMENT>' -o wide环境身份、资源预算与镜像摘要相符,部署账号权限仅覆盖试点对象。发布过程在约定超时内完成可用副本检查;配额不足、拉取失败或探针失败时流水线停止,并保留具体事件用于定位。
停止后续部署阶段,按事先保存的清单恢复测试环境上一已验收摘要,确认可用副本和健康探针恢复。数据库或外部状态变更按独立方案处理;状态不兼容时优先停止推进,不能假定镜像回退即可恢复。
发布后执行覆盖关键读写路径的测试环境冒烟,使用专用测试数据并说明清理策略;检查错误率、延迟、重启次数和关键依赖连接,确认测试流量不会进入生产下游。将观察窗口、阈值和停止条件固化为阶段输入,并由明确角色确认结果。对失败保留部署事件、请求关联 ID 和脱敏日志,让后续排查能够区分镜像问题、配置差异与环境故障。
关键业务请求、可用副本与指标全部达到发布契约,报告显示观察起止时间、执行人和测试范围。测试数据可追溯且没有污染生产系统,出现指标越界时门禁能够阻止后续环境推进。
停止测试流量并按记录清理可恢复的测试数据,恢复上一已验收部署。若错误涉及外部写入或队列消费,按业务恢复方案补偿并核对状态;保留证据和失败摘要,未定位前不扩大到其他环境。
在测试环境从已验收版本升级到候选版本,再恢复上一摘要,核对配置、Secret 引用和状态兼容性;记录恢复动作、开始时间与业务重新可用时间。整理源码提交、审批、镜像摘要、测试报告、部署清单和责任人之间的对应关系。生产适配作为独立评审事项,列出受保护凭据、变更窗口、监控观察和审批条件,保持本方案的测试环境边界清晰。
回退演练达到事先约定的恢复目标,应用请求与持久状态一致,所有证据可以从构建记录查到。交接明确哪些阶段已经在测试环境验证、哪些生产前置条件仍未完成,没有将草稿流水线标为生产已上线。
将测试环境恢复到约定的稳定摘要并停用临时触发器,保留回退报告。若恢复耗时超标或状态核对失败,停止推广,修订应用兼容和恢复方案后重新在测试环境验收,不自动开启生产发布。