DeploYML

Description

DeploYML is a simple deployment solution that uses a single YAML file, Git and SSH.

Features

Configuration Examples

Specifying source and dest URIs as Strings:

source: git@github.com:user/project.git
dest: deploy@www.example.com/var/www/site

Specifying dest URI as a Hash:

source: git@github.com:user/project.git
dest:
  user: deploy
  host: www.example.com
  path: /var/www/site

Specify multiple dest URIs:

source: git@github.com:user/project.git
dest:
  - deploy@www1.example.com/var/www/site
  - deploy@www2.example.com/var/www/site
  - deploy@www3.example.com/var/www/site

Specifying a server option:

source: git@github.com:user/project.git
dest: deploy@www.example.com/var/www/site
server: apache

Specifying a server with options:

source: git@github.com:user/project.git
dest: deploy@www.example.com/var/www/site
server:
  name: thin
  options:
    servers: 4
deamonize: true
socket: /var/run/thin.sock
rackup: true

Multiple environments:

# config/deploy.yml
source: git@github.com:user/project.git
framework: rails
orm: datamapper

# config/deploy/staging.yml
dest: ssh://deploy@www.example.com/srv/staging
server:
  name: thin
  options:
    config: /etc/thin/staging.yml
    socket: /tmp/thin.staging.sock

# config/deploy/production.yml
dest: ssh://deploy@www.example.com/srv/project
server:
  name: thin
  options:
    config: /etc/thin/example.yml
    socket: /tmp/thin.example.sock

Specifying before/after commands:

before:
  restart: rm public/some/file

after:
  install:
    - mkdir tmp
    - mkdir tmp/pids
    - mkdir log
  update: rake post_deploy

Synopsis

Cold-Deploy a new project:

$ deployml deploy

Redeploy a project:

$ deployml redeploy

Run a rake task on the deploy server:

$ deployml rake 'db:automigrate'

Execute a command on the deploy server:

$ deployml exec 'whoami'

SSH into the deploy server:

$ deployml ssh

List available tasks:

$ deployml help

Requirements

Install

$ sudo gem install deployml

Copyright © 2010-2012 Hal Brodigan

See {file:LICENSE.txt} for license information.