====== Deploying apps ====== ===== Tools ===== * [[http://ant.apache.org|Ant]] * Phing [[http://www.buildmeister.com/articles/automating_the_php_deployment_process_with_phing,_dbdeploy_and_ftp|Tuto 1]] [[http://phpmaster.com/deploy-and-release-your-applications-with-phing/|Tuto 2]] [[https://github.com/danielrhodeswarp/Phing-deployment-of-PHP-projects-in-Git|sample repo]] * [[https://github.com/etsy/deployinator|Deployinator used by Etsy]] * [[http://maven.apache.org/plugins/maven-deploy-plugin|Maven]] [[http://phpmaster.com/maven-and-php|Tuto1]] * Capistrano [[http://net.tutsplus.com/tutorials/php/deploying-a-laravel-application-using-capistrano/|Deploying a Laravel Application Using Capistrano]][[http://guides.beanstalkapp.com/deployments/deploy-with-capistrano.html|Tuto 1]] [[http://jeremykendall.net/2013/11/24/php-and-capistrano-3-notes-to-self/|PHP and Capistrano v3]] [[https://help.github.com/articles/deploying-with-capistrano|Github help]] * [[http://backbeam.io/|Backbeam]] ===== Statistics and Controls ===== * [[http://codeascraft.etsy.com/2010/09/17/frank-talk-about-site-outages|Site Outages]] ===== Dark Launches and Feature Flags ===== Dark Launches means taht we deploy a code with some features hidden by code switchers. That's possible with Feature Flags inside code, like an ACL or simple switches with ON or OFF positions. * [[http://changelog.ca/log/2012/07/19/dark_launching_software_features|Dark launching software features]] * [[https://www.facebook.com/note.php?note_id=96390263919|Facebook style]] * [[http://code.flickr.com/blog/2009/12/02/flipping-out|Flickr method]] * [[http://codeascraft.etsy.com/2011/02/04/how-does-etsy-manage-development-and-operations|Etsy]] ===== Continuous Deployment ===== The art of develop continuously and deploying as soon as possible, when a feature finishes for example, and its developer deploys in the moment. The goal is to minimize the amount of work needed between finishing an idea and making it real But there are several thing to have in mind when deciding to do it: * Continuous integration * Build-on-commit * Test-on-commit * Good test coverage * A staging environment that reflects production * Managed configuration * Single-button deployment * Failure plan * Rollback plan * Feature flagging * Track, trend, monitor * Excellent source code management * High levels of trust * Realistic risk assessment and tolerance * Excellent code review If there are only two things you remember, would like them to be these: * You should build the capability for continuous deployment, even if you never intend to do continuous deployment. * As with everything else in life, the only true way to get good at deployment is to deploy a lot. ==== References ==== * [[http://webadvent.org/2012/continuous-deployment-practices-by-laura-thomson|Continuous deployment practices]] * [[http://css-tricks.com/deployment/|Website Deployment: Let Us Count The Ways!]]