The slides from my Deployment Tactics talk at the ThinkVitamin Code Management online conference (http://thinkvitamin.com/online-conferences/code-manage-deploy/).
- Table of Contents -
1.... Change Control
2.... Environments
3.... Version Control
4.... The Deploy Process
5.... Scripts
6.... Continuous Integration
7.... Remote Releases
8.... Packaged Releases
9.... Package Management
10.. Managing Hotfixes
11.. Managing Database Changes
12.. Rollbacks
13.. Tactical Deployment
Change control
plan execute
change change
identify
verify
need
close deliver
export copy to
code server
require compare
release md5
report restart
back apache
Change Request Form
Requested By: J. Teamlead Authorised By: S. Manager
Submit Date: 2011-01-27 Change Date: 2011-02-04
Reason For Change:
Resolve JIRA-1602 - Listen for new .com variants on vhost
Change Request:
Release tag 1.1.3 via normal process
mv /etc/httpd/conf.d/fooweb.conf /etc/httpd/conf.d/fooweb.old
mv ~releases/1.1.3/conf/fooweb.conf /etc/httpd/conf.d/
fooweb.conf
Verification:
http://foweb.com shows the same page as http://fooweb.com
Rollback:
Re-release 1.1.2
mv /etc/httpd/conf.d/fooweb.old /etc/httpd/conf.d/fooweb.conf
Environments
Production Development
static verbose
robust dynamic
reliable unstable
optimised experimental
[localhost] run: tar xvzf fooweb.tar.gz
[localhost] run: rm -rf fooweb.tar.gz
[localhost] run: mv * /tmp/test
[localhost] sudo: /etc/init.d/apache2 restart
Password for ianbarber@localhost:
[localhost] out: * Restarting web server
apache2
[localhost] out: ... waiting ...done.
[localhost] run: rm -rf fooweb.tar.gz
Done.
Disconnecting from localhost... done.
$ fab production deploy
[localhost] run: tar cvzf ../fooweb.tar.gz .
....
[primary.fooweb.com] run: rm -rf /tmp/release/
[localhost] run: tar cvzf ../fooweb.tar.gz .
....
[secondary.fooweb.com] run: mkdir /tmp/release
....
Disconnecting from secondary.fooweb.com...done
Disconnecting from primary.fooweb.com... done
$ mkdir config && cd config && capify .
[add] writing './Capfile'
[add] making directory './config'
[add] writing './config/deploy.rb'
[done] capified!
set :application, "set your application name "
set :repository, "set your repository"
set :scm, :subversion
role :web, "your web-server here"
role :app, "your app-server here"
role :db, "your primary db-server
here", :primary => true
Capi strano
role :db, "slave db" .com/
https:/ /github
capis trano/
set :application, "fooweb"
set :repository,"svn://localhost/fooweb/trunk"
set :scm, :subversion
set :scm_username, "deployment"
set :scm_password, "s3kkr3tp4a55"
set :scm_checkout, "export"
set :keep_releases, 4
set :normalize_asset_timestamps, false
set :deploy_to, "/usr/local/#{application}"
role :web, "primary.fooweb.com"
role :web, "secondary.fooweb.com"
role :db, "backend.fooweb.com"
namespace :deploy do
task :migrate do
# nothing
end
task :restart do
sudo "/etc/init.d/apache2 restart"
end
end
namespace :fooweb do
task :perms do
sudo "chmod -R a+w #{deploy_to}"
end
end
after "deploy:setup", "fooweb:perms"
$ cat /etc/yum.repos.d/fooweb.repo
[fooweb_noarch]
name = Fooweb Private Repository
baseurl = http://fooweb.com/repo/centos/5/fooweb/
noarch
enabled = 1
gpgcheck = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-
fooweb
$ yum update
fooweb_noarch 100% |========| 951 B
fooweb_noarch/primary 100% |========| 701 B
fooweb_noarch
1/1
Setting up Update Process
No Packages marked for Update
$ yum info fooweb
Available Packages
Name : fooweb
Arch : noarch
Version : 1.0
Release : 1
Size : 3.3 k
Repo : fooweb_noarch
Summary : Fooweb Application
License : BSD
Description: This is the Fooweb web application
$ sudo aptitude install puppetmaster
0 packages upgraded, 10 newly installed, 0 to
remove and 76 not upgraded.
Need to get 3,233kB of archives. After unpacking
13.7MB will be used.
Puppet
http://puppetlabs.com
$ sudo aptitude install puppet
0 packages upgraded, 5 newly installed, 0 to
remove and 76 not upgraded.
Need to get 587kB of archives. After unpacking
1,892kB will be used.