This repository has been archived by the owner. It is now read-only.
Deploy to heroku with a github webhook
Ruby
Switch branches/tags
Nothing to show
Clone or download
himynameisjonas Merge pull request #9 from Politicon/master
Make deployment of other branches than 'master' work for Git versions ≥ 1.6.6
Latest commit 670a56f Sep 9, 2015
Permalink
Failed to load latest commit information.
lib
spec
.gitignore
.travis.yml
Gemfile
Gemfile.lock
README.md
config.ru

README.md

HerokuDeployer Build Status Code Climate

HerokuDeployer is an app you can host on Heroku. It syncs the code in your github repositories with the apps you have in Heroku. Each time you push to github, the changes will be deployed automatically to your Heroku apps. This saves you the step of pushing to Heroku also, and keeping the two gits in sync manually.

To deploy to Heroku, HerokuDeployer uses a Github webhook (or anything that can do a post request).

HerokuDeployer can support multiple Heroku apps and even other services that use webhooks (for example Bitbucket)

Jekyll + Heroku + Prose.io

This is the way I use HerokuDeployer:

I have a blog hosted on Heroku as an app. I use Jekyll which means that my blog posts are static markdown pages kept in a git repository. To write new posts I use prose.io with which I can make changes online directly on github. Then the HerokuDeployer deploys those changes automatically to my blog on Heroku.

See himynameisjonas/jekyll-heroku-unicorn to learn how to host a jekyll site on Heroku without need of building the site before deploy.

Usage

  1. Create new account

It would be best if you create a new heroku account for HerokuDeployer.

Step 1:
  Create a new_account to heroku.com. 
Step 2:
  Go to your old_account
  Go to each app you want to be able to deploy to automatically
  Add to each app new_account as a collaborator.
  1. Clone HerokuDeployer, and deploy it
git clone git@github.com:himynameisjonas/heroku-deployer.git
heroku login
# Give login and password for your new_account
heroku create give_deployer_a_name
git push heroku master
  1. Connect the old and the new account

Now we should create a ssh key, to allow the communication between the new_account and the old_account.

ssh-keygen -t rsa
# It will demand for a filename: Save it to "deploy_rsa"
# You don't have to give any passphrase

An RSA key has a private part, and a public part. We have to give the public part to our old_account, and the private part to our new_account.

Step 1:
  At your browser, sign in to your old_account at Heroku
  Go to Account > SSH Keys
  Copy the contents of "deploy_rsa.pub" to the "add new key" field
  Add the key
Step 2 (command line):
  heroku login
  # Write your login and password for you new_account
  heroku config:set DEPLOY_SSH_KEY="$(cat deploy_rsa)" # deploy_rsa is your new private ssh key

We should also add a secret deploy token that is used in the post request.

heroku config:add DEPLOY_SECRET="super_secret_string"
  1. Connect HerokuDeployer with ONE Github repository and ONE Heroku app

Generate a new pair of ssh keys. Add the public key as a deploy key to your github repository.

ATTENTION: You should replace the following:

  • "example_app" with your apps name.
  • "github_username" with your github username
  • "github_repository" wiht the name of the github repository you will use for deployment
Step 1 (terminal):
  ssh-keygen -t rsa
  # It will demand for a filename: Save it to "example_app_rsa"
  # You don't have to give any passphrase
Step 2 (browser):
  Connect to github
  Go to github_repository > Settings > Deploy Keys 
  Copy the contents of "example_app_rsa.pub" to the new key field

Add the app's configs to the HerokuDeployer (here for an app named example_app)

heroku config:set example_app_SSH_KEY="$(cat example_app_rsa)" example_app_GIT_REPO=ssh://git@github.com/github_username/github_repository.git example_app_HEROKU_REPO=git@heroku.com:example_app.git
  1. Setup github webhook

Add a new webhook to the github repository to trigger a deploy to heroku on push.

Connect to github
Go to github_repository > Settings > Service Hooks
Add the following link as a WebHook URL
https://give_deployer_a_name.herokuapp.com/deploy/example_app/super_secret_string
  1. Setup post deployment command (optional)

Add a command to be run after the server gets deployed.

heroku config:set example_app_POST_DEPLOY_COMMAND='curl http://example_app/post_deploy_hook'
  1. Setup for specific branch (optional)

Deploy only when a specific branch is updated on github and use this branch as the source of deployment (i.e do a "git push heroku [branch]:master)

heroku config:set example_app_BRANCH=master

Repeat step 4, 5, 6, and 7 for each app you want to deploy

Credits

Inspired by github-heroku-jekyll-hook and github-heroku-pusher