先停掉一方对生产环境的直接写权限,只保留另一方发布;把被停权的一方改为提交补丁或工单。覆盖通常不是“谁更勤快”造成的,而是两个执行方各自持有可写通道、又没有共同基线和发布队列。谁保留写权限,取决于谁对当前版本的完整性和回滚负责,而不是谁先提出改动。
两个服务商同时改站,常见有三条通道:服务器文件与数据库直连、后台编辑器与插件、代码仓库到发布的流水线。覆盖一般发生在同一通道内,但也会跨通道发生——一方在仓库改了模板,另一方在后台编辑器里改了同一模板,后保存的一方把前者的改动顶掉。
可以用可核对的证据区分原因,而不是凭感觉归因:
如果日志显示两方都在同一时间段写同一文件,那问题在通道,不在某一方的能力。请求量或抓取量下降不能单独证明是谁覆盖了谁,也可能是发布后缓存未刷新、临时不可用或抓取调度变化。
不必三种都做,按谁承担最终版本责任来选。
适用于:一方负责整站版本与回滚,另一方只做局部优化;或两方工作范围高度重叠,继续并行只会互相顶掉。做法是只给保留方生产写权限,另一方转为提交改动清单或补丁。结果是发布链路变单一,回滚点清晰;代价是另一方的响应变慢,需要约定提交与合并的时限。
适用于:两方职责确实不重叠,比如一方做内容与元数据,另一方做模板与技术层。做法是划定文件与字段的归属边界,各自只改自己范围内的对象,跨边界改动走同一份变更单。结果是双方仍可并行,但必须先有一份双方确认的当前版本基线,否则边界会在实际改动中不断被踩。
适用于:两方都无法说清自己改了哪些文件,或都没有可回滚的发布记录。此时继续并行只会让版本无法追溯。退出前先导出完整站点与数据库快照,确认账号与发布权限的交接,再关闭被退出方的写通道。结果是版本重新可控,但短期内会损失一部分并行产能。
假设甲服务商在仓库里改了产品页模板的标题结构,乙服务商在后台编辑器里改了同一页面的标题文本。若乙的保存动作把整段模板按旧版本写回,甲的改动会被覆盖;若乙只写文本字段,甲的改动会保留。这个例子只用于说明比较方法:先确定改动粒度是整文件还是单字段,再决定谁保留写权限。实际结果取决于两方各自使用的发布方式,需要按上面的日志与指纹去核对,不能凭假设下结论。
先做一次冻结:暂停双方对生产环境的写操作,导出一份当前版本快照作为共同基线。然后按文件与字段列出两方各自改过的对象,标出重叠部分。重叠部分只留一个负责人,非重叠部分可继续并行。
接着建立发布队列:所有改动先进入待发布列表,由保留写权限的一方按顺序合并发布,每次发布记录时间、对象和回滚点。这个动作的直接结果是覆盖不再由“谁后保存”决定,而由队列顺序决定;下一步就可以根据发布记录判断,是继续维持单方发布,还是把边界清晰的部分重新开放给另一方。
如果核对后发现两方改动其实几乎没有重叠,那么退出并非必要,改写协作方式成本更低;如果重叠集中在核心模板与关键页面,保留单方写权限更稳妥。判断依据是重叠对象的数量和重要性,而不是两方的口头分工。