开发人员内部:我们如何处理LITE和PRO WordPress主题的自动主题部署

开发人员内部:我们如何处理LITE和PRO WordPress主题的自动主题部署

开发人员内部:我们如何处理LITE和PRO WordPress主题的自动主题部署
СОДЕРЖАНИЕ
02 июня 2020

如您所想,主题开发是我们在公司所做的很多工作。在任何给定时刻,大约有4-5个新的主题项目正在进行中,其中80个主题 我们的目录 总体而言(这也意味着它们的积极维护和进一步开发),我们的双手相当充实.


在这样的环境下,关键在于尽可能进行优化甚至自动化.

因此,今天,我们想通过位于 主题岛, 可以这么说,并向您展示我们主题开发难题的两个特定部分.

我不会掩盖这种帖子是实验。如果您喜欢它,我们将确保将来带出更多类似的内容.

具体来说,今天的主题可以称为, "WordPress主题开发的自动部署和可视化回归架构."

等等,什么是自动主题部署?

如果您不讲开发人员,那么英语的意思是您可以为WordPress开发主题,将其部署到服务器上,然后在视觉上将差异与预定义的基准进行比较,而无需手动执行任何操作.

这一切都是自动发生的,或者更确切地说, "自动地."

这是如何运作的?

我们开发了两项服务来处理此自动主题部署: "海盗靴" 和 "海盗幽灵."

第一个是Pirate Bootstrap,可以通过以下方式激活 网络挂钩 来自GitHub.

在“拉取请求”中,它使用来自设置的存储库中的给定主题+从ThemeIsle上主题的默认演示中获取的所有软件包和数据库设置,部署一个新的WordPress实例。.

后者Pirate Wraith进行了视觉回归测试(也就是比较来自两个来源的图像)。该测试以可视方式根据ThemeIsle的演示检查主题的新部署,然后生成报告。根据该报告,您可以快速查看最近的更改是否对主题的外观有任何影响.

换句话说,每当您处理主题时,如果要确保最新的代码更改都不会弄乱主题的设计,则可以使用Pirate Wraith在自动驾驶仪上处理任务.

让我们更详细地说明每项服务:

Pirate Bootstrap –使用设定的主题部署WordPress的新实例

Pirate Bootstrap托管在forks.themeisle.com上

Pirate Bootstrap建立在 WP-CLI具有生成完整WordPress部署的方法 基于ThemeIsle主题包和依赖项.

要素:

GitHub Webhooks

通过将JSON净荷发送到http://forks.themeisle.com,Webhooks用于在(打开或同步)请求请求上调用Pirate Bootstrap的API。

这将在forks.themeisle.com上启动部署工作流。像这样:

LITE和PRO WordPress主题的自动主题部署

GitHub Pull Request有效负载示例:

{
"行动": "开了",
"数":1,
"pull_request":{

"头":{
"标签": "preda-bogdan:生产",
"参考": "生产",
"沙": "****",

"回购":{
"ID":82166596,
"名称": "沸石",
"全名": "普雷达博格丹/ zerif-lite",
"所有者":{
"登录": "普雷达博格丹",

},
"私人的":错误,

"git_url": "git://github.com/preda-bogdan/zerif-lite.git",
"ssh_url": "[email protected]:preda-bogdan / zerif-lite.git",
"clone_url": "https://github.com/preda-bogdan/zerif-lite.git",
"svn_url": "https://github.com/preda-bogdan/zerif-lite",

}
},

}
}

  • 我们使用 "沙" 键,以检查请求是否有效以及是否可以处理有效载荷.
  • 我们用 "登录", "名称" 和 "参考" 生成租户(如果不存在).

文件结构

设置服务器上的文件结构,以便我们将每个租户存储在其自己的公用文件夹中,并具有WordPress的核心安装,我们用来引用每个租户的符号链接.

承租人文件结构如下:

承租人/
| _ wp / WordPress的symlink核心安装
| _目录/ WordPress的租户内容文件夹/ **
| | _主题/ WordPress的租户主题文件夹
| | _ plugins / // ** WordPress的租户插件文件夹
| _ .htaccess // **为租户自动生成的.htaccess
| _ vhost.conf // ** apache的别名配置文件
| _ wp-config.php / **为租户自动生成的配置文件

wp /文件夹引用了所有租户共享的WordPress的核心安装。这样,我们可以安装一个WordPress,并安装多个WordPress网站的隔离实例,每个实例都包含封装的设置,文件和资源。.

wp-config.php核心和租户文件

WordPress核心wp-config.php示例:

/ ** WordPress目录的绝对路径。 * /
require_once($ _SERVER [‘CONTEXT_DOCUMENT_ROOT’]。’wp-config.php’);

/ **设置WordPress变量和包含的文件。 * /
require_once(ABSPATH。’wp-settings.php’);

租户wp-config.php示例:

(包含在双花括号内的值会在创建租户时自动替换。)

