任務 (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
下一節: 主機.