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。最终在全新空目录复现一次,才能证明发布可重建。

