Shopware 6 CI构建Docker镜像:无数据库下构建管理端的方案咨询
Shopware CI无数据库构建时生成var/plugins.json的替代方案
我们在CI流水线预构建Shopware Docker镜像时,构建环境没有数据库可用。执行以下构建命令:
CI=1 PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true DATABASE_URL= bin/build-administration.sh
控制台会出现预期内的数据库连接警告:
#20 0.512 + /var/www/bin/ci bundle:dump #20 2.309 Warning: Failed to load apps. Loading apps from local. Message: An exception occurred in driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for _placeholder.test failed: Name or service not known #20 2.312
把var/plugins.json加入Git仓库不是唯一解决方案,以下是几种更智能的生成方式:
用Shopware CLI离线生成文件
在有数据库的开发环境或临时构建节点上,执行Shopware内置的CLI命令生成plugins.json,再把文件同步到CI构建环境:bin/console plugin:dump这个命令会扫描文件系统里所有已安装的插件,自动生成符合格式的
var/plugins.json,完全不依赖CI环境的数据库。你可以在CI流水线的前置步骤里,用临时容器跑这个命令,把生成的文件挂载到构建环境中使用。CI内写脚本手动扫描插件
自己写个简单脚本,直接扫描custom/plugins目录下的插件,读取每个插件的plugin.xml或composer.json,提取必要信息后生成plugins.json。核心逻辑大概是:- 遍历
custom/plugins下的所有子目录 - 对每个包含
plugin.xml的目录,解析XML拿到插件ID、名称、版本等字段 - 按照Shopware要求的JSON结构,把这些信息整理成数组写入
var/plugins.json
这种方式完全脱离数据库,只靠文件系统就能生成所需文件,适配无数据库的CI场景。
- 遍历
尝试Shopware离线构建环境变量
部分Shopware版本支持通过环境变量跳过数据库依赖的插件加载逻辑,强制构建脚本从文件系统扫描插件。可以修改构建命令试试:CI=1 PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true DATABASE_URL= SHOPWARE_SKIP_DATABASE_PLUGIN_LOAD=1 bin/build-administration.sh注意:不同Shopware版本对这个变量的支持情况可能不同,需要对照对应版本的文档确认。如果支持,这个变量会让构建脚本自动生成临时的
plugins.json完成构建。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

