使用 task 函数来定义我们自己的任务。此外,我们可以使用 desc 函数来为任务设置一个描述。
desc('My task');
task('my_task', function(){
run(...);
});
运行我们的任务:
dep my_task
列出所有可用的命令:
dep list
仅在一个指定的主机(host)或应用环境(stage)上,运行任务:
dep deploy main
我们可以通过 --hosts 选项来指定主机(多个值用 ',' 分隔),以及 --roles 选项来指定角色:
dep deploy --hosts domain.com
dep deploy --roles app
简单任务
如果我们的任务只包含 run 调用,或者仅仅一个 bash 命令,我们可以简化任务的定义:
task('build', 'npm build');
默认情况下,所有简单任务会 cd 到 release_path,我们不需要手动切换目录
或者,我们可以使用一个多行脚本:
task('build', '
gulp build;
webpack -p;
echo "Build down";
');
任务组
我们可以组合任务:
task('deploy', [
'deploy:prepare',
'deploy:update_code',
'deploy:vendor',
'deploy:symlink',
'cleanup',
]);
前置和后置任务
我们可以定义 '在某些任务之前或之后运行的' 任务。
task('deploy:done', function(){
write('Deploy down!');
});
after('deploy', 'deploy:done');
deploy 任务调用后,会执行 deploy:done。
过滤
我们可以指定要在哪个 '主机/应用环境/角色' 上运行任务。
按应用环境
按应用环境过滤任务:
desc('Run tests for applications');
task('test', function(){
...
})->onStage('test');
按角色
按角色过滤任务
desc('Migrate database');
task('migrate', function(){
...
})->onRoles('db');
我们也可以指定多个角色:onRoles('app', 'db', ...);
按主机
按主机过滤任务
desc('Migrate database');
task('migrate', function(){
...
})->onHosts('db.domain.com');
我们也可以指定多个主机:onHosts('db.domain.com', ...);
本地任务
使用 local 来标记任务,以在本地运行该任务,并且只运行一次,与主机计数无关。
task('build', function(){
...
})->local();
注意,在本地任务内调用 run,同调用 runLocally 具有同样的效果。
只运行一次
仅运行任务一次:
task('do', ...)->once();
将只在第一台主机上运行
重新配置
我们可以重新配置任务,例如,由第三方提供的任务,通过名称检索它们来进行配置。
task('notify')->onStage('production');
覆盖任务
有时候我们可能想要,常见配方(recipes)中的一些任务,有不同的表现行为。只需简单覆盖它:
// deploy:update_code - 就是常见配方中预定义的一个任务
task('deploy:update_code', function(){
upload(...);
});
使用输入选项
我们可以在定义任务之前,定义额外的输入选项和参数:
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
argument('stage', InputArgument::OPTIONAL, 'Run tasks only on this host or stage.');
option('tag', null, InputOption::VALUE_OPTIONAL, 'Tag to deploy.');
要在任务内部获取输入,可以使用:
task('foo:bar', function() {
// 对于参数
$stage = null;
if (input()->hasArgument('stage')) {
$stage = input()->getArgument('stage');
}
// 对于选项
$tag = null;
if (input()->hasOption('tag')) {
$tag = input()->getOption('tag');
}
});
并行任务执行
当部署多台主机时,Deployer 将会在每台主机上运行一个任务:
/*
看文档图片
*/
要加速部署,可以添加 --parallel 或 -p 选项。这将会在每台主机上并行地运行任务。如果某台主机上执行任务的时间比其他主机时间长,Deployer 将会等待,直到所有主机完成它们的任务。
/*
看文档图片
*/
通过指定一个数字来限制并发任务的数量。默认情况下,最多可并发处理 10 个任务。
dep deploy --parallel --limit 2
/*
看文档图片
*/
接下来:主机(https://deployer.org/docs/hosts)