bitbull/cli


README

一组用于部署、初始化和配置PHP应用程序的有用脚本。

安装

使用安装脚本

使用托管在 https://cli.bitbull.io/install 的安装脚本,可以传递期望的版本参数(默认为 "latest")。

curl -s https://cli.bitbull.io/install | sudo bash -s latest

手动下载并安装phar文件

下载最新稳定的phar文件

wget https://cli.bitbull.io/dev/bb-cli.phar

现在您可以使其phar文件可执行

chmod +x ./bb-cli.phar

现在您可以使用以下方式运行它

./bb-cli.phar --version

如果您想要在系统范围内使用该命令,可以将其复制到 /usr/local/bin(适用于Mac和Linux用户)。

sudo mv ./bb-cli.phar /usr/local/bin/bb-cli

并使用它

bb-cli --version

Composer项目

在项目中需要它

composer require bitbull/cli

vendor/bin 使用它

./vendor/bin/bb-cli --version

全局composer需要

composer global require bitbull/cli

使用以下方式使用它

bb-cli --version

使用Docker镜像

将此代码片段复制到 /usr/local/bin/bb-cli 文件

#!/bin/bash

docker run -it --rm -v $(pwd):/app bitbull/cli:dev $@

使脚本可执行

sudo chmod +x /usr/local/bin/bb-cli

现在您可以使用 bb-cli 命令执行一个临时Docker容器,而无需安装任何其他依赖项。

贡献

克隆此存储库并安装composer模块

composer install

部署

使用内部命令 phar:build 构建 PHAR 存档

./bin/bb-cli phar:build

添加新命令

命令被封装在不同的 src\Commands 中的类中。如果您想添加新命令,请向命令目录添加新类或编辑现有的一个,添加命令函数,请记住扩展 Bitbull\Cli\Commands\BaseCommand 父命令。

<?php

namespace Bitbull\Cli\Commands\CommandDirectoryHere;

use Bitbull\Cli\Commands\BaseCommand;
use Symfony\Component\Console\Input\InputOption;

class ClassNameCommand extends BaseCommand
{
    /**
     * Command description
     *
     * @param $myparameter
     * @param $opts array
     */
    function myCommandName($myparameter, $opts = [
        'param' => null,
        'flag' => false,
        'required' => InputOption::VALUE_REQUIRED,
        'withDefault' => 'defaultvalue',
    ])
    {
        // Use task here
    }
}

命令类会自动加载,Robo将函数名转换为命令: my:command-name

有关更多详细信息,请参阅 Robo命令指南

添加新任务

任务只是用于执行命令或编辑文件的辅助函数,其中包含真正的智能。在 src\Tasks 中添加新任务,创建新类或编辑现有的一个,遵循 Robo任务指南

<?php

namespace Bitbull\Cli\Tasks\Utils;

use Bitbull\Cli\Tasks\BaseTask;
use Robo\Result;

class MyTask extends BaseTask {

    function run()
    {
        return Result::success($this);
    }
}

如果您的任务只使用进程调用,请扩展 Bitbull\Cli\Tasks\BaseTaskCommand 并实现 getCommand 方法。

<?php

namespace Bitbull\Cli\Tasks\Utils;

use Bitbull\Cli\Tasks\BaseTaskCommand;

class MyCommandTask extends BaseTaskCommand {
    
    /**
     * {@inheritdoc}
     */
    public function getCommand()
    {
        return "ls";
    }
}

要加载任务到命令类,您必须导入特定的特质,因此当您添加新任务时,请记住创建连接的特质或添加加载方法。

<?php

namespace Bitbull\Cli\Tasks\Utils;

trait UtilsTasks
{
    protected function taskMyTask()
    {
        return $this->task(MyTask::class); //pass you task class
    }
    
    protected function taskMyTaskWithConstructorParam($param1)
    {
        return $this->task(MyCommandTask::class, $param1); //pass you task class with constructor params
    }
}

添加新应用程序

应用程序位于 src\Application 目录中,添加新类扩展 Bitbull\Cli\Application\BaseApplication

<?php
namespace Bitbull\Cli\Application;

use Bitbull\Cli\Application\BaseApplication;

class NewApplication extends BaseApplication
{
    // override parent methods
}

然后编辑 Bitbull\Cli\Application\ApplicationFactory 以处理 app.type 配置中的新应用程序名称

<?php

  /**
   * @return ApplicationInterface
   */
  public function getInstance()
  {

      switch ($this->type) {
          case "laravel":
              return new Laravel($this->rootPath);
              break;
          case "magento":
              return new Magento($this->rootPath);
              break;
          case "magentowp":
              return new MagentoWordpress($this->rootPath);
              break;
          case "magento2":
              return new Magento2($this->rootPath);
              break;
          case "wordpress":
              return new Wordpress($this->rootPath);
              break;
          case "composer":
              return new Composer($this->rootPath);
              break;
          case "newapplication": // add the new application
              return new NewApplication($this->rootPath);
              break;
      }

      return new Composer($this->rootPath);
  }
  

配置文件

Robo可以从 yaml配置文件 加载命令和任务选项,但是可以添加任何配置结构并使用点符号加载配置值

<?php

$value = Robo::Config()->get('app.config.custom', 'default value');

默认情况下,配置是从CWD中的 .bb-cli.yml 文件加载的,但可以使用不同的配置文件合并或覆盖一些值

./bb-cli

您还可以使用类似bash的语法进行环境变量插值

test:
  config: "${CONFIG_FILE}"
  locale:
    default: "${REGION}_${LANG}"

工作目录

默认情况下,所有命令都将使用命令调用时的CWD作为基础,您可以使用选项指定不同的根路径

./bb-cli --root=/my/different/directory

请记住,配置文件的位置基于此参数,因此默认配置将在 /my/different/directory/.bb-cli.yml 中查找,除非您使用配置文件选项,例如

cd /project
./bb-cli

配置文件 /project/.bb-cli.yml 将被使用

./bb-cli --root=/my/different/directory --config="/my/other/directory/env-override.yml"

配置文件 /my/different/directory/.bb-cli.yml 将与 /my/other/directory/env-override.yml 合并

./bb-cli --root=/my/different/directory --config="env-override.yml"

配置文件 /my/different/directory/.bb-cli.yml 将与 /project/env-override.yml 合并

应用程序

为了使生活更轻松,我们创建了一套基于应用程序类型的命令,支持最著名的CMS/框架:Wordpress Laravel Magento 1 Magento 2 Magento + Wordpress

每个应用程序都遵循 Bitbull\Cli\Application\ApplicationInterface 以公开构建、安装和部署命令。

根据文件配置,所选应用程序加载到 Bitbull\Cli\Commands\BaseCommand

app:
  type: "magento"
  version: "2.2"

或使用 APP_TYPE 环境变量。

依赖项

每个应用程序都有不同的依赖项,此工具不会替换应用程序特定的CLI。

常见需求

Wordpress

Magento 1

Magento 2

Laravel

CLI 选项

选项描述
-h, --help显示此帮助信息
-q, --quiet不输出任何信息
-V, --version显示此应用程序版本
--ansi                           | Force ANSI output
--no-ansi                        | Disable ANSI output

-n, --no-interaction | 不询问任何交互式问题

--simulate                       | Run in simulated mode (show what would have happened).
--progress-delay=PROGRESS-DELAY  | Number of seconds before progress bar is displayed in long-running task collections. Default: 2s. [default: 2]

-D, --define=DEFINE | 定义配置项值。(允许多个值)

--config[=CONFIG]                | Configuration file.
--root[=ROOT]                    | Custom root path.

-v, -vv, -vvv, --verbose | 增加消息的详细程度:1 为正常输出,2 为更详细的输出,3 为调试

可用的命令

基础

命令描述
help显示命令的帮助信息
list列出命令
self:install安装 CLI
self:remove移除 CLI

配置

命令描述
config:env-interpolate将环境变量插入到文件中

应用程序

命令描述
app:anonymize匿名化应用程序数据
app:build构建应用程序
app:cache-clean清理应用程序缓存
app:cache-disable禁用应用程序缓存
app:cache-enable启用应用程序缓存
app:clean清理应用程序目录
app:config-generate创建应用程序配置文件
app:update-database更新应用程序数据库

CDN

命令描述
cdn:cloudfront-invalidate使 CDN 无效

开发

命令描述
dev:dump-config转储配置
dev:dump-cwd获取当前工作目录
dev:dump-php转储 PHP 信息
dev:image-minify最小化图片
dev:javascript-minify最小化 JavaScript
dev:less-compile编译 Less
dev:scss-compile编译 Scss
dev:style-minify最小化样式
dev:watch监视文件更改

Phar

命令描述
phar:build构建 phar 可执行文件
phar:disable-write拒绝 phar 创建
phar:enable-write允许 phar 创建

GIT

命令描述
git:update-changelog更新更改日志

初始化

命令描述
init:bitbucket初始化 Bitbucket 流水线
init:gitlab初始化 Gitlab 流水线
init:travis初始化 Travis 流水线

本地环境

命令描述
local:docker-down销毁本地 Docker 环境
local:docker-init创建 Docker compose 文件
local:docker-start启动 Docker 环境
local:docker-stop停止本地 Docker 环境
local:docker-up创建本地 Docker 环境
local:vagrant-down销毁本地 Vagrant 环境
local:vagrant-init创建 Vagrant 文件
local:vagrant-start启动本地 Vagrant 环境
local:vagrant-stop停止本地 Vagrant 环境
local:vagrant-up创建本地 Vagrant 环境

管道 CI/CD

命令描述
check:grumphp使用 grumphp 检查代码样式
check:phpcs使用 php cs 检查代码样式
check:phpmd使用 php md 检查代码样式
test:phpunit使用 PHP Unit 测试应用程序
pipeline:deploy-codedeploy使用 AWS CodeDeploy 部署应用程序
pipeline:deploy-docker将应用程序部署到Docker仓库
流水线:deploy-dockercomposeui使用Docker Compose UI部署应用程序
流水线:deploy-sftp使用SFTP部署应用程序
流水线:release-activate使用蓝绿方法激活发布版本
流水线:release-install安装应用程序
流水线:remote-ssh使用SSH将应用程序部署到远程服务器

同步环境

命令描述
sync:database-anonymize匿名化数据库
sync:database-create创建数据库
sync:database-dump从数据库创建备份
sync:database-dump-download下载数据库备份
sync:database-dump-upload上传数据库备份
sync:database-restore从备份恢复数据库
sync:media-archive创建媒体存档
sync:media-archive-download下载媒体存档
sync:media-archive-upload上传媒体存档
sync:media-extract提取媒体存档

Web服务器

命令描述
webserver:apache-auth添加HTTP认证
webserver:apache-forwarded-header在代理后修复htaccess
webserver:apache-httpsredirect添加HTTP到HTTPS重定向

云管理

命令描述
aws:ami-update更新AMI
aws:s3-share为S3存储桶对象创建共享链接
aws:security-group-export导出安全组
aws:security-group-import导入安全组备份
aws:sns-publish向SNS主题发送消息
aws:ssm-describe-command描述SSM命令
newrelic:deployment在New Relic上通知新部署
rundeck:job-execute执行Rundeck作业
maxmind:database-update更新并检查MaxMind数据库
maxmind:ipinfo从MaxMind数据库检索IP信息

Swarm

命令描述
portainer:execute-command在容器内执行命令
portainer:service-update将应用程序部署到Portainer
portainer:stack-delete删除Portainer堆栈
portainer:stack-update将应用程序部署到Portainer
swarm:execute-command在容器内执行命令