Monday
Aug182008
Code deployment tools

G'day,
I'm building an application to manage WordPress PHP code on many servers. Our application will push down code updates to each server, as well as performing backups and testing.
I'm considering different methods of pushing updated code onto the individual servers. I'm considering something like Capistrano (I've no experience in Ruby though). I've also considered using subversion and then remotely calling svn commands via SSH.
Are there any other tools specifically for this purpose? The servers will have persistent data (the WordPress databases) so I don't want to re-image them every update. Plus, they will each have a different set of plugins / themes, so building many images would be too complex.
If there are any papers on code deployment, or other recommended reading, please point the links my way.
Likewise, if anyone has any suggestions, or would like more details, just let me know.
Cheers - Callum.
I'm building an application to manage WordPress PHP code on many servers. Our application will push down code updates to each server, as well as performing backups and testing.
I'm considering different methods of pushing updated code onto the individual servers. I'm considering something like Capistrano (I've no experience in Ruby though). I've also considered using subversion and then remotely calling svn commands via SSH.
Are there any other tools specifically for this purpose? The servers will have persistent data (the WordPress databases) so I don't want to re-image them every update. Plus, they will each have a different set of plugins / themes, so building many images would be too complex.
If there are any papers on code deployment, or other recommended reading, please point the links my way.
Likewise, if anyone has any suggestions, or would like more details, just let me know.
Cheers - Callum.
Reader Comments (4)
There are a few more, like puppet. Take a look at http://highscalability.com/tags/operations and http://highscalability.com/tags/product. I don't think subversion will work well on its own because it doesn't contain features like dependency management, rollback, and class specific policies.
Hey Todd,
Puppet looks intriguing. I'm wondering if it's overkill for this application though. I'm not managing the servers, or at least that's a separate task. I'm simply managing the WordPress code. So when an update is released, we test that update, then we deploy it. We run a backup, dump the new code onto the server, run the upgrade process, run another backup, test the results, and either exit or roll back if there were errors.
Do you think puppet is appropriate for that type of setup? I'm reading through the documentation and it seems like it's geared more at deploying whole servers, services, users, and so on.
I was considering using SVN to deploy the new code. For example, an update is released, we test it, approve it, commit it to svn. Then as part of the upgrade process, to roll out the new code, we `svn up`. If there's an error, we can go backwards with `svn up -r 123`.
I'll continue reading about puppet to learn a bit more. Even if it's not applicable here, it looks like a useful tool, thanks for the tips.
Cheers - http://www.callum-macdonald.com/" title="Callum" target="_blank">Callum
Another tool that can provide a backbone for such tasks is func:
https://fedorahosted.org/func
Have you had a look at http://phing.info? Its PHP port of Apache Ant.
Very flexible and extensible. Deployment can be configured inside a single xml file. You can create your own custom tasks if you want additional functionality.
This is a handy extension to Phing. http://www.fedecarg.com/wiki/filesynctask