alighorbani1381/command-manager

自动运行您的artisan命令

v1.0.3 2023-08-07 06:08 UTC

This package is auto-updated.

Last update: 2024-09-11 10:34:43 UTC


README

👑 什么是Command Manager?

它是一个Laravel包,可以帮助您通过仅调用单个artisan命令来运行命令链。

它非常适用于自动化数据规范化流程以及其他需要在任何新部署后运行命令的情况,就像将php artisan command_manager:execute命令添加到您的CI/CD管道中一样简单。

⬇️ 安装

您可以通过composer安装此包

composer require alighorbani1381/command-manager

然后,您必须运行迁移以使命令管理器添加它需要工作的表。

php artisan migrate

您还可以发布配置文件

php artisan vendor:publish --provider="Alighorbani\CommandManager\CommandManagerServiceProvider"

运行上述命令后,您可以在您的配置文件夹中找到文件command-manager.php

在此文件数组中存在,您可以在其中添加命令,并在其内部添加到commands键中

🚀 使用

要自动运行命令,我们必须执行以下3个步骤,如果您不执行这些步骤之一,命令管理器会抛出异常!

1- 首先,您必须创建您的命令,并从AutomaticCommand扩展,如果您没有扩展Automatic Command,请在命令运行时查看异常

<?php

namespace App\Console\Command;

use Alighorbani/CommandManager/AutomaticComand;

class MyCommand exnteds AutomaticCommand
{
    protected $signature = 'my:command';
    
    protected $description = 'My command to normalize data';
    
    protected function handle()
    {
        // functionality implemented here 
    }
}

2- 在Laravel控制台内核中注册您的命令!这非常重要,因为如果您不在内核中注册您的命令,Laravel将无法找到此命令以运行它!

<?php

namespace App\Console;

use App\Console\Command\MyCommand;

use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected $commands = [
        MyCommand::class // 👈️👈️👈️ Add This
    ];
    
    ...
    ...
    ...
    
}

3- 将您的命令添加到由命令管理器自动调用的命令列表中。

<?php

use App\Console\Command\MyCommand;

return [
    // config here
    // another config here
    'commands' => [
        MyCommand::class, // 👈️👈️👈️ Add This
    ]
];

大功告成!🎉 您的工作完成了!

现在,您可以使用以下操作来运行命令或管理它

要检查您的命令是否已成功在命令管理器上注册,您可以运行php artisan command_manager:status 命令,它检查命令的注册情况,如果您的注册有问题,会抛出异常,您需要修复它

💎 命令

php artisan command_manager:status

此命令 显示命令状态 在表中,您可以看到哪些命令需要运行,哪些命令已经运行过,它类似于php artisan migrate:status命令。

php artisan command_manager:execute

此命令 执行 您在配置文件数组中的commands键中注册的命令。

php artisan command_manager:reset

如果您需要重置命令管理器(删除系统上运行的所有命令的历史记录,并将所有命令检测为新命令),您可以运行此命令。

⚠️ 警告:如果您运行此命令,它将删除系统上运行的所有命令的历史记录,命令管理器将检测配置文件列表中的所有命令。

💡 自动命令功能

在此版本的包中,我们有两个简单功能,允许您更全面地管理命令。

  • 维护模式
  • 版本控制

😴💻️ 维护模式

有时我们有一些命令将应用特殊更改,需要关闭任何数据库修改操作(INSERT、UPDATE、DELETE),因此我们必须将系统置于我们定义的系统维护模式。

要使用此功能,您应遵循以下步骤

1- 注册维护模式

在config/command-manager.php中

return [

    //  here 👇️
    'maintenance-mode' => [
        'on' => fn() => 'turn on',
        'off' => fn() => 'turn off'
    ],
    
    ...

];

您可以将打开/关闭维护模式的函数作为可调用闭包或数组添加!

2- 在您的命令中激活它

<?php

namespace App\Console\Command;

use Alighorbani/CommandManager/AutomaticComand;

class MyCommand exnteds AutomaticCommand
{
    protected $signature = 'my:command';
    
    protected $description = 'My command to normalize data';
    
    protected bool $maintenanceMode = true; // 👈️ add this
    
    protected function handle()
    {
        // functionality implemented here 
    }
}

所有设置完成 ✅ 您的命令将在维护模式下运行!

📚️ 版本控制

有时您会注册一个命令并通过命令管理器运行它,过了一段时间后,您需要再次运行此命令(在修复错误或改进命令逻辑后),但命令管理器在这种情况下不会将此命令视为新的命令。在这种情况下,您应该使用命令管理器支持的版本功能!

要添加版本,您必须使用语义版本。如果您不了解版本,请阅读以下链接 👇️👇️

🔗 https://semver.org

默认情况下,所有新的命令版本都是 1.0.0。如果您需要以新版本再次运行,只需在您的命令类中覆盖属性即可。

⚠️ 设置新版本时,请添加一个大于之前运行的最新版本的版本号!

<?php

namespace App\Console\Command;

use Alighorbani/CommandManager/AutomaticComand;

class MyCommand exnteds AutomaticCommand
{
    protected $signature = 'my:command';
    
    protected $description = 'My command to normalize data';
    
    protected string $version = '1.0.1'; // 👈️ chagen from 1.0.0 to 1.0.1
    
    protected function handle()
    {
        // functionality implemented here 
    }
}

⚠️ 不要更改您命令的签名,因为命令管理器通过它们的签名来检测命令。如果您更改签名,即使之前已经运行过,命令管理器也会将其检测为新的命令

❌ 异常

当运行以下命令之一时,命令管理器可能有一些异常,您可能会看到它们。

php artisan command_manager:status

php artisan command_manager:execute

.

.

🏁 产品待办事项的一小部分视图

  • 显示状态列表中运行的命令链。
  • 显示已运行的命令的执行时间。
  • 向 command_manager:status 添加过滤器以过滤自定义状态。
  • 运行上次运行失败的命令的能力。
  • 添加命令 command_manager:purge 以从项目中删除无用的命令