added chef and capistrano to deployment chapter

This commit is contained in:
Markus Hausammann
2012-11-23 23:03:24 +02:00
parent 1a44f50520
commit 1baa0436df

View File

@@ -4,11 +4,16 @@ isChild: true
## Building and Deploying your Application {#build_title}
If you find yourself doing manual database schema changes or running your tests manually before updating your files (manually), think twice! With every additional manual task needed to deploy a new version of your app, the chances for potentially fatal mistakes increase. Whether you're dealing with a simple update, a comprehensive build process or even a continuous integration strategy, build tools are your friend.
If you find yourself doing manual database schema changes or running your tests manually before updating your files (manually),
think twice! With every additional manual task needed to deploy a new version of your app, the chances for potentially
fatal mistakes increase. Whether you're dealing with a simple update, a comprehensive build process or even a continuous
integration strategy, build tools are your friend.
### Control your deployment with Phing
### Phing - Deployment with XML and PHP
With [Phing](http://www.phing.info/) you can control your packaging, deployment or testing process from within a simple XML build file. Phing provides a rich set of tasks usually needed to install or update a web app and can be extended with additional custom tasks (written in PHP).
[Phing](http://www.phing.info/) is the easiest way to get started with automated deployment in the PHP world. With Phing you can control your packaging, deployment or testing process from within a simple
XML build file. Phing provides a rich set of tasks usually needed to install or update a web app and can be extended
with additional custom tasks, written in PHP.
Example of a Phing script (build.xml):
@@ -18,7 +23,7 @@ Example of a Phing script (build.xml):
<project name="my-project" default="update">
<!-- Prompt for environment and load respective buld properties. -->
<propertyprompt propertyName="environment" defaultValue="development"
promptText="What's the target environment (development, staging, production)?" useExistingValue="true" />
promptText="What's the target environment (development, production)?" useExistingValue="true" />
<property file="build/properties/${environment}.properties" />
@@ -53,13 +58,32 @@ Example of a Phing script (build.xml):
{% endhighlight %}
### Capistrano - The powerful Ruby alternative
[Capistrano](https://github.com/capistrano/capistrano/wiki) is a system for *intermediate-to-advanced programmers* to execute commands in a structured, repeatable way on one or more remote machines.
It is pre-configured for deploying Ruby on Rails applications, however people are **successfully deploying PHP systems** with it. Successful use of Capistrano depends on a working knowledge of Ruby and Rake.
Dave Gardner's blog post [PHP Deployment with Capistrano](http://www.davegardner.me.uk/blog/2012/02/13/php-deployment-with-capistrano/) is a good starting point for PHP developers interested in Capistrano.
###Chef - Ruby based system integration framework
[Chef](http://www.opscode.com/chef/) is more than a deployment framework, it is a very powerful Ruby based system integration framework that doesn't just deploy your app but can build your whole server environment or virtual boxes.
Chef resources for PHP developers:
* [Three part blog series about deploying a LAMP application with Chef, Vagrant, and EC2](http://www.jasongrimes.org/2012/06/managing-lamp-environments-with-chef-vagrant-and-ec2-1-of-3/)
* [Chef Cookbook which installs and configures PHP 5.3 and the PEAR package management system](https://github.com/opscode-cookbooks/php)
### Continuous Integration
> Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily — leading to multiple integrations per day. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.
> Continuous Integration is a software development practice where members of a team integrate their work frequently,
usually each person integrates at least daily — leading to multiple integrations per day. Many teams find that this
approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.
*Martin Fowler*
There are different ways to implement continuous integration for PHP. Recently [Travis CI](https://travis-ci.org/) has become by far the easiest way to do CI. Travis CI is a hosted continuous integration service for the open source community. It is integrated with GitHub and offers first class support for many languages including PHP.
There are different ways to implement continuous integration for PHP. Recently [Travis CI](https://travis-ci.org/) has done a great job of making continuous integration a reality even for small projects. Travis CI is a hosted continuous integration service for the open source community. It is integrated with GitHub and offers first class support for many languages including PHP.
Example of a Travis CI build script: