Skip to content
This repository has been archived by the owner on Apr 19, 2018. It is now read-only.

germanattanasio/cf-blue-green

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Note: if your application's manifest is "complete", use Autopilot instead. More info below, in the Autopilot README, and in this Issue.

Cloud Foundry blue-green deployment

Allows zero-downtime deployments of applications within Cloud Foundry, with no additional setup needed.

Usage

  1. Install the cf CLI v6.12.4+.
  2. Run npm install -g cf-blue-green.
    • See Notes below for non-Node installation.
  3. Run cf-blue-green <appname> (instead of cf-push) from your application directory to deploy.

This creates a copy of your already-running application, and safely switches traffic over to it. It's recommended that you try this script on a non-production application environment first, just to ensure that everything is switched over properly.

Notes

Manual installation

The script is distributed via NPM, but doesn't actually require Node.js beyond that. If you don't want to install Node, simply:

  1. Download the script.
  2. Run chmod a+x cf-blue-green.
  3. Move the file somewhere in your PATH.

Using with Travis

Travis supports continuous deployment, which will automatically deploy your application after its tests pass on a specified branch. To use cf-blue-green with Travis, you need to use a script provider instead of the default Cloud Foundry provider. Your Cloud Foundry settings are read from environment variables.

Set up continuous deployment with the following settings in your .travis.yml file:

sudo: true
env:
  global:
  - CF_APP=[app name]
  - CF_API=[API endpoint]
  - CF_USERNAME=[user]
  - CF_ORGANIZATION=[organization]
  - CF_SPACE=[space]
  - CF_SLEEP=[# seconds to wait before swapping BLUE with GREEN]
  - secure: [CF_PASSWORD=[encrypted with Travis](http://docs.travis-ci.com/user/environment-variables/#Encrypted-Variables)]
before_deploy: npm install -g cf-blue-green
deploy:
  provider: script
  script: cf-blue-green-travis
  on:
    branch: [git branch you want to deploy]

CF_SLEEP defines the number of seconds to sleep before replacing BLUE with GREEN. Useful when the new application requires some time to start.

Manifests

cf-blue-green creates a temporary manifest from your live application, meaning that it ignores the manifest.yml in your directory, if you have one. To deploy any changes to your manifest, use cf push directly.

Multiple domains

The script fails on apps with multiple domains, because the domains in the manifest are in the form of a list:

domain:
  - 18f.gov
  - digitalgov.gov

To work around this, use the env var B_DOMAIN for the domain you'd like the B instance to use.

Resources

More information about blue-green deployment, all of which this script drew from.

Alternatives for Blue/Green Deploys in Cloud Foundry

  • Autopilot: Autopilot is a CloudFoundry Go plugin that provides a subcommand, zero-downtime-push for hands-off, zero-downtime application deploys.
  • BlueGreenDeploy: cf-blue-green-deploy is a plugin, written in Go, for the CF command line tool that automates a few steps involved in zero-downtime deploys.

About

zero-downtime deployment for Cloud Foundry applications

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Shell 100.0%