Bitbucket Pipelines执行composer install时drupal核心补丁应用失败
问题解决步骤
- 首先安装
patch依赖工具
composer打补丁依赖系统的patch命令,你使用的alpine镜像默认没有预装该工具,修改你的pipeline.yml里的apk安装行,新增patch:- /sbin/apk add git patch - 调整调试命令位置
你当前把读取目标补丁文件的命令放在了composer install之前,此时drupal/core依赖还未下载,自然找不到对应文件。如果需要调试,将cat docroot/core/modules/language/src/LanguageNegotiator.php这行命令移动到composer install之后执行即可。 - 排查补丁与依赖版本匹配问题
你提交的composer.json中配置的补丁是2018年的3007386-language-negotiator-weight-2.patch,但报错日志中显示的是2021年的3007386-language-negotiator-weight-12.patch,说明两种可能:- 你本地更新过补丁配置后只修改了composer.json,没有更新composer.lock,且未将composer.lock提交到代码仓库
- 你使用的drupal/core版本和当前补丁适配的版本不一致,补丁仅能应用在对应版本的核心包上,版本不匹配会直接应用失败
- 确认工作目录
Bitbucket Pipelines默认会将仓库代码克隆到/opt/atlassian/pipelines/agent/build目录下,你可以在script段最开头增加一行切换目录的命令,确保所有操作都在项目根目录执行,避免相对路径错误:- cd /opt/atlassian/pipelines/agent/build - 额外检查项:确保你项目的composer.json中已经安装了
cweagans/composer-patches插件,没有该插件的话composer不会执行补丁应用逻辑。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

