我正在基于Docker和一些自定义部署脚本构建Wordpress CI / CD管道。流程很标准:
-开发机器将完整的网站存档和数据库转储推送到外部存储库
-在开发机和生产服务器上使用了类似的Wordpress docker基础架构(Web,数据库,应用程序)
-启动部署后,生产机器将代码和数据库下载到本地存储库,并从中提取新的Docker
一切正常,但是我面临的问题是Wordpress默认情况下在编辑页面中包含完整URL。因此,如果开发人员将图像添加到页面,则数据库页面将具有代码
<img src="sampledevmachine.local/image1.jpg">
现在有两种解决方案。部署脚本可以在数据库转储文件上进行搜索和替换,或者开发人员计算机可以调整其主机文件,以使Wordpress认为生产域可以访问它。
这两种解决方案听起来都有些“肮脏”。因此,我很好奇其他人将如何解决这一问题,以及如何为Wordpress设置“优雅”的CI / CD。
答案 0 :(得分:1)
老实说,我认为对于WP没有优雅的CI / CD方法。在WP中更改URI的“标准”方法是执行搜索/替换,但使用工具,而不是在SQL导出上。这是因为大量数据被序列化为PHP数组/对象,并且在替换字符串时(如果字符串的长度不相同)它们会无声地中断。
我要部署到不同环境的工作是运行带有选项
的wp search-replace
工具
--all-tables
:可以肯定。--precise
:处理PHP序列化的数组/对象--skip-columns=guid
:跳过某些表中的guid列,因为其中一些表将域名用作GUID的一部分。您可能需要多次运行此工具,因为WordPress的不同部分以不同的方式存储域(有时使用或不使用连接方案)
也许值得一提的是,我也已经看到该代码具有部署管道,但是使用复制插件可以完成数据库/内容更改,该插件可以推送内容并同时更新链接,例如{ {1}}或Duplicator
。我从来没有使用过它,所以我对此无可奉告。