/ **由BOOTSTRAP API添加* /
{{MYSQL_CONNECTION_TENANT_DATA}}

define(’AUTH_KEY’,'{{AUTH_KEY}}’);
define(’SECURE_AUTH_KEY’,'{{SECURE_AUTH_KEY}}’);
define(’LOGGED_IN_KEY’,'{{LOGGED_IN_KEY}}’);
define(’NONCE_KEY’,'{{NONCE_KEY}}’);
define(’AUTH_SALT’,'{{AUTH_SALT}}’);
define(’SECURE_AUTH_SALT’,'{{SECURE_AUTH_SALT}}’);
define(’LOGGED_IN_SALT’,'{{LOGGED_IN_SALT}}’);
define(’NONCE_SALT’,'{{NONCE_SALT}}’);

define(’WP_DEBUG’,false);

define(’WP_CONTENT_DIR’,'{{tenant_folder}} / content’);
define(’WP_CONTENT_URL’,'{{tenant_folder}} / content’);
define(’WP_PLUGIN_DIR’,'{{tenant_folder}} / content / plugins’);
define(’WP_PLUGIN_URL’,'{{tenant_url}} / content / plugins’);

如果(!defined(’ABSPATH’))
define(’ABSPATH’,dirname(__ FILE__)。’/ wp’);

创建租户后,我们查询一个端点以检索主题部署所需的包(插件,子主题,数据库)。程序包被缓存/存储在服务器上的存储文件夹中,并且每六个小时刷新一次.

下一步是检查我们要部署的主题是单个部署还是需要从基础部署中生成其他主题.

  • 如果是单个部署,我们只需使用 "ssh_url" 进入租户/内容/主题/.
  • 如果不是单个部署,我们将git pull放入tmp /,运行grunt generate,然后将生成的文件夹复制到tenant / content / themes /.

当使用具有多个版本的主题(通常是 "精简版" 和 "亲"),同时使用相同的代码库(存储库)。例如,如果我们为hestia-pro存储库运行grunt generate,我们还将自动获得lite版本.

处理完上述内容后,我们使用WP-CLI安装所有必需的软件包(插件和/或子主题),并从demo.themeisle.com导入数据库转储。.

最后一步是刷新.htaccess重写规则,更新 "网站网址" 和 "家" 使用租户URL和WordPress Core的URL,更新菜单项和帖子的链接,然后最后重新加载apache.

然后,我们向用户发送电子邮件,其中包含派生URL(用于请求请求)和部署期间生成的日志。 (每个生成的租户都遵循此通用URL模型:http://forks.themeisle.com/github-login/theme-slug/branch/)

海盗靴–提示 & 技巧和其他有用信息

当您访问forks.themeisle.com时,可以通过按 "〜" (波浪号),然后从那里运行一堆有用的命令。最相关的是:

重置租户部署

命令是海盗重置租户[tenant](* theme-slug)|

例:

海盗重置租户preda-bogdan / zerif-lite / development |  

要么:

海盗重置租户preda-bogdan / hestia / develops hestia-pro |

reset命令将租户设置回其原始部署状态(数据库重置,重新安装插件和/或子主题).

查看日志

该命令是show logs。如果您需要在部署后检查日志文件并且尚未收到电子邮件或需要调试,则此命令很有用.

注意:如果文件大小大于9000字节,则旋转日志文件,因此,如果找不到所需的内容,则可能需要直接在服务器上检查日志存档.

海盗幽灵–视觉比较主题的两个版本

海盗幽灵托管在wraith.themeisle.com

海盗幽灵建立在 幽灵 并且具有可以与Slack,Travis和AJAX请求进行交互的端点,以便利用Wraith功能并生成可视回归测试和报告.

特拉维斯

海盗怨灵在wraith.themeisle.com上公开了一个端点,该端点侦听来自Travis版本的请求,并且 "失败了" 要么 "通过" 根据视觉回归测试结果进行构建.

在.travis.yml文件中,我们添加了一个新的矩阵,该矩阵在现有的基础之上定义了一个新的内部版本。这设置了在项目内运行bash脚本然后执行它的权限.

Travis YML文件:

矩阵:
包括:
– 的PHP: "7.0"
before_install:chmod + x wraith.sh
安装:
before_script:
env:TEST_SUITE = Wraith_Visual_Regression_Testing WRAITH_FAIL = 5
脚本:./ wraith.sh

你可以看到 "安装" 和 "before_script" 留空。这是有意的,因此该构建不会继承先前定义的构建中的操作。我们感兴趣的只是在此构建上运行bash脚本(脚本:./wraith.sh).

也要注意;我们正在设置一个名为WRAITH_FAIL的环境变量。此值用于告诉海盗幽灵通过测试的最大允许百分位数差异是多少.

Bash脚本:

#!/ bin / bash
WRAITH_SLUG = $(node -pe "require(’./ package.json’)。wraithSlug")
WRAITH_FAIL = $ {WRAITH_FAIL:-5}
身体="{
‘request’:{
‘travis_event_type’:’$ TRAVIS_EVENT_TYPE’,
‘travis_pull_request’:’$ TRAVIS_PULL_REQUEST’,
‘travis_repo_slug’:’$ TRAVIS_PULL_REQUEST_SLUG’,
‘travis_branch’:’$ TRAVIS_PULL_REQUEST_BRANCH’,
‘wraithSlug’:$ WRAITH_SLUG,
‘wraithFail’:$ WRAITH_FAIL,
}
}"
回声 "触发$ TRAVIS_PULL_REQUEST_SLUG分支的构建
Travis上的$ TRAVIS_PULL_REQUEST_BRANCH’."
输出= $(curl -sw "%{http_code}" -X POST \
-H "内容类型:application / json" \
-H "接受:application / json" \
-H "Travis-API版本:3" \
-d "$ {body // \’/ \"}" \
‘http://wraith.themeisle.com’)
http_code ="$ {output:$ {#output} -3}"
如果[$ {#output} -eq 3];然后
身体=""
其他
身体="$ {output:0:$ {#output} -3}"
科幻

如果[$ http_code!= 200];然后
回声 "$输出";
1号出口
其他
回声 "$输出";
出口0
科幻

简而言之,此脚本将创建一个JSON有效负载,其中包含默认的Travis环境变量和用户设置的环境变量。此外,它读取packages.json并获取主题文件.

脚本的第二部分通过POST请求 "卷曲" 到Pirate Wraith并解析响应,以获取响应的HTTP / 1.1状态代码.

我们使用状态码来 "失败" 要么 "通过" 构建。 Pirate Wraith API针对其处理的每个请求返回有效的HTTP / 1.1代码.

  • 它将返回代码200以进行完整且通过的测试.
  • 对于其他所有内容,构建都将失败,退出代码为1(退出1)

您可能想知道幽灵的比较是什么。答案很简单;它将当前从Pirate Bootstrap的Pull Request的租户部署与目标主题的演示进行比较.

为了更好地了解GitHub – Travis – Pirate Bootstrap – Pirate Wraith生命周期,以下图表说明了这些服务的工作流程:

海盗引导程序/海盗幽灵工作流程

如你看到的, 的GitHub 通知两者 海盗靴特拉维斯 关于新的请求请求。 Travis询问,Bootstrap开始部署租户 海盗幽灵 开始测试.

海盗幽灵 将演示的租户版本与 主题岛 演示并将结果返回给 特拉维斯, 这样就可以了 通过 要么 失败 构建.

松弛

除了Travis支持之外,Pirate Wraith还有一个用于与Slack集成的端点.

从Travis构建完成(通过或失败)之后,将在#eyepatch通道内生成一个报告,其中包含指向所生成图库的链接以及发现的差异的摘要。.

还内置了一些有用的Slack命令,您可以在任何通道中使用它们(注意:Pirate Wraith API将在该通道中以公开响应的形式进行响应,因此我们建议在自聊天中使用这些命令)。这是Slack的命令:

重置主题的历史记录基线

/幽灵历史[主题弹头]

例:

/幽灵历史zerif-lite |

与主题的历史镜头比较

/ wraith-latest [theme-slug] [url]

例:

/ wraith-latest zerif-lite http://forks.url/pb/zerif-lite |

此命令使用所提供的信息段将给定的URL与该信息段的历史记录进行比较.

比较两个URL

/幽灵比较[url]与[url]

例:

/ wraith-compare http://url.one与http://url.two 

海盗幽灵–提示 & 技巧和其他有用信息

重置主题的历史记录基线

幽灵重置历史[主题弹头]

此命令重置给定段塞的历史记录.

与主题的历史镜头比较

幽灵检查最新[主题弹头] [url]

此命令使用所提供的信息段将给定的URL与该信息段的历史记录进行比较.

比较两个URL

幽灵比较网址[网址一] [网址二]

查看日志

该命令是show logs。如果您需要检查日志文件,此命令很有用。它的工作方式与Pirate Bootstrap中的相同.

你拿?

这几乎总结了我们的两项新服务,以及如何使用它们自动执行WordPress主题部署.

我们创建了Pirate Bootstrap和Pirate Wraith来满足我们自己的需求,但是我们相信这些概念对于从事类似dev项目的任何人也同样有用。特别是如果您要开发衍生产品(例如我们的专业版和精简版WordPress主题),并且想要检查特定代码更改对外观的影响,.

WordPress主题的问题在于,大多数现代主题的代码库趋向于快速增长,并且这些代码库的某些特定元素可能会对主题其他元素的外观产生不可预测的影响。尝试手动捕获所有内容(仅通过肉眼观察事物)可能会非常具有挑战性,因此,将某种形式的算法/自动化引入到混合物中总是有很大帮助的.

但是你觉得呢?您是否也看到这些工具对于其他项目的价值?

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Это интересно
    Adblock
    detector