crapapult 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/README.md +102 -1
  2. data/VERSION +1 -1
  3. data/lib/crapapult.rb +3 -1
  4. metadata +4 -4
data/README.md CHANGED
@@ -1,8 +1,109 @@
1
1
  # crapapult
2
2
 
3
+ Crapapult is a thin wrapper around Capistrano for the sole purpose of deploying
4
+ services at [Yammer](http://www.yammer.com).
5
+
6
+ ## What the hell is going on here
7
+
8
+ At Yammer, we use
9
+ [Hudson](http://hudson-ci.org/)/[Jenkins](http://jenkins-ci.org/) to build all
10
+ of our JVM-based services. Each time we commit to the various branches of a
11
+ service, Hudson runs all the tests and (if they pass, naturally) builds a fat,
12
+ deployable JAR containing all the various dependencies.
13
+
14
+ Crapapult allows us to deploy new versions of our services *and* synchronize
15
+ those deploys with changes to application-specific configuration. (We use
16
+ Puppet to provision and maintain machines with broad roles but use Crapapult to
17
+ generate all the application-specific configuration.)
18
+
19
+ It does so by using Capistrano to SSH into each of the application servers and
20
+ using `curl` to download the last successful build artifact from the specified
21
+ Hudson job. This tends to be super-fast, especially if your CI box is located in
22
+ the same data center as your app servers.
23
+
24
+ Once the artifact is staged (by default in `/opt/APPNAME`), it then uploads the
25
+ specified set of asset files to each server. After that, it renders and uploads
26
+ the specified set of template files to each server.
27
+
28
+ Then it restarts your service and gives you a high-five.
29
+
30
+ ## How to use this dang thing
31
+
32
+ Get yer install on:
33
+
3
34
  gem install crapapult
4
35
 
5
- And start swingin'.
36
+ Create yer dang deployer directory structure:
37
+
38
+ mkdir -p myapp-crapapult/{assets,templates}
39
+ cd myapp-crapapult
40
+
41
+ And start slingin' some crap in your `Capfile`:
42
+
43
+ ```ruby
44
+ require "crapapult"
45
+
46
+ # Give your application a name.
47
+ application "myapp" do
48
+ # Upload the file in assets/myapp.jvm.conf to each host.
49
+ asset "myapp.jvm.conf", "/etc/myapp.jvm.conf"
50
+
51
+ # Render the ERB template in templates/myapp.conf.erb to each host.
52
+ template "myapp.conf.erb", "/etc/myapp.conf", :mode => "0600"
53
+
54
+ # Set up the file in assets/myapp.upstart as an Upstart config file and create
55
+ # an /etc/init.d/myapp script.
56
+ upstart "myapp.upstart"
57
+ end
58
+
59
+ # Specify where your Hudson/Jenkins server is.
60
+ hudson "http://build.example.com"
61
+
62
+ # Specify the various branches and their respective build jobs.
63
+ branch :master, "myapp-release"
64
+ branch :development, "myapp-development"
65
+
66
+ # Define environments with allowed branches.
67
+ environment :staging, [:master, :development] do
68
+ # Set environment-specific data for your templates to work with.
69
+ data :jdbc_url, "jdbc:postgresql://db.example.com/happy_fun_times"
70
+
71
+ host "myapp-001.staging.example.com" do
72
+ # Set host-specific data for your templates to work with.
73
+ data :worker_id, "1"
74
+ end
75
+ end
76
+
77
+ # This will disallow deploying the staging branch to production.
78
+ environment :production, [:master] do
79
+ # Set environment-specific data for your templates to work with.
80
+ data :jdbc_url, "jdbc:postgresql://db.example.com/happy_fun_times"
81
+
82
+ host "myapp-001.example.com" do
83
+ # Set host-specific data for your templates to work with.
84
+ data :worker_id, "1"
85
+ end
86
+
87
+ host "myapp-002.example.com" do
88
+ data :worker_id, "2"
89
+ end
90
+ end
91
+ ```
92
+
93
+ ## Deploying a thing
94
+
95
+ cap deploy # Deploy the specified branch to the specified environment
96
+ cap from:development # Deploy the development branch
97
+ cap from:master # Deploy the master branch
98
+ cap to:production # Deploy to the production environment
99
+ cap to:staging # Deploy to the staging environment
100
+
101
+ So to deploy your development branch to your staging environment, it's just a
102
+ simple:
103
+
104
+ cap from:development to:staging deploy
105
+
106
+ And you're off to the races.
6
107
 
7
108
  --------------------------------------------------------------------------------
8
109
  Copyright (c) 2011 Yammer, Inc. See LICENSE.txt for further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/lib/crapapult.rb CHANGED
@@ -81,6 +81,7 @@ Capistrano::Configuration.instance(:must_exist).load do
81
81
  set :owner_group, group
82
82
  namespace :deploy do
83
83
  task :configure do
84
+ setup
84
85
  puts "> Configuring the application"
85
86
  app_block.call
86
87
  end
@@ -180,6 +181,7 @@ Capistrano::Configuration.instance(:must_exist).load do
180
181
  end
181
182
 
182
183
  task :stage, :role => :app do
184
+ setup
183
185
  puts "> Downloading the artifact remotely"
184
186
  run "curl --silent #{artifact_url} --output #{temp_dir}/#{artifact_filename}"
185
187
  run "#{sudo} cp #{temp_dir}/#{artifact_filename} #{directory}/#{artifact_filename}"
@@ -192,6 +194,7 @@ Capistrano::Configuration.instance(:must_exist).load do
192
194
  end
193
195
 
194
196
  task :cleanup, :role => :app do
197
+ setup
195
198
  puts "> Cleaning up"
196
199
  run "rm -rf #{temp_dir}"
197
200
  end
@@ -199,7 +202,6 @@ Capistrano::Configuration.instance(:must_exist).load do
199
202
  task :restart, :role => :app, :max_hosts => 1 do
200
203
  puts "> Stopping #{application_name}"
201
204
  run "#{sudo} stop #{application_name} || true"
202
- run "sleep 10"
203
205
  puts "> Starting #{application_name}"
204
206
  run "#{sudo} start #{application_name}"
205
207
  run "sleep 10"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crapapult
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Coda Hale
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-19 00:00:00 -07:00
18
+ date: 2011-04-20 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency