Developers have two new ways to publish code to the Heroku Platform-as-a-Service. Heroku recently added mechanisms to push code stored in either Github or Dropbox. These features, currently in beta, give Heroku a set of deployment techniques that compare favorably to other PaaS providers.
Described as “experimental” by Heroku, the GitHub integration feature lets developers set up automatic or manual deploys from any branch. Since 2008, Heroku has supported local git and remote repos that developers push to when they are ready to deploy. This new, native GitHub integration replaces previous processes and tools that developers used to marry the popular source code repo and Heroku PaaS. When setting up a manual deploy, developers specify the target branch. Heroku explains that manual deployment makes sense when you’re looking to control the change window.
You can also use manual deploys to temporarily deploy a different branch than the one that’s configured to be automatically deployed (see below). For example, you might have a development app synced to the
development
GitHub branch, but want to temporarily test a feature branch. Simply trigger a manual deploy of the feature branch to test it on the Heroku app. Note that release of the feature branch will be overwritten on the next successful GitHub push to thedevelopment
branch.
If enabled, an automatic deploy is triggered whenever a developer pushes to the designated branch. For teams using continuous integration (CI) servers to run test suites, they can configure the Heroku GitHub integration to only deploy the branch after the CI server finishes and commits successfully. Any Heroku app using GitHub integration has a release history that shows differences between deploys, and offers the opportunity to roll back to a previous release.
The Dropbox Sync option was released in November of 2014. To configure it, developers give Heroku access to a Dropbox account and a specific subfolder named “Heroku.” If turned on for an existing application, Dropbox Sync copies the source code of the deployed application into the new Dropbox folder. To deploy change from Dropbox to Heroku, the developer kicks off a manual commit from the Heroku dashboard. A user cannot turn on both Dropbox Sync and GitHub integration for the same application, but the Dropbox Sync service does work with the standard Heroku git capability. Heroku outlined an example where both options complement each other.
If you’re part of a development team where some use Git and others want to use Dropbox, fear not. Changes shipped with Dropbox are available to Git collaborators with a simple
git pull
andgit push
updates are automatically synced to connected Dropbox folders. If an app has multiple users deploying with Dropbox, the latest changes are synced to all connected Dropbox folders whenever a new app release is created.…
Git and Dropbox can be combined even if it’s just you working on an app. For example, you might do your day-to-day development on a laptop, pushing changes with Git. Later, if you need to make changes at a time and place where all you have is your iPad, no problem: simply open your code in a Dropbox-enabled editor, fix the problem, hit the “Deploy” button in Dashboard and you’re done.
In addition, Heroku explained how Dropbox Sync lets multiple collaborators work on an application at the same time. Each contributor can link their Dropbox account with the Heroku application to automatically receive any changes to the application source code. Given that Dropbox isn’t considered a robust source control management tool, Heroku points out caveats that can cause issues. Specifically, if a developer force-pushes the Heroku git rep, all Dropbox folders are unlinked because of the difficulty in generating a differences report. Also, changing the folder name in Dropbox will cause the folder to be unlinked. Heroku also makes a best effort to resolve conflicted copies.
With this update, Heroku matches up well against other PaaS solutions. In the table below, InfoQ compared four popular PaaS platforms and their native code deployment capabilities.
Heroku | Azure Websites | Cloud Foundry | OpenShift | |
CLI / API | X | X | ||
Local git | X | X | X | |
GitHub | X | X | ||
Dropbox | X | X | ||
Team Foundation Server | X | |||
Bitbucket | X |