Skip to main content
Version: 6.x

Tasks

Define your own tasks, by using the task function. Also, you can setup a description for a task with the desc function:

desc('My task');task('my_task', function () {    run(...);});

To run your task:

dep my_task

To list all available commands:

dep list

To run a task only on a specified host or stage:

dep deploy main

You can specify hosts via the --hosts option (comma separate multiple values) and roles via the --roles option:

dep deploy --hosts domain.comdep deploy --roles app

Simple tasks#

If your task only contains run calls, or just one bash command, you can simplify the task definition:

task('build', 'npm build');

By default all simple tasks cd to release_path, so you don't need to.

Or you can use a multi line script:

task('build', '    gulp build;    webpack -p;    echo "Build done";');

Task grouping#

You can combine tasks in groups:

task('deploy', [    'deploy:prepare',    'deploy:update_code',    'deploy:vendors',    'deploy:symlink',    'cleanup']);

Before and after#

You can define tasks to be run before or after some tasks.

task('deploy:done', function () {    write('Deploy done!');});
after('deploy', 'deploy:done');

After the deploy task is called, deploy:done will be executed.

Filtering#

You can specify on which hosts/stages/roles you want to run a task.

By stage#

Filter hosts by stage:

desc('Run tests for application');task('test', function () {    ...})->onStage('test');

By roles#

Filter tasks by roles:

desc('Migrate database');task('migrate', function () {    ...})->onRoles('db');

Also you can specify multiple roles: onRoles('app', 'db', ...).

By hosts#

Filter tasks by hosts:

desc('Migrate database');task('migrate', function () {    ...})->onHosts('db.domain.com');

Also you can specify multiple hosts: onHosts('db.domain.com', ...).

Local tasks#

Mark a task with local to run it locally and only once, independent from the hosts count.

task('build', function () {    ...})->local();

Note that calling run inside a local task will have the same effect as calling runLocally.

Once#

To run a task only once:

task('do', ...)->once();

Will run on the first host only.

Reconfigure#

You can reconfigure tasks, e.g. those provided by 3rd party recipes by retrieving them by name:

task('notify')->onStage('production');

Overriding tasks#

Some times you may want to have a different behavior of some task from the common recipes. Simply override it:

task('deploy:update_code', function () {    // Your custom update code    upload(...);});

Using input options#

You can define additional input options and arguments, before defining tasks:

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.');

To get the input inside a task, this can be used:

task('foo:bar', function() {    // For arguments    $stage = null;    if (input()->hasArgument('stage')) {        $stage = input()->getArgument('stage');    }        // For option    $tag = null;    if (input()->hasOption('tag')) {        $tag = input()->getOption('tag');    }});

Parallel task execution#

When deploying to multiple hosts, Deployer will run one task on each host:

task 2task 2task 2task 2task 1task 1task 1task 1Host 4Host 3Host 2Host 1

To speedup deployment add the --parallel or -p option. This will run tasks in parallel on each host. If execution of the task on a host takes longer then on others, Deployer will wait until all hosts have finished their tasks.

task 2task 2task 2task 2task 1task 1task 1task 1Host 4Host 3Host 2Host 1

Limit the number of concurrent tasks by specifing a number. By default, up to 10 tasks will be processed concurrently.

dep deploy --parallel --limit 2
task 2task 2task 2task 2task 1task 1task 1task 1Host 4Host 3Host 2Host 1