cap_blue_green_deploy 1.0.0 → 1.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85697c72f54a66d12e2e722d7570d762e00bcc3c
4
- data.tar.gz: d267f962d678ee6d0812f5f8f673c3a0f04c0362
3
+ metadata.gz: 8d0abc2d30a99d73e2f5dc1dc5af4081f6d01ad5
4
+ data.tar.gz: 9fc38baddcc1e6e35d5f22ff5b949bcee25badf2
5
5
  SHA512:
6
- metadata.gz: c36a439c165fff7888bc36a030103016862696a7ad9aa138909cadf4ac6dceef228470f2c8a8f19e6d63ae10bd8ef9c878b146b71bed45a37ff17eef2b782a82
7
- data.tar.gz: 1274c75964d809b8c7a462ac084ee1cceba25bcce6a331dd36aa32624389b3ef795c792030dd87ef56360c71b1f36fa0de5aabdf421510723f6699917205320f
6
+ metadata.gz: 8342b6167486f372e5773105043f1a7e8743922320cfd3050192d967228bc08c09b36512983dee4cb1e28e8e4f6e096b98e3e77a06160ea552e0dda912092c58
7
+ data.tar.gz: 761b01ad9ea6d12bb1e2f48e3ef718c66e79c6a2d63a1feaa6626d5ac8d400994cfafbaaa7b954d3b6f64242879c794281ddeade969f531a6e662257a90dbc3a
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ test/tmp
15
15
  test/version_tmp
16
16
  tmp
17
17
  .coveralls.yml
18
+ .DS_Store
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.0
4
+
5
+ - Changing custom variables name for live and previous dir
6
+ - Adding cap deploy:blue_green:pre command to deploy application
7
+
3
8
  ## 1.0.0
4
9
 
5
10
  - Removing cleanup callback after live deploy. Need to put manually in Capfile.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cap_blue_green_deploy (1.0.0)
