CI日志里patch写着Applied,进容器看vendor文件却还是原样。后来发现补丁打在构建阶段的旧vendor,下一层镜像又执行了一次composer install,把结果覆盖了。

先确认三件事:当前包版本、补丁目标路径、最终镜像里的文件哈希。

composer show vendor/package
composer patches-relock
grep -n "补丁里的特征字符串" vendor/vendor/package/path/file.php
sha256sum vendor/vendor/package/path/file.php

Applied不代表命中了预期代码

补丁上下文太宽、路径层级错误或包版本变化,都可能让工具行为和预期不同。CI使用 -vvv保留补丁输出,并在补丁后增加断言:目标字符串必须出现或旧字符串必须消失。

不要直接提交改过的vendor掩盖问题。composer.lock、patch文件和插件配置一起版本化;构建只执行composer install,避免不同阶段重复生成vendor。最终在全新空目录复现一次,才能证明发布可重建。