Class: Capistrano::Plugin

Inherits:
Rake::TaskLib
  • Object
show all
Includes:
DSL
Defined in:
lib/capistrano/plugin.rb

Overview

IMPORTANT: The Capistrano::Plugin system is not yet considered a stable, public API, and is subject to change without notice. Eventually it will be officially documented and supported, but for now, use it at your own risk.

Base class for Capistrano plugins. Makes building a Capistrano plugin as easy as writing a ‘Capistrano::Plugin` subclass and overriding any or all of its three template methods:

  • set_defaults

  • register_hooks

  • define_tasks

Within the plugin you can use any methods of the Rake or Capistrano DSLs, like ‘fetch`, `invoke`, etc. In cases when you need to use SSHKit’s backend outside of an ‘on` block, use the `backend` convenience method. E.g. `backend.test`, `backend.execute`, or `backend.capture`.

Package up and distribute your plugin class as a gem and you’re good to go!

To use a plugin, all a user has to do is install it in the Capfile, like this:

# Capfile
require "capistrano/superfancy"
install_plugin Capistrano::Superfancy

Or, to install the plugin without its hooks:

# Capfile
require "capistrano/superfancy"
install_plugin Capistrano::Superfancy, load_hooks: false

Direct Known Subclasses

SCM::Plugin

Instance Method Summary collapse

Methods included from DSL

#execute, #invoke, #invoke!, #local_user, #lock, #on, #revision_log_message, #rollback_log_message, #run_locally, #scm, #sudo, #t

Methods included from DSL::Stages

#stage_definitions, #stage_set?, #stages

Methods included from DSL::Paths

#asset_timestamp, #current_path, #deploy_config_path, #deploy_path, #deploy_to, #join_paths, #linked_dir_parents, #linked_dirs, #linked_file_dirs, #linked_files, #map_dirnames, #now, #release_path, #releases_path, #repo_path, #repo_url, #revision_log, #set_release_path, #shared_path, #stage_config_path

Methods included from DSL::Env

#asset_timestamp, #env, #release_roles, #release_timestamp, #role_properties, #roles

Methods included from TaskEnhancements

#after, #before, #default_tasks, #define_remote_file_task, #deploying?, #ensure_stage, #exit_deploy_because_of_exception, #tasks_without_stage_dependency

Instance Method Details

#define_tasksObject

Implemented by subclasses to define Rake tasks. Typically a plugin will call ‘eval_rakefile` to load Rake tasks from a separate .rake file.

Example:

def define_tasks
  eval_rakefile File.expand_path("../tasks.rake", __FILE__)
end

For simple tasks, you can define them inline. No need for a separate file.

def define_tasks
  desc "Do something fantastic."
  task "my_plugin:fantastic" do
    ...
  end
end


79
# File 'lib/capistrano/plugin.rb', line 79

def define_tasks; end

#register_hooksObject

Implemented by subclasses to hook into Capistrano’s deployment flow using using the ‘before` and `after` DSL methods. Note that `register_hooks` will not be called if the user has opted-out of hooks when installing the plugin.

Example:

def register_hooks
  after "deploy:updated", "my_plugin:do_something"
end


59
# File 'lib/capistrano/plugin.rb', line 59

def register_hooks; end

#set_defaultsObject

Implemented by subclasses to provide default values for settings needed by this plugin. Typically done using the ‘set_if_empty` Capistrano DSL method.

Example:

def set_defaults
  set_if_empty :my_plugin_option, true
end


47
# File 'lib/capistrano/plugin.rb', line 47

def set_defaults; end