marionetta 0.4.4 → 0.4.5
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.
- data/lib/marionetta/manipulators/deployer.rb +59 -16
- data/lib/marionetta.rb +4 -2
- data/spec/deployer_spec.rb +1 -0
- metadata +2 -2
@@ -4,6 +4,7 @@
|
|
4
4
|
# Using a directory structure similar to capistrano `Deployer`
|
5
5
|
# maintains a folder of releases so you may rollback quickly.
|
6
6
|
#
|
7
|
+
require 'marionetta'
|
7
8
|
require 'marionetta/command_runner'
|
8
9
|
|
9
10
|
module Marionetta
|
@@ -54,9 +55,10 @@ module Marionetta
|
|
54
55
|
# Call `.deploy()` to run a deploy to your remote
|
55
56
|
# server. The process involves:
|
56
57
|
#
|
57
|
-
# - `:from` directory
|
58
|
-
#
|
59
|
-
# -
|
58
|
+
# - `:from` directory rsync'd to remote cache directory
|
59
|
+
# with `:exclude` files being ignored
|
60
|
+
# - cache directory copied on remote machine to
|
61
|
+
# releases directory
|
60
62
|
# - `:before_script` run
|
61
63
|
# - release directory symlinked to a current directory
|
62
64
|
# - `:after_script` run
|
@@ -64,16 +66,20 @@ module Marionetta
|
|
64
66
|
# The directory structure under `server[:deployer][:to]`
|
65
67
|
# looks something like this:
|
66
68
|
#
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
69
|
+
# cache/
|
70
|
+
# current/ -> ./releases/2012-09-20_14:04:39
|
71
|
+
# releases/
|
72
|
+
# 2012-09-20_13:59:15
|
73
|
+
# 2012-09-20_14:04:39
|
71
74
|
#
|
72
75
|
def deploy()
|
73
|
-
release =
|
76
|
+
release = create_release_name()
|
74
77
|
|
75
|
-
|
78
|
+
create_cache_dir()
|
79
|
+
sync_cache_dir()
|
80
|
+
copy_cache_dir_to_release(release)
|
76
81
|
|
82
|
+
send_scripts()
|
77
83
|
run_script(:before, release)
|
78
84
|
symlink_release_dir(release)
|
79
85
|
run_script(:after, release)
|
@@ -135,6 +141,18 @@ module Marionetta
|
|
135
141
|
server[:deployer][:to]
|
136
142
|
end
|
137
143
|
|
144
|
+
def tmp_dir()
|
145
|
+
if server[:deployer].has_key?(:tmp)
|
146
|
+
server[:deployer][:tmp]
|
147
|
+
else
|
148
|
+
Marionetta.default_server[:deployer][:tmp]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def cache_dir()
|
153
|
+
"#{to_dir}/cache"
|
154
|
+
end
|
155
|
+
|
138
156
|
def releases_dir()
|
139
157
|
"#{to_dir}/releases"
|
140
158
|
end
|
@@ -153,6 +171,10 @@ module Marionetta
|
|
153
171
|
exit(1)
|
154
172
|
end
|
155
173
|
|
174
|
+
def create_release_name()
|
175
|
+
timestamp
|
176
|
+
end
|
177
|
+
|
156
178
|
def rsync_exclude_flags(exclude_files)
|
157
179
|
exclude_files = exclude_files.clone
|
158
180
|
exclude_files.map! {|f| Dir["#{from_dir}/#{f}"]}
|
@@ -163,18 +185,40 @@ module Marionetta
|
|
163
185
|
return exclude_files
|
164
186
|
end
|
165
187
|
|
166
|
-
def
|
167
|
-
|
168
|
-
|
188
|
+
def create_cache_dir()
|
189
|
+
cmd.ssh("test -d #{cache_dir} || mkdir -p #{cache_dir}")
|
190
|
+
end
|
169
191
|
|
170
|
-
|
192
|
+
def sync_cache_dir()
|
193
|
+
args = [Dir[from_dir+'/*'], cache_dir]
|
171
194
|
|
172
195
|
if server[:deployer].has_key?(:exclude)
|
173
196
|
args.concat(rsync_exclude_flags(server[:deployer][:exclude]))
|
174
197
|
end
|
175
198
|
|
176
199
|
unless cmd.put(*args)
|
177
|
-
fatal('Could not rsync
|
200
|
+
fatal('Could not rsync cache dir')
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def copy_cache_dir_to_release(release)
|
205
|
+
release_dir = release_dir(release)
|
206
|
+
cmd.ssh("mkdir -p #{releases_dir} && cp -r #{cache_dir} #{release_dir}")
|
207
|
+
end
|
208
|
+
|
209
|
+
def send_scripts()
|
210
|
+
files = []
|
211
|
+
|
212
|
+
[:before, :after].each do |script|
|
213
|
+
script_key = "#{script}_script".to_sym
|
214
|
+
|
215
|
+
if server[:deployer].has_key?(script_key)
|
216
|
+
files << server[:deployer][script_key]
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
unless files.empty?
|
221
|
+
cmd.put(files, tmp_dir)
|
178
222
|
end
|
179
223
|
end
|
180
224
|
|
@@ -183,8 +227,7 @@ module Marionetta
|
|
183
227
|
|
184
228
|
if server[:deployer].has_key?(script_key)
|
185
229
|
script = server[:deployer][script_key]
|
186
|
-
|
187
|
-
tmp_script = "/tmp/#{File.basename(script)}"
|
230
|
+
tmp_script = "#{tmp_dir}/#{File.basename(script)}"
|
188
231
|
cmd.ssh("chmod +x #{tmp_script} && exec #{tmp_script} #{release}")
|
189
232
|
end
|
190
233
|
end
|
data/lib/marionetta.rb
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
#
|
28
28
|
module Marionetta
|
29
29
|
|
30
|
-
VERSION = '0.4.
|
30
|
+
VERSION = '0.4.5'
|
31
31
|
|
32
32
|
### Defining Servers
|
33
33
|
|
@@ -74,7 +74,9 @@ module Marionetta
|
|
74
74
|
|
75
75
|
:puppet => {},
|
76
76
|
|
77
|
-
:deployer => {
|
77
|
+
:deployer => {
|
78
|
+
:tmp => '/tmp'
|
79
|
+
},
|
78
80
|
|
79
81
|
:debloyer => {
|
80
82
|
:name => 'debloyer',
|
data/spec/deployer_spec.rb
CHANGED
@@ -14,6 +14,7 @@ describe Marionetta::Manipulators::Deployer do
|
|
14
14
|
it 'should deploy' do
|
15
15
|
cmd.ssh('rm -rf ~/app')
|
16
16
|
deployer.deploy
|
17
|
+
deployer.deploy
|
17
18
|
cmd.ssh("[ -L ~/app/current ]").should == true
|
18
19
|
cmd.ssh("[ -d ~/app/releases ]").should == true
|
19
20
|
cmd.ssh("[ -f ~/app/current/app.rb ]").should == true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marionetta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: open4
|