任務(wù) (task)
使用task函數(shù),定義個(gè)性化任務(wù). 同時(shí)還可以使用desc函數(shù)設(shè)置任務(wù)說(shuō)明:
desc('My task');
task('my_task', function () {
run(...);
});
執(zhí)行任務(wù):
dep my_task
列出全部可用的命令:
dep list
僅在指定的主機(jī)或環(huán)境(stage)上運(yùn)行任務(wù):
dep deploy main
你可以通過(guò)--hosts選項(xiàng)(多個(gè)值時(shí),用英文逗號(hào)分隔)指定主機(jī), 以及通過(guò)--roles選項(xiàng)指定角色:
dep deploy --hosts domain.com
dep deploy --roles app
簡(jiǎn)單任務(wù)
如果你的任務(wù)僅僅包含了run函數(shù)調(diào)用, 或只有一個(gè)bash命令, 可以簡(jiǎn)化任務(wù)定義:
task('build', 'npm build');
默認(rèn)情況下,所有的簡(jiǎn)單任務(wù)會(huì)先 cd 到
release_path目錄下, 所以不重復(fù)做此步驟.
或者可以使用多行腳本:
task('build', '
gulp build;
webpack -p;
echo "Build done";
');
任務(wù)分組
你可以合并任務(wù)到一個(gè)分組中:
task('deploy', [
'deploy:prepare',
'deploy:update_code',
'deploy:vendors',
'deploy:symlink',
'cleanup'
]);
Before 與 after
你可以定義任務(wù)在某些任務(wù)開(kāi)始前或完成后執(zhí)行.
task('deploy:done', function () {
write('Deploy done!');
});
after('deploy', 'deploy:done');
在deploy任務(wù)調(diào)用之后, deploy:done 將會(huì)被執(zhí)行.
過(guò)濾
您可以指定要在哪些主機(jī)(hosts)/環(huán)境(stage)/角色(roles)上運(yùn)行任務(wù)。
按環(huán)境(stage)
按環(huán)境(stage)篩選主機(jī):
desc('Run tests for application');
task('test', function () {
...
})->onStage('test');
按角色(roles)
按角色(roles)篩選主機(jī):
desc('Migrate database');
task('migrate', function () {
...
})->onRoles('db');
還可以指定多個(gè)角色: onRoles('app', 'db', ...).
按主機(jī)(hosts)名
按主機(jī)(hosts)名篩選主機(jī):
desc('Migrate database');
task('migrate', function () {
...
})->onHosts('db.domain.com');
你還可以指定多個(gè)主機(jī)名:onHosts('db.domain.com', ...).
本地任務(wù)
將任務(wù)標(biāo)記為 local 以在本地運(yùn)行,并且只運(yùn)行一次,與主機(jī)計(jì)數(shù)無(wú)關(guān)。
task('build', function () {
...
})->local();
注意,在本地任務(wù)中調(diào)用
run與調(diào)用runLocally具有相同的效果。
僅運(yùn)行一次
任務(wù)只運(yùn)行一次:
task('do', ...)->once();
將僅在第一臺(tái)主機(jī)上運(yùn)行.
重新配置
您可以重新配置任務(wù),例如,按名稱檢索第三方recipes提供的任務(wù):
task('notify')->onStage('production');
任務(wù)復(fù)寫
有時(shí),您可能希望某些任務(wù)的行為與常見(jiàn)的方法不同。可以簡(jiǎn)單到覆蓋它:
task('deploy:update_code', function () {
// Your custom update code
upload(...);
});
使用輸入選項(xiàng)
在定義任務(wù)之前,可以定義其他輸入選項(xiàng)和參數(shù):
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.');
在任務(wù)內(nèi)部使用這些:
task('foo:bar', function() {
// 參數(shù)(arguments)
$stage = null;
if (input()->hasArgument('stage')) {
$stage = input()->getArgument('stage');
}
// 選項(xiàng)(option)
$tag = null;
if (input()->hasOption('tag')) {
$tag = input()->getOption('tag');
}
});
任務(wù)并行執(zhí)行
當(dāng)部署到多個(gè)主機(jī)時(shí),Deployer將在每個(gè)主機(jī)上運(yùn)行一個(gè)任務(wù):
要加快部署, 請(qǐng)?zhí)砑?--parallel 或 -p 選項(xiàng). 這將在每個(gè)主機(jī)上并行運(yùn)行任務(wù). 如果在主機(jī)上執(zhí)行任務(wù)所需的時(shí)間比其他主機(jī)長(zhǎng),Deployer將等待所有主機(jī)完成任務(wù).
通過(guò)指定一個(gè)數(shù)字來(lái)限制并發(fā)任務(wù)的數(shù)量. 默認(rèn)情況下, 最多可同時(shí)處理10個(gè)任務(wù).
dep deploy --parallel --limit 2
下一節(jié): 主機(jī).