4
+ cap_blue_green_deploy (1.1.0)
5
5
  capistrano (>= 2.0.0, < 3.0.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,7 +1,24 @@
1
- # Cap Blue Green Deploy (Under Tests) [![Code Climate](https://codeclimate.com/github/rafaelbiriba/cap_blue_green_deploy/badges/gpa.svg)](https://codeclimate.com/github/rafaelbiriba/cap_blue_green_deploy) [![Travis](https://api.travis-ci.org/rafaelbiriba/cap_blue_green_deploy.svg?branch=master)](https://travis-ci.org/rafaelbiriba/cap_blue_green_deploy) [![Gem Version](https://badge.fury.io/rb/cap_blue_green_deploy.svg)](http://badge.fury.io/rb/cap_blue_green_deploy) [![Coverage Status](https://coveralls.io/repos/rafaelbiriba/cap_blue_green_deploy/badge.png?branch=master)](https://coveralls.io/r/rafaelbiriba/cap_blue_green_deploy?branch=master)
1
+ # Cap Blue Green Deploy [![Gem Version](https://badge.fury.io/rb/cap_blue_green_deploy.svg)](http://badge.fury.io/rb/cap_blue_green_deploy) [![Code Climate](https://codeclimate.com/github/rafaelbiriba/cap_blue_green_deploy/badges/gpa.svg)](https://codeclimate.com/github/rafaelbiriba/cap_blue_green_deploy) [![Travis](https://api.travis-ci.org/rafaelbiriba/cap_blue_green_deploy.svg?branch=master)](https://travis-ci.org/rafaelbiriba/cap_blue_green_deploy) [![Coverage Status](https://coveralls.io/repos/rafaelbiriba/cap_blue_green_deploy/badge.png?branch=master)](https://coveralls.io/r/rafaelbiriba/cap_blue_green_deploy?branch=master)
2
2
 
3
3
  Blue-Green deployment solution for Capistrano, using symbolic links between releases.
4
4
 
5
+ ## Blue Green Concept
6
+
7
+ Learn more about
8
+ [Blue Green Deployment with Martin Fowler](http://martinfowler.com/bliki/BlueGreenDeployment.html)
9
+
10
+ ## Introduction
11
+
12
+ **Cap Blue Green Deployment** is a non canonical Blue Green solution, based on symlinks. Instead of having **blue** and **green**, we have **pre** and **live**. Pre is always validation environment and live it's production environment.
13
+
14
+ ![architecture](docs/architecture.png?a)
15
+
16
+ You can do as many deploys you need to **pre** without affecting the live env. Changing symlinks you can easily put your code from validation to production environment.
17
+
18
+ ## Prerequisite
19
+
20
+ - Capistrano 2 (Capistrano 3 coming soon)
21
+
5
22
  ## Installation
6
23
 
7
24
  Add this line to your application's Gemfile:
@@ -22,7 +39,88 @@ And then, require the gem script under your capistrano configuration file (Capfi
22
39
 
23
40
  ## Usage
24
41
 
25
- WIP
42
+ ### Understanding the deploy folder:
43
+
44
+ - **current**: Pre environment. Used to test and validate your application.
45
+ - **current_live**: Live environment. You production access goes here. *This dir name can be customized in custom variables, see below*
46
+ - **previous_live**: Last live release. Used to do the rollback action of current_live. *This dir name can be customized in custom variables, see below*
47
+
48
+ ### Deploy Commands:
49
+
50
+ * **Going to Pre** `cap deploy:blue_green:pre`
51
+
52
+ This command is an alias for `cap deploy` default task. It will run the deploy process and will create the `current` release
53
+
54
+ * **Going to Live** `cap deploy:blue_green:live`
55
+
56
+ This command will change symlinks of `current_live` dir to keep the the same release path of `current` dir. And also create the `previous_live` symlink to track the last current live release used.
57
+
58
+ **More explanations**
59
+
60
+ If `current_live` already exists, the `previous_live` dir will be created/updated, copying the same symlink of `current live` release, to keep traking the last valid release.
61
+
62
+ Finally, the command will create/update the `current_live` symlink, copying the same symlink of `current` release.
63
+
64
+ * **Rollbacking** `cap deploy:blue_green:rollback`
65
+
66
+ This command will change the `current_live` symlink to use the same destination of `previous_live` symlink.
67
+
68
+ * **Cleanup** `cap deploy:blue_green:cleanup`
69
+
70
+ This is the same behavior of the default capistrano cleanup `deploy:cleanup`, but the `current_live` and `previous_live` releases will be preserved and not removed.
71
+
72
+ **This lib automatically rewrite the default deploy:cleanup to use this new cleanup function.**
73
+
74
+ **Don't forget that you need to add the cleanup callback manually in your capistrano file:** `after "deploy:update", "deploy:cleanup"`
75
+
76
+ * **Custom Variables**
77
+
78
+ You can change the default value setting new variable in your capistrano file. The default values is:
79
+ - keep_releases: 5
80
+ - blue_green_live_dir: "current_live"
81
+ - blue_green_previous_dir: "previous_live"
82
+
83
+ ## How to Play
84
+ **Custom Variables used**
85
+ - `set :keep_releases, 2`
86
+ - `set :blue_green_live_dir, "current_live"`
87
+ - `set :blue_green_previous_dir, "previous_live"`
88
+
89
+ **1. Starting with clean server**
90
+ ![Clean server](docs/1.server_clean.png)
91
+
92
+ **2. Running `cap deploy:setup` to prepare the server**
93
+ ![Deploy setup](docs/2.deploy_setup.png)
94
+
95
+ **3. Running `cap deploy` three times to populate the release folder (cleanup code removes one old release)**
96
+ ![Deploy](docs/3.1.releases.three_deploys.png)
97
+ ![Deploy](docs/3.2.three_deploys.png)
98
+
99
+ **4. Going to live `cap deploy:blue_green:live` (current_live dir will be created. No changes in releases dir)**
100
+ ![Blue Green Live](docs/4.1.releases.deploy_blue_green_live.png)
101
+ ![Blue Green Live](docs/4.2.deploy_blue_green_live.png)
102
+
103
+ **5. Running two more deploy with `cap deploy` (current_live will not change. Cleanup remove one old release.)**
104
+ ![Deploy](docs/5.1.releases.two_deploy.png)
105
+ ![Deploy](docs/5.2.two_deploy.png)
106
+
107
+ **6. Going to live again with `cap deploy:blue_green:live` (At this time, previous_live will be created, targeting the current_live release before change it. No changes in releases dir)**
108
+ ![Blue Green Live](docs/6.1.releases.deploy_blue_green_live.png)
109
+ ![Blue Green Live](docs/6.2.deploy_blue_green_live.png)
110
+
111
+ **7. Something goes wrong... Rollbacking with `cap deploy:blue_green:rollback` (The current_live will change to target the same release of previous_live. No changes in releases dir)**
112
+ ![Blue Green Rollback](docs/7.1.releases.deploy_blue_green_rollback.png)
113
+ ![Blue Green Rollback](docs/7.2.deploy_blue_green_rollback.png)
114
+
115
+ **8. Running one more deploy with `cap deploy` (current_live and previous_live will not change. Cleanup remove one old release.)***
116
+ ![Deploy](docs/8.1.releases.one_deploy.png)
117
+ ![Deploy](docs/8.2.one_deploy.png)
118
+
119
+ **9. Going to live again with `cap deploy:blue_green:live`**
120
+ ![Deploy](docs/9.1.deploy_blue_green_live.png)
121
+
122
+ **Changing current_live and previous_live variables to use custom names (custom_live_path, custom_rollback_path)**
123
+ ![Custom names](docs/custom_variables.png)
26
124
 
27
125
  ## Contributing
28
126
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -8,6 +8,7 @@ module CapBlueGreenDeploy::Tasks
8
8
  Live.task_load config
9
9
  Rollback.task_load config
10
10
  Cleanup.task_load config
11
+ Deploy.task_load config
11
12
  end
12
13
 
13
14
  def self.load_libraries config
@@ -16,14 +17,15 @@ module CapBlueGreenDeploy::Tasks
16
17
  extend Live
17
18
  extend Rollback
18
19
  extend Cleanup
20
+ extend Deploy
19
21
  end
20
22
  end
21
23
 
22
24
  def self.load_variables config
23
25
  config.load do
24
26
  _cset :keep_releases, 5
25
- _cset :blue_green_live_path, "#{deploy_to}/current_live"
26
- _cset :blue_green_previous_path, "#{deploy_to}/previous_live"
27
+ _cset :blue_green_live_dir, "#{deploy_to}/current_live"
28
+ _cset :blue_green_previous_dir, "#{deploy_to}/previous_live"
27
29
  end
28
30
  end
29
31
  end
@@ -0,0 +1,14 @@
1
+ module CapBlueGreenDeploy::Tasks::Deploy
2
+ def self.task_load config
3
+ config.load do
4
+ namespace :deploy do
5
+ namespace :blue_green do
6
+ desc "Deploy your project to pre environment"
7
+ task :pre, :roles => :app, :except => { :no_release => true } {}
8
+ end
9
+ end
10
+
11
+ after "deploy:blue_green:pre", "deploy"
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module CapBlueGreenDeploy
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe CapBlueGreenDeploy::Tasks::Deploy do
4
+
5
+ class TestClass
6
+ include CapBlueGreenDeploy::Tasks::Deploy
7
+ end
8
+
9
+ subject do
10
+ TestClass.new
11
+ end
12
+
13
+ before do
14
+ @config = double("config")
15
+ allow(@config).to receive(:load) { |&arg| arg.call }
16
+ end
17
+
18
+ describe ".task_load" do
19
+ let :subject do
20
+ CapBlueGreenDeploy::Tasks::Deploy
21
+ end
22
+
23
+ before do
24
+ allow(subject).to receive(:namespace)
25
+ allow(subject).to receive(:desc)
26
+ allow(subject).to receive(:task)
27
+ allow(subject).to receive(:after)
28
+ end
29
+
30
+ context "capistrano blue green pre task" do
31
+ before do
32
+ expect(subject).to receive(:namespace).with(:deploy) { |&arg| arg.call }
33
+ expect(subject).to receive(:namespace).with(:blue_green) { |&arg| arg.call }
34
+ end
35
+
36
+ it "should define pre task description" do
37
+ expect(subject).to receive(:desc).with("Deploy your project to pre environment")
38
+ subject.task_load(@config)
39
+ end
40
+
41
+ it "should set pre task action" do
42
+ expect(subject).to receive(:task).with(:pre, roles: :app, except: { no_release: true })
43
+ subject.task_load(@config)
44
+ end
45
+
46
+ it "should create callback to run capistrano deploy after pre action" do
47
+ expect(subject).to receive(:after).with("deploy:blue_green:pre", "deploy")
48
+ subject.task_load(@config)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -17,6 +17,7 @@ describe CapBlueGreenDeploy::Tasks do
17
17
  allow(subject::Live).to receive(:task_load)
18
18
  allow(subject::Rollback).to receive(:task_load)
19
19
  allow(subject::Cleanup).to receive(:task_load)
20
+ allow(subject::Deploy).to receive(:task_load)
20
21
  end
21
22
 
22
23
  after do
@@ -42,6 +43,10 @@ describe CapBlueGreenDeploy::Tasks do
42
43
  it "should call Cleanup.task_load" do
43
44
  expect(subject::Cleanup).to receive(:task_load).with(@config)
44
45
  end
46
+
47
+ it "should call Cleanup.task_load" do
48
+ expect(subject::Deploy).to receive(:task_load).with(@config)
49
+ end
45
50
  end
46
51
 
47
52
  describe ".load_libraries" do
@@ -61,6 +66,10 @@ describe CapBlueGreenDeploy::Tasks do
61
66
  def test_common; end
62
67
  end
63
68
 
69
+ module CapBlueGreenDeploy::Tasks::Deploy
70
+ def test_deploy; end
71
+ end
72
+
64
73
  before do
65
74
  subject.load_libraries @config
66
75
  end
@@ -80,6 +89,10 @@ describe CapBlueGreenDeploy::Tasks do
80
89
  it "should load common tasks" do
81
90
  expect(subject).to respond_to :test_common
82
91
  end
92
+
93
+ it "should load common deploy" do
94
+ expect(subject).to respond_to :test_deploy
95
+ end
83
96
  end
84
97
 
85
98
  describe ".load_variables" do
@@ -98,12 +111,12 @@ describe CapBlueGreenDeploy::Tasks do
98
111
  end
99
112
 
100
113
  it "should set blue_green_live_path variable" do
101
- expect(subject).to receive(:_cset).with(:blue_green_live_path, "#{deploy_to}/current_live")
114
+ expect(subject).to receive(:_cset).with(:blue_green_live_dir, "#{deploy_to}/current_live")
102
115
  subject.load_variables @config
103
116
  end
104
117
 
105
118
  it "should set blue_green_previous_path variable" do
106
- expect(subject).to receive(:_cset).with(:blue_green_previous_path, "#{deploy_to}/previous_live")
119
+ expect(subject).to receive(:_cset).with(:blue_green_previous_dir, "#{deploy_to}/previous_live")
107
120
  subject.load_variables @config
108
121
  end
109
122
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cap_blue_green_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael Biriba
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-19 00:00:00.000000000 Z
11
+ date: 2014-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -119,17 +119,36 @@ files:
119
119
  - README.md
120
120
  - Rakefile
121
121
  - cap_blue_green_deploy.gemspec
122
+ - docs/1.server_clean.png
123
+ - docs/2.deploy_setup.png
124
+ - docs/3.1.releases.three_deploys.png
125
+ - docs/3.2.three_deploys.png
126
+ - docs/4.1.releases.deploy_blue_green_live.png
127
+ - docs/4.2.deploy_blue_green_live.png
128
+ - docs/5.1.releases.two_deploy.png
129
+ - docs/5.2.two_deploy.png
130
+ - docs/6.1.releases.deploy_blue_green_live.png
131
+ - docs/6.2.deploy_blue_green_live.png
132
+ - docs/7.1.releases.deploy_blue_green_rollback.png
133
+ - docs/7.2.deploy_blue_green_rollback.png
134
+ - docs/8.1.releases.one_deploy.png
135
+ - docs/8.2.one_deploy.png
136
+ - docs/9.1.deploy_blue_green_live.png
137
+ - docs/architecture.png
138
+ - docs/custom_variables.png
122
139
  - lib/cap_blue_green_deploy.rb
123
140
  - lib/cap_blue_green_deploy/init.rb
124
141
  - lib/cap_blue_green_deploy/tasks.rb
125
142
  - lib/cap_blue_green_deploy/tasks/cleanup.rb
126
143
  - lib/cap_blue_green_deploy/tasks/common.rb
144
+ - lib/cap_blue_green_deploy/tasks/deploy.rb
127
145
  - lib/cap_blue_green_deploy/tasks/live.rb
128
146
  - lib/cap_blue_green_deploy/tasks/rollback.rb
129
147
  - lib/cap_blue_green_deploy/version.rb
130
148
  - spec/lib/cap_blue_green_deploy/init_spec.rb
131
149
  - spec/lib/cap_blue_green_deploy/tasks/cleanup_spec.rb
132
150
  - spec/lib/cap_blue_green_deploy/tasks/common_spec.rb
151
+ - spec/lib/cap_blue_green_deploy/tasks/deploy_spec.rb
133
152
  - spec/lib/cap_blue_green_deploy/tasks/live_spec.rb
134
153
  - spec/lib/cap_blue_green_deploy/tasks/rollback_spec.rb
135
154
  - spec/lib/cap_blue_green_deploy/tasks_spec.rb
@@ -162,6 +181,7 @@ test_files:
162
181
  - spec/lib/cap_blue_green_deploy/init_spec.rb
163
182
  - spec/lib/cap_blue_green_deploy/tasks/cleanup_spec.rb
164
183
  - spec/lib/cap_blue_green_deploy/tasks/common_spec.rb
184
+ - spec/lib/cap_blue_green_deploy/tasks/deploy_spec.rb
165
185
  - spec/lib/cap_blue_green_deploy/tasks/live_spec.rb
166
186
  - spec/lib/cap_blue_green_deploy/tasks/rollback_spec.rb
167
187
  - spec/lib/cap_blue_green_deploy/tasks_spec.rb