I administer a social networking site that runs on WP, BP, and WP Multisite. Currently I have two servers: development and production, but I plan to move to three: development, staging, and production. Is there some piece of software out there that will allow me to push changes from development to staging, and staging to production, with a single command? Bonus points if it's web based. Also, since it's a social networking site, I can't overwrite any content that the users have generated.
There is no settled solution for change management in a WordPress environment.
I recently wrote about one approach, that might be helpful.
@scribu then brought our attention to this new 'Ramp' offering for content staging. which might be of interest, depending on your use case.
@MikeSchinkel has his own potential solution which doesn't attempt to preserve of user-generated content, at least initially, but is definitely worth checking out..
You will be able to move wp-content related files e.g. themes, plugins, languages etc easily. For instance use rsync to sync changes between the different servers.
However migrating settings from the testing database to staging and production will probably result in having to create a custom solution for your setup, since moving settings between different WordPress installs is annoying due to the fact that WordPress settings may be serialized arrays and since WordPress uses full urls in some of those :(
My limited and 'hackish' solution is to use database dumps between the different versions, which would nicely work between staging & testing, but not for production since you cannot overwrite user-generated content.
Anyways, I've described my limited method on my blog in a bit more detail, maybe it helps:
Your situation is pretty unique: you want a pushbutton solution that does content sync and reconciliation. I'm pretty certain that you'll need to write a custom piece of software for it, or a shell script.
Here's a starting point for you: a bash script that clones from production to staging (for QA testing.)
It's only a primer on how to move / clone databases, files, and make sure they actually work from one server to the other.
It's not a web interface, assumes mounted filesystems, and it does the opposite from what you want. However, it's a one-line command starting point for you, since it updates settings (URLs, database info, etc.)