inquid / yii-cd-ci
为 Yii 提供持续交付和持续集成的工具
Requires
- yiisoft/yii2: ~2.0.13
README
CI/CD 的 Yii 工具
此扩展允许在项目源代码通过版本控制系统(如GIT)维护的情况下自动更新项目。此类更新包括以下步骤
- 检查 VSC 远程仓库是否有任何更改
- 在项目更新运行时,将 Web 服务器 Web 目录链接到存根
- 应用远程 VCS 更改
- 通过 Composer 更新 'vendor' 目录
- 清除应用程序缓存和临时目录
- 执行其他操作,例如应用数据库迁移
- 更新完成后,将 Web 服务器 Web 目录链接到项目 Web 目录
- 通过电子邮件、短信、电话、Telegram 和 Slack 通知开发人员更新结果
有关许可证信息,请参阅LICENSE文件。
需求
此扩展需要 Linux 操作系统。
安装
安装此扩展的最佳方式是通过composer。
运行以下命令之一:
php composer.phar require --prefer-dist inquid/yii-cd-ci
或将其添加到 composer.json 的 require 部分:
"inquid/yii-cd-ci": "*"
使用方法
此扩展提供特殊的控制台控制器 [[inquid\yii-cd-ci\SelfUpdateController]],允许通过版本控制系统(如版本控制)自动更新项目。为了在您的项目中启用此控制器,您应该将其添加到配置文件中的 console 应用程序 controllerMap
return [ 'controllerMap' => [ 'self-update' => 'inquid\yii-cd-ci\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', ], ];
请参阅 [[\inquid\yii-cd-ci\SelfUpdateController]] 获取特定选项信息。
在配置文件中进行所有必要的调整后,您可以使用配置文件运行 'self-update/perform' 命令
yii self-update @app/config/self-update.php
您可以在 controllerMap
规范内通过 [[inquid\yii-cd-ci\SelfUpdateController::$configFile]] 设置默认配置文件名
return [ 'controllerMap' => [ 'self-update' => [ 'class' => 'inquid\yii-cd-ci\SelfUpdateController', 'configFile' => '@app/config/self-update.php', ] ], // ... ];
然后,self-update 命令的调用将更加清晰
yii self-update
注意:不需要创建单独的配置文件:您可以在
controllerMap
规范内配置 [[inquid\yii-cd-ci\SelfUpdateController]] 的所有必要字段,但这种方法不建议使用。
自更新工作流程
在运行过程中,[[inquid\yii-cd-ci\SelfUpdateController]] 执行以下步骤
- 检查 VSC 远程仓库是否有任何更改
- 在项目更新运行时,将 Web 服务器 Web 目录链接到存根
- 应用远程 VCS 更改
- 通过 Composer 更新 'vendor' 目录
- 清除应用程序缓存和临时目录
- 执行其他操作,例如应用数据库迁移
- 更新完成后,将 Web 服务器 Web 目录链接到项目 Web 目录
- 通过电子邮件通知开发者更新结果
在第一阶段,会检查远程仓库是否有任何更改。如果当前项目VCS工作副本分支在远程仓库中没有更改,则不会执行任何进一步的操作!
如果检测到远程更改,指向项目 '@web' 目录的符号链接将被切换到另一个目录,该目录应包含一个 'stub' - 一些静态HTML页面,上面写着类似于 '应用程序正在维护中,请稍后再检查' 的内容。尽管使用这样的stub取决于您,但建议使用,因为实际的更新可能需要很长时间才能完成。只有当所有更新操作执行完毕后,项目Web目录才会链接回stub。
在更新过程中,VCS远程更改将被应用,通过Composer更新vendor
目录,指定的临时目录将被清除,缓存将被刷新。
注意:为了使Composer能够应用必要的更改,'composer.lock' 文件应该被版本控制系统跟踪!