git-deployer icon indicating copy to clipboard operation
git-deployer copied to clipboard

Framework independent deployment solution based on Git hooks.

h1. About

This is simple and flexible deployment solution based on Git post-receive hook.

  • You don't have to install anything on your server
  • It works with whichever thinkable solution, Rails, Merb, "Rango":http://github.com/botanicus/rango, Sinatra or even Django or static pages, it just doesn't matter!
  • Deployment to more servers is supported.

h1. Usage

  • Run @gem install git-deployer --development@
  • Add following lines to your file with "Nake":http://github.com/botanicus/nake tasks (I'll refer this file as @tasks.rb@):
begin
  load "git-deployer.nake"
  Task["deployer:setup"].config[:servers] = {
    server1: {
      user: "www",
      host: "127.0.0.1",
      repo: "/var/sources/deploy-test.git",
      path: "/var/www/deploy-test"
    }
  }
rescue LoadError
  warn "You have to install git-deployer gem if you want to deploy to remote servers!"
end
  • Install hooks via @./tasks.rb deployer:install@
  • Edit @hooks/clone@ and @hooks/update@
  • Install @post-receive@ hook and create necessary directories via @./tasks.rb deployer:setup@
  • Push your changes via @git push origin master@

That's it. When you run @git push origin master@ for the first time, it should found that given branch isn't cloned yet, so it should

h1. Available tasks

h3. Task @deployer:install@

This task will copy @hooks/clone@ and @hooks/update@ hooks to your project. This step is mandatory.

h3. Task @deployer:setup@

It can take one or more optional arguments with It takes the same arguments resp. configuration options as @deployer:compile_hook@ task

h3. Task @deployer:compile_hook@

This task will copy @hooks/post-receive@ hook to your project. This step is optional and you will use the task you in case that you aren't happy with the default @post-receive@ hook distributed with git-deployer and you want to customize things. But you shouldn't need this, there is a bunch of arguments which you can use for influencing the generated @post-receive@ hook.

h3. Task @deployer:remote:copy_hook@

Again, you typically don't need this task, because it run during @deployer:setup@. However if you changed something in the @post-receive@ hook, you might want to run this task which will install @post-receive@ on remote servers. By default the hook will be installed to all the servers, but you can specify just a subset via @./tasks.rb deployer:remote:copy_hook server1 server2@.

h4. Setup

h2. Restricting Just for @deploy@ Branch

You might not want to deploy every branch you push to origin.

h3. Task @deployer:run@

If you pushed to the remote server but the hook failed, this is the way how you can re-run it. Just fix the problem and run @./tasks.rb deployer:run@. By default it runs on all the servers, but you can run it just on some servers via @./tasks.rb deployer:run server1 server2@.

h3. Task @deploy@

This task is useful for deployment to multiple servers. Just run @git push server1 master && git push server1 master@ or @./tasks.rb deploy@ which is a shortcut for pushing current branch to all or specified remote servers.

h1. FAQ

Q: I had typo in my hooks, so it failed during deploy, how can I rerun it?

A: @./tasks.rb deployer:run@ with optional argument which

Q: You are using "Nake":http://github.com/botanicus/nake, but everyone's using Rake. Is there any chance that you will support Rake in future?

A: The trouble with Rake is that Rake doesn't support configuration and it also really suck in command-line parsing. If Rake will support at least the command line arguments in a reasonable way, I can think about it.