cfwme/selfupdate

为 Yii2 项目提供从版本控制系统自更新的基本扩展

安装: 251

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 14

类型:yii2-extension

1.0.0 2016-02-11 14:07 UTC

This package is not auto-updated.

Last update: 2024-09-23 12:30:58 UTC


README

本扩展允许在源代码通过版本控制系统(如 GITMercurial)维护时自动更新项目。此类更新包括以下步骤

  • 检查 VCS 远程仓库是否有任何更改
  • 在项目更新运行时,将 Web 服务器 Web 目录链接到占位符
  • 应用远程 VCS 变更
  • 通过 Composer 更新 'vendor' 目录
  • 清除应用程序缓存和临时目录
  • 执行其他操作,例如应用数据库迁移
  • 更新完成后,将 Web 服务器 Web 目录链接到项目 Web 目录
  • 通过电子邮件通知开发人员更新结果

注意:此解决方案非常基本,可能不适用于复杂的项目更新工作流程。您可以考虑使用更复杂的工具,如 Phing。然而,此扩展可以作为此类解决方案的一部分使用。

有关许可证信息,请参阅 LICENSE 文件。

Latest Stable Version Total Downloads Build Status

要求

本扩展需要 Linux 操作系统。

安装

安装此扩展的最佳方式是通过 composer

运行以下命令之一:

php composer.phar require --prefer-dist yii2tech/selfupdate

或添加以下内容到您的 composer.json 的 require 部分:

"yii2tech/selfupdate": "*"

使用方法

此扩展提供特殊的控制台控制器 [[yii2tech\selfupdate\SelfUpdateController]],允许在源代码通过版本控制系统维护时自动更新项目。为了在您的项目中启用此控制器,您应该将其添加到配置文件中的 console 应用程序 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 {$_SERVER['SCRIPT_FILENAME']} migrate/up --interactive=0",
    ],
];

请参阅 [[\yii2tech\selfupdate\SelfUpdateController]] 以获取特定选项的信息。

一旦您在配置文件中进行了所有必要的调整,您就可以使用配置文件运行 'self-update/perform' 命令

yii self-update @app/config/self-update.php

您可以通过 [[yii2tech\selfupdate\SelfUpdateController::configFile]] 在 controllerMap 规范中设置默认配置文件名。

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 由您决定,但建议使用,因为实际的项目更新可能需要很长时间才能完成。只有在所有更新操作完成后,项目网络目录才会链接回 stub。

在更新过程中,VCS 的远程更改将被应用,通过 Composer 更新 vendor 目录,清除指定的临时目录并刷新缓存。

注意:为了使 Composer 能够应用必要的更改,'composer.lock' 文件应该被版本控制系统跟踪!