29. Seriously, use git!
Reliable
Super fast
Easy branching/merging
Distributed
Github:
Awesome ui
Extra's
PR's
Integration with existing deployment tools
45. Capifony config
# app/config/deploy.rb
set :application, "My App"
set :deploy_to, "/var/www/my-app.com"
set :domain, "my-app.com"
set :scm, :git
set :repository, "ssh-gitrepo-domain.com:/path/to/repo.git"
56. User permissions
set :use_sudo, false
set :user, "deployment"
set :group, "www-data"
set :webserver_user, "www-data"
:use_set_permissions, true
:permission_method, “chmod” # or “acl” or “chown”
57. Maintenance page
cap deploy:web:disable
REASON="hardware upgrade"
UNTIL="12pm Central Time"
# override template
set :maintenance_template_path, “app/Resources/uc.html”
58. Tips 'n Tricks
# determine tag/branch/commit/sha1 on the fly
set :branch do
default_tag = `git describe --abbrev=0 --tags`.split("n").last
tag = Capistrano::CLI.ui.ask "Tag/branch to deploy (make sure to
push the tag first): [#{default_tag}] "
tag = default_tag if tag.empty?
tag
end
67. Chef
# run chef after code update
after “update_code”, “provision”
task :provision do
end
68. Chef
# run chef after code update
after “update_code”, “provision”
task :provision do
run "#{sudo} chef-solo -c
#{release_path}/chef/config.rb
#{release_path}/chef/chef_#{stage}.json"
end
76. Further reading
“A basic git capistrano workflow”
http://labs.headshift.com/2012/02/29/a-basic-gitcapistrano-workflow/
“A successful git branching model”
http://nvie.com/posts/a-successful-git-branching-model/
The dbPatch project
http://www.dbpatch-project.com/
“Continuous deployment with symfony2, jenkins and capifony”
http://jeremycook.ca/2012/11/04/continuous-deployment-with-symfony2-jenkin
“Software branching and parallel universes”
http://www.codinghorror.com/blog/2007/10/software-branching-and-parallel-un
Hinweis der Redaktion
This talk is heavily opinionated. All tools mentioned could be replaced by alternatives, but I'll show you some tools and techniques which I consider best for the job. This is not a talk about continuous deployment, although most of the ideas and best practices shown are part of the concept.
FTP is a great protocol for transferring (large) files between computers, but what it's not so great for is deploying your 25000 files counting web project from your 2mb/s home network while your web visitors are waiting for it to finish.
Obviously, we would all prefer to never take our website down, not even when updating. But in practice most developers find it acceptable and even customers don't find it odd that their website is down for maintenance (when announced on beforehand of course). But, ideally, our customers and, more importantly, their customers should have no idea of what's going on on the server while buying new shoes in your awesome webshop. As discussed in the previous slides, most traditional deployment strategies require the developer to perform some additional manual operations after or before uploading the updated code. This often makes the developer want to work fast, because the website is down or even broken. This results in stress and often leads to mistakes made by the deployer. Some applications are very heavy and are heavily dependant on caching. After updating the code, the cache also needs to be renewed, which willl cause the first couple of page views to be slow. This might sound as a trivial problem, but in practice, when deploying multiple times a day, it will also result in multiple slow downs each day. Some deployment processes take forever to complete, which might not be a big thing when you're releasing every 3 months, but when your team wants to get new features out of the door quickly, your productivity rate will decrease dramatically when your team mates are waiting 40 minutes a day for 3 deployments to finish. There is soo much that could potentially go wrong when deploying. Database migrations gone wrong, permission errors, connection problems and so on. But, no matter what goes wrong, you should ALWAYS be able to go back and revert, so that you can investigate the problem, at your own pace, in your own time. Not when your website is throwing fatals at your visitors.
Wherever you can optimize, optimize! Higher release frequency means smaller deploys means less risk of exceptions Main point of presentation: optimize & automate!
Obviously, we would all prefer to never take our website down, not even when updating. But in practice most developers find it acceptable and even customers don't find it odd that their website is down for maintenance (when announced on beforehand of course). But, ideally, our customers and, more importantly, their customers should have no idea of what's going on on the server while buying new shoes in your awesome webshop. As discussed in the previous slides, most traditional deployment strategies require the developer to perform some additional manual operations after or before uploading the updated code. This often makes the developer want to work fast, because the website is down or even broken. This results in stress and often leads to mistakes made by the deployer. Some applications are very heavy and are heavily dependant on caching. After updating the code, the cache also needs to be renewed, which willl cause the first couple of page views to be slow. This might sound as a trivial problem, but in practice, when deploying multiple times a day, it will also result in multiple slow downs each day. Some deployment processes take forever to complete, which might not be a big thing when you're releasing every 3 months, but when your team wants to get new features out of the door quickly, your productivity rate will decrease dramatically when your team mates are waiting 40 minutes a day for 3 deployments to finish. There is soo much that could potentially go wrong when deploying. Database migrations gone wrong, permission errors, connection problems and so on. But, no matter what goes wrong, you should ALWAYS be able to go back and revert, so that you can investigate the problem, at your own pace, in your own time. Not when your website is throwing fatals at your visitors.
Deployment is an often forgotten topic when sitting around the drawing table. As before mentioned requirements will take time and therefore cost more money, you should mention and discuss this topic in the early stages of your project. It is essential for a successful deployment strategy.
Deployment is an often forgotten topic when sitting around the drawing table. As before mentioned requirements will take time and therefore cost more money, you should mention and discuss this topic in the early stages of your project. It is essential for a successful deployment strategy.
Also, you need to manage the expectations for everybody involved in the project. Since deployment is such a critical part of your development cycle, everyone should know how to act and what to expect when working on the project. Also, users should of course be informed about updates, maintenance windows and receive proper error messages when something goes wrong while deploying.
No matter how cool your versioning system is, and how good your migrations script can rollback, always make sure there is a backup of your stuff before you actually start breaking things.
No matter how cool your versioning system is, and how good your migrations script can rollback, always make sure there is a backup of your stuff before you actually start breaking things.
So now we're getting more and more close to having us a deployment script