Skip to main content

Buildout recipe making versioned remote deploys trivial.

Project description

praekelt.recipe.deploy

Buildout recipe making versioned remote deploys trivial.

Creates a bin/ script with which you can easily deploy buildouts to remote servers. Uses Fabric to communicate and run commands on remote servers.

NOTE: This recipe is under active development and has not been fully tested in a production environment. Use at your own risk.

The deploy process proceeds as follows:

  1. The remote host as specified in host is accessed.

  2. A new release path structure is created using this pattern: <root_path>/releases/<release_timestamp>.

  3. The git repo as specified in git_url is cloned.

  4. The newly cloned repo’s branch is switched to the branch as specified in git_branch. If git_branch is not specified no switch occurs.

  5. A Puppet manifest as specified in puppet_manifest is applied if provided.

  6. Shared resources as specified in shared_resources are copied from the current release(if present) to the newly created release.

  7. The Buildout’s boostrap.py is run using the python executable as specified in python_exec and a Buildout configuration file as specified in conf_file. python is used by default if python_exec is not specified, buildout.cfg is used by default if conf_file is not specified.

  8. The Buildout is run using a Buildout configuration file as specified in conf_file. buildout.cfg is used by default if conf_file is not specified.

  9. The <root_path>/current symlink is updated to point to newly created release.

  10. Supervisor is updated($ supervisorctl update) if update_supervisor is specified as True.

  11. Each command specified in initd_commands is run in order.

Usage

Add a part in buildout.cfg like so:

[buildout]
parts = deploy

[deploy]
recipe = praekelt.recipe.deploy
git_url = git@github.com:me/projectx.git
host = www.protectx.com
root_path = /var/www/projectx

Running the buildout will add a deploy script with the same name as your deploy part in the bin/ directory. In this case bin/deploy. The resulting script will deploy git@github.com:me/projectx.git to www.projectx.com’s /var/www/projectx path.

Options

as_user

User as which to perform the deploy. Used to setup permissions appropriately and to clone from github. Defaults to ‘www-data’.

conf_file

Buildout cfg file with which to run boostrap and buildout. Defaults to ‘buildout.cfg’.

cron_commands

Commands to add to the as_users user’s crontab.

deploy_key_path

Path on host to key to use when cloning the repo.

git_branch

Git repo branch with which to perform the deploy.

git_url

Git repo with which to perform the deploy. Required.

host

Hostname on which to perform deploy. Required.

initd_commands

init.d commands to run after a completed deploy. i.e. nginx restart.

puppet_mainfest

Puppet manifest file to apply prior to buildout. This will be applied using puppet apply <manifest>.

python_exec

Python command with which to boostrap Buildout. Defaults to ‘python’.

root_path

Root path in which to perform the deploy. current/release path structure will be created within this path. Required.

shared_resources

Resource paths to copy accross from the current release to the new release on each deploy.

update_supervisor

Whether or not to update supervisor. Defaults to ‘False’.

Full Example

The following example illustrates all available options:

[buildout]
parts = deploy

[deploy]
recipe = praekelt.recipe.deploy
as_user = www-data
conf_file = production.cfg
deploy_key_path = /var/www/.ssh/projectx_deploy_key
git_branch = production
git_url = git@github.com:me/projectx.git
host = www.protectx.com
initd_commands = nginx restart
puppet_manifest = provision.pp
python_exec = python2.5
root_path = /var/www/projectx
shared_resources =
    eggs
    downloads
    log
    media
update_supervisor = True
cron_commands = * * * * * echo foobar

The resulting script will deploy git@github.com:me/projectx.git’s production branch to www.projectx.com’s /var/www/projectx path as user www-data. The git repo will be cloned using /var/www/.ssh/projectx_deploy_key as ssh key. The Puppet manifest provision.pp will be applied. The eggs, downloads, log and media paths will be copied from the current release to this new release. The buildout environment will be created using python2.5 and run using production.cfg as configuration file. After the buildout completes supervisor will be updated and /etc/init.d/nginx restart will be run. * * * * * echo foobar will be added to www-data user’s crontab.

Authors

Praekelt Foundation

  • Shaun Sephton

Changelog

0.0.9

  1. Resolved apply.pp bug.

0.0.8

  1. Added Puppet manifest provisioning support via puppet_manifest option.

  2. Pretty printing.

0.0.7

  1. Added command env password option.

  2. Added force commandline option bypassing confirmation prompts.

0.0.6

  1. Added support for https git urls.

0.0.5

  1. Added newest and verbose options.

0.0.3

  1. Added cron_commands parameter. Allow for certain script argument overrides.

0.0.2

  1. Fixed branch issue.

0.0.1

  1. Initial Release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

praekelt.recipe.deploy-0.0.9.tar.gz (10.3 kB view details)

Uploaded Source

Built Distributions

praekelt.recipe.deploy-0.0.9-py2.7.egg (17.6 kB view details)

Uploaded Source

praekelt.recipe.deploy-0.0.9-py2.6.egg (17.7 kB view details)

Uploaded Source

File details

Details for the file praekelt.recipe.deploy-0.0.9.tar.gz.

File metadata

File hashes

Hashes for praekelt.recipe.deploy-0.0.9.tar.gz
Algorithm Hash digest
SHA256 555ebb16949793a3e03fbb5cef653629fe749f12ac5f42a36a864da266402fe1
MD5 ac9c7174ca9b7dc025da9237947940ac
BLAKE2b-256 5e6f17f44a02014726dcc9b55b510919008581b937726c1471e79d9617cbd7fe

See more details on using hashes here.

File details

Details for the file praekelt.recipe.deploy-0.0.9-py2.7.egg.

File metadata

File hashes

Hashes for praekelt.recipe.deploy-0.0.9-py2.7.egg
Algorithm Hash digest
SHA256 878d98d0c7516fb8d1644e7737a701cb81e0a6c8c3a6bd37c334aee2e95af0d9
MD5 f374202b90888d9849b9825959374b38
BLAKE2b-256 b33c814215e1cae1e213a13df9408a7cbce8bd8e378e81d8d04b86e14fd2a0cc

See more details on using hashes here.

File details

Details for the file praekelt.recipe.deploy-0.0.9-py2.6.egg.

File metadata

File hashes

Hashes for praekelt.recipe.deploy-0.0.9-py2.6.egg
Algorithm Hash digest
SHA256 98624579f7edf4690ceba095a288daf954e47e3854818b33a11c101517a8b1ef
MD5 3e471760ced94b5cda022556e9f6dc07
BLAKE2b-256 c45d98cd6e108809dfeeac135a47f97cb950dcfb24d618b9afe5255feaa4abce

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page