We use capifony, a Symfony-tailored version of Capistrano.
Because our workflow utilized git flow, we do the majority of our work in feature branches, submit PRs, and then merge those to develop when TravisCI says it passes.
Once on develop, we "cap staging deploy" and run any final tests using Testacular, Selenium, or just by hand.
Most of the time, though, all we do is eyeball the code changes on develop, confirm tests pass in TravisCI, and do a release on master and then "cap production deploy".
Database migrations are handled automatically via Doctrine with each deployment with rollback support.
Sessions are pooled, and there haven't been any issues between releases. NewRelic is our primary indicator for a successful release.
Using this method, we deploy 6+ times a day, and haven't had the the time to automate it all yet :)
Because our workflow utilized git flow, we do the majority of our work in feature branches, submit PRs, and then merge those to develop when TravisCI says it passes.
Once on develop, we "cap staging deploy" and run any final tests using Testacular, Selenium, or just by hand.
Most of the time, though, all we do is eyeball the code changes on develop, confirm tests pass in TravisCI, and do a release on master and then "cap production deploy".
Database migrations are handled automatically via Doctrine with each deployment with rollback support.
Sessions are pooled, and there haven't been any issues between releases. NewRelic is our primary indicator for a successful release.
Using this method, we deploy 6+ times a day, and haven't had the the time to automate it all yet :)