任务 (task)
使用task
函数,定义个性化任务. 同时还可以使用desc
函数设置任务说明:
desc('My task');
task('my_task', function () {
run(...);
});
执行任务:
dep my_task
列出全部可用的命令:
dep list
仅在指定的主机或环境(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 done";
');
任务分组
你可以合并任务到一个分组中:
task('deploy', [
'deploy:prepare',
'deploy:update_code',
'deploy:vendors',
'deploy:symlink',
'cleanup'
]);
Before 与 after
你可以定义任务在某些任务开始前或完成后执行.
task('deploy:done', function () {
write('Deploy done!');
});
after('deploy', 'deploy:done');
在deploy
任务调用之后, deploy:done
将会被执行.
过滤
您可以指定要在哪些主机(hosts)/环境(stage)/角色(roles)上运行任务。
按环境(stage)
按环境(stage)筛选主机:
desc('Run tests for application');
task('test', function () {
...
})->onStage('test');
按角色(roles)
按角色(roles)筛选主机:
desc('Migrate database');
task('migrate', function () {
...
})->onRoles('db');
还可以指定多个角色: onRoles('app', 'db', ...)
.
按主机(hosts)名
按主机(hosts)名筛选主机:
desc('Migrate database');
task('migrate', function () {
...
})->onHosts('db.domain.com');
你还可以指定多个主机名:onHosts('db.domain.com', ...)
.
本地任务
将任务标记为 local
以在本地运行,并且只运行一次,与主机计数无关。
task('build', function () {
...
})->local();
注意,在本地任务中调用
run
与调用runLocally
具有相同的效果。
仅运行一次
任务只运行一次:
task('do', ...)->once();
将仅在第一台主机上运行.
重新配置
您可以重新配置任务,例如,按名称检索第三方recipes提供的任务:
task('notify')->onStage('production');
任务复写
有时,您可能希望某些任务的行为与常见的方法不同。可以简单到覆盖它:
task('deploy:update_code', function () {
// Your custom update code
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() {
// 参数(arguments)
$stage = null;
if (input()->hasArgument('stage')) {
$stage = input()->getArgument('stage');
}
// 选项(option)
$tag = null;
if (input()->hasOption('tag')) {
$tag = input()->getOption('tag');
}
});
任务并行执行
当部署到多个主机时,Deployer将在每个主机上运行一个任务:
要加快部署, 请添加 --parallel
或 -p
选项. 这将在每个主机上并行运行任务. 如果在主机上执行任务所需的时间比其他主机长,Deployer将等待所有主机完成任务.
通过指定一个数字来限制并发任务的数量. 默认情况下, 最多可同时处理10个任务.
dep deploy --parallel --limit 2
下一节: 主机.