lesha724 / selfupdate
Yii2项目自更新VCS的基本扩展
Requires
- php: >=5.6
- yiisoft/yii2: ~2.0.13
Requires (Dev)
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2024-09-24 14:56:49 UTC
README
Yii 2项目自更新扩展
此扩展允许在项目源代码通过版本控制系统(如GIT或Mercurial)维护时自动更新项目。此类更新包括以下步骤:
- 检查VCS远程仓库中是否有任何更改
- 在项目更新运行时,将Web服务器Web目录链接到存根
- 应用远程VCS更改
- 通过Composer更新'vendor'目录
- 清除应用程序缓存和临时目录
- 执行附加操作,如应用数据库迁移
- 更新完成后,将Web服务器Web目录链接到项目Web目录
- 通过电子邮件通知开发者更新结果
注意:此解决方案非常基本,可能不适用于复杂的项目更新工作流程。您可以考虑使用更复杂的工具,如Phing。然而,此扩展可以作为此类解决方案的一部分使用。
有关许可证信息,请参阅LICENSE文件。
要求
此扩展需要Linux操作系统。
安装
安装此扩展的首选方式是通过composer。
运行
php composer.phar require --prefer-dist yii2tech/selfupdate
或将
"yii2tech/selfupdate": "*"
添加到您的composer.json文件的require部分。
使用方法
此扩展提供特殊的控制台控制器[[yii2tech\selfupdate\SelfUpdateController]],允许通过版本控制系统(如VCS)维护源代码的项目自动更新。为了在您的项目中启用此控制器,您应在配置文件中将它添加到控制台应用程序的controllerMap
return [ 'controllerMap' => [ 'self-update' => 'yii2tech\selfupdate\SelfUpdateController' ], // ... ];
现在您应该能够通过控制台使用“self-update”命令
yii self-update
项目准备
为了使用“self-update”命令,您应在项目中执行一些准备操作,以便某些shell命令可以以非交互模式(不提示用户)执行。
首先,您应从版本控制系统克隆(检出)您的项目,并将项目工作副本切换到应在此特定服务器上使用的分支。使用GIT,这些操作可以通过以下命令执行
cd /path/to/my/project
git clone git@my-git-server.com/myproject.git
git checkout production
注意:您需要配置您的VCS(或者至少您的项目工作副本),以便与远程仓库交互时不要求用户提示,例如输入用户名或密码!这可以通过使用认证密钥或“记住密码”功能来实现。
然后,您应通过运行'composer install'、创建必要的目录等必要操作使项目处于运行状态。
使用self-update命令
一旦项目设置完成,您需要为其更新创建一个配置。这可以通过使用'self-update/config'命令来完成
yii self-update/config @app/config/self-update.php
这将生成配置文件,该文件应根据特定的项目结构和服务器环境手动调整。对于常见的项目,此类配置文件可能如下所示
<?php return [ // list of email addresses, which should be used to send execution reports 'emails' => [ 'developer@domain.com', ], // Mailer component to be used 'mailer' => 'mailer', // Mutex component to be used 'mutex' => 'mutex', // path to project root directory (VCS root directory) 'projectRootPath' => '@app', // web path stubs configuration 'webPaths' => [ [ 'path' => '@app/web', 'link' => '@app/httpdocs', 'stub' => '@app/webstub', ], ], // cache components to be flushed 'cache' => [ 'cache' ], // temporary directories, which should be cleared after project update 'tmpDirectories' => [ '@app/web/assets', '@runtime/URI', '@runtime/HTML', '@runtime/debug', ], // list of shell commands, which should be executed after project update 'afterUpdateCommands' => [ 'php ' . escapeshellarg($_SERVER['SCRIPT_FILENAME']) . ' migrate/up --interactive=0', ], ];
有关特定选项的信息,请参阅[[\yii2tech\selfupdate\SelfUpdateController]]。
一旦您对配置文件进行了所有必要的调整,您可以使用它运行'self-update/perform'命令
yii self-update @app/config/self-update.php
您可以在controllerMap
规范内部设置默认配置文件名称,通过[[yii2tech\selfupdate\SelfUpdateController::$configFile]]
return [ 'controllerMap' => [ 'self-update' => [ 'class' => 'yii2tech\selfupdate\SelfUpdateController', 'configFile' => '@app/config/self-update.php', ] ], // ... ];
调用自更新命令将更加清晰
yii self-update
注意:不需要创建一个单独的配置文件:您可以在
controllerMap
规范内部配置[[yii2tech\selfupdate\SelfUpdateController]]的所有必要字段,但这种做法并不推荐。
自更新工作流程
在运行时,[[yii2tech\selfupdate\SelfUpdateController]]执行以下步骤
- 检查VCS远程仓库中是否有任何更改
- 在项目更新运行时,将Web服务器Web目录链接到存根
- 应用远程VCS更改
- 通过Composer更新'vendor'目录
- 清除应用程序缓存和临时目录
- 执行附加操作,如应用数据库迁移
- 更新完成后,将Web服务器Web目录链接到项目Web目录
- 通过电子邮件通知开发者更新结果
在第一阶段,会检查远程仓库是否有任何变化。如果当前项目VCS工作副本分支的远程仓库没有变化,则不会执行任何进一步操作!
如果检测到远程变化,指向项目 '@web' 目录的符号链接将被切换到另一个目录,该目录应包含一个 'stub' - 一些静态HTML页面,内容类似于 '应用正在维护中,请稍后再检查'。虽然,是否使用这样的stub由您决定,但推荐这样做,因为实际的更新可能需要较长时间才能完成。只有当所有更新操作完成后,才会将项目Web目录链接回stub。
在更新过程中,应用VCS的远程更改,通过Composer更新vendor
目录,清除指定的临时目录并刷新缓存。
注意:为了使Composer能够应用必要的更改,'composer.lock'文件应该由版本控制系统跟踪!