bitbull / cli
Requires
- php: >=7.0
- aws/aws-sdk-php: ^3.52
- consolidation/robo: ^1.2
- fzaninotto/faker: ^1.8
- geoip2/geoip2: ^2.9
- henrikbjorn/lurker: ^1.2
- illuminate/database: ^5.5|^5.6|^5.7
- leafo/lessphp: ^0.5.0
- leafo/scssphp: ^0.7.5
- natxet/cssmin: ^3.0
- patchwork/jsqueeze: ^2.0
- pear/archive_tar: ^1.4
- symfony/config: ^3.0
- symfony/event-dispatcher: ^3.0
- symfony/finder: ^3.0
- twig/twig: ~1.0
- dev-master
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0.0
- 0.3.0
- 0.2.0
- 0.1.0
- dev-feature/php81
- dev-feature/multiple-admin-theme
- dev-feature/trim-MagentoCLI-trailing-space
- dev-develop
- dev-feature/magento2-multiple-frontend-themes
- dev-feature/alb-health-check-path
- dev-feature/fix-deploy-identifier
- dev-DisableSessionLocking
- dev-feature/14834-gzip-redis-cache
- dev-feature/deploy-docker-image
- dev-feature/alb-target-group-idempotent
- dev-feature/ecs-deploy
- dev-feature/remote-commands-improvements
- dev-feature/composer-update-on-build
This package is auto-updated.
Last update: 2024-09-20 13:26:05 UTC
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 | 在容器内执行命令 |