tzurbaev/laravel-pipeline-tasks

基于 illuminate/pipeline 的 Pipeline 任务

0.9.0 2017-10-03 05:14 UTC

This package is auto-updated.

Last update: 2024-09-07 07:42:28 UTC


README

此包允许您创建一些带有步骤(管道)列表的任务,并能够逐个执行这些步骤,同时能够在任何步骤上中断任务执行。

Build Status StyleCI ScrutinizerCI Latest Version on Packagist Software License

要求

此包需要 PHP 7.1 或更高版本。

安装

您可以通过 composer 安装此包

$ composer require tzurbaev/laravel-pipeline-tasks

文档

示例

示例任务和管道在 examples 目录中定义。一旦定义了您的任务,您可以通过 TasksManager 类启动您的任务

<?php

use App\CloneGitRepositoryTask;
use Zurbaev\PipelineTasks\TaskManager;
use Illuminate\Container\Container;

$manager = new TaskManager(Container::getInstance());
$task = new CloneGitRepositoryTask(
    'git@github.com:tzurbaev/laravel-pipeline-tasks.git',
    'master',
    '/var/git/pipeline-tasks'
);

$manager->start($task);

或者您可以使用 PipelineTasks 门面

<?php

use App\CloneGitRepositoryTask;
use Zurbaev\PipelineTasks\Facades\PipelineTasks;

$task = new CloneGitRepositoryTask(
    'git@github.com:tzurbaev/laravel-pipeline-tasks.git',
    'master',
    '/var/git/pipeline-tasks'
);

PipelineTasks::start($task);

所有管道将按照它们在 pipes 方法中定义的顺序执行。

停止执行

如果您需要停止进一步的任务管道执行,只需从您的 handle 方法返回 false 即可。

请注意,对于 false 值存在严格的类型检查。这意味着如果您返回空字符串、0null 或任何其他假值,则不会停止任务执行。

跳过管道

如果您需要跳过某些管道,只需在 handle 方法的开头(或任何合理的位置)返回任何非假值。

您还可以返回可以在任务的 completedfailed 方法中稍后检查的值。

访问管道结果

Task 类提供辅助方法来检索任何管道的结果

  • hasPipeResult(string $name) - 确定任务是否为给定的管道名称提供结果;
  • getPipeResult(string $name, $default = null) - 返回管道值或默认值(如果为空);
  • results() - 返回所有管道结果的数组。

更改管道名称

如果您有多个相同的管道类,您可能希望覆盖其名称,因为在任务结束时,您将得到最新类似管道的结果。

您可以在您的管道类中覆盖 public function name()

<?php

namespace App\Pipes;

use App\CloneGitRepositoryTask;
use Zurbaev\PipelineTasks\Pipe;

class CloneGitRepository extends Pipe
{
    /**
     * @var CloneGitRepositoryTask
     */
    protected $task;

    public function name()
    {
        return 'clone-git-branch-'.$this->task->getBranch();
    }

    public function handle()
    {
        // Handle pipe.
    }
}

现在结果将存储为 clone-git-branch-master 而不是 CloneGitRepository

事件

TaskManager 触发两个事件:在任务成功执行时触发 Zurbaev\PipelineTasks\Events\PipelineTaskCompleted,在失败时触发 Zurbaev\PipelineTasks\Events\PipelineTaskFailed

PipelineTaskCompleted 实例包含 public $task 属性,因此您可以在您的监听器中访问它。除了 public $task 属性外,PipelineTaskFailed 还提供了 public $exception,用于识别导致失败的确切管道。

异常

如果在任务执行过程中发生错误,您可以通过任务类上的 failed 方法或通过监听 PipelineTaskFailed 事件来检测它。

failed 方法接受 Zurbaev\PipelineTasks\Exceptions\PipelineTaskFailedException 实例作为第一个参数,因此您可以检查它。

您可以使用 $e->getPipeName() 方法获取失败管道的名称。

如果在运行管道时发生异常,您可以通过 $e->getPrevious() 方法访问它。

异常代码作为 PipelineTaskFailedException 类的常量描述

  • PipelineTaskFailedException::EXCEPTION_THROWN - 表示在运行管道时抛出了异常。您可以通过 $e->getPrevious() 方法访问此异常;
  • PipelineTaskFailedException::REJECTED - 表示管道返回 false,因此任务被标记为失败。

变更日志

有关最近更改的详细信息,请参阅 CHANGELOG

测试

$ vendor/bin/phpunit

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何安全相关的问题,请发送电子邮件至 zurbaev@gmail.com 而不是使用问题跟踪器。

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件