deplay 1.0.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.
- data/README.md +56 -0
- data/Rakefile +16 -0
- data/lib/deplay.rb +67 -0
- metadata +65 -0
data/README.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
[](http://coderwall.com/jeroenr)
|
2
|
+
|
3
|
+
# debloy
|
4
|
+
|
5
|
+
debloy is a capistrano plugin to facilitate the deployment of debian packages (inspired by supply_drop). It works by simply copying (using rsync, or scp) your debian packages to your servers and installing them through the package manager
|
6
|
+
|
7
|
+
### Installation
|
8
|
+
|
9
|
+
gem install debloy
|
10
|
+
|
11
|
+
or with Bundler
|
12
|
+
|
13
|
+
gem 'debloy'
|
14
|
+
|
15
|
+
### Tasks
|
16
|
+
|
17
|
+
cap debloy:bootstrap
|
18
|
+
|
19
|
+
This sets up the environment for dpkg or apt deployment, depending on your configuration.
|
20
|
+
|
21
|
+
cap debloy
|
22
|
+
|
23
|
+
This deploys the debian packages on the target servers.
|
24
|
+
|
25
|
+
cap debloy:teardown
|
26
|
+
|
27
|
+
Cleans up the environment.
|
28
|
+
|
29
|
+
### Configuration
|
30
|
+
|
31
|
+
At the top of your deploy.rb
|
32
|
+
|
33
|
+
require 'rubygems'
|
34
|
+
require 'debloy'
|
35
|
+
|
36
|
+
then optionally set some variables
|
37
|
+
|
38
|
+
set :debian_source, '.'
|
39
|
+
|
40
|
+
the directory containing your debian packages that will be rsynced to the servers.
|
41
|
+
|
42
|
+
set :debian_target, '/tmp'
|
43
|
+
|
44
|
+
the temp directory on the target machine to hold the packages before installing.
|
45
|
+
|
46
|
+
set :debian_package_manager, 'dpkg'
|
47
|
+
|
48
|
+
the debian package manager to use (one of [dpkg, apt]).
|
49
|
+
|
50
|
+
set :debian_stream_log, false
|
51
|
+
|
52
|
+
determines whether to stream the command output.
|
53
|
+
|
54
|
+
set :debian_filter, '*'
|
55
|
+
|
56
|
+
a glob syntax filter to determine which packages to deploy. By default all will be deployed.
|
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
desc "clean"
|
2
|
+
task :clean do
|
3
|
+
rm_f Dir.glob("*.gem")
|
4
|
+
end
|
5
|
+
|
6
|
+
namespace :gem do
|
7
|
+
desc "build the gem"
|
8
|
+
task :build => :clean do
|
9
|
+
sh "gem build deplay.gemspec"
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "push the gem"
|
13
|
+
task :push => :build do
|
14
|
+
sh "gem push #{Dir.glob("*.gem").first}"
|
15
|
+
end
|
16
|
+
end
|
data/lib/deplay.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
2
|
+
namespace :deplay do
|
3
|
+
|
4
|
+
set :app_name, 'my_app'
|
5
|
+
set :log_dir, '/var/log'
|
6
|
+
set :prod_conf, 'prod.conf'
|
7
|
+
set :deploy_to, '/var/lib/my_app'
|
8
|
+
set :project_home, '.'
|
9
|
+
|
10
|
+
task :setup do
|
11
|
+
run "mkdir -p #{deploy_to}"
|
12
|
+
put "#!/bin/bash\nnohup bash -c \"cd #{deploy_to} && target/start $* &>> #{log_dir}/#{app_name}.log 2>&1\" &> /dev/null &", "#{deploy_to}/start.sh", :mode => '755', :via => :scp
|
13
|
+
put "#!/bin/bash\npid=`cat RUNNING_PID 2> /dev/null`\nif [ \"$pid\" == \"\" ]; then echo '#{app_name} is not running'; exit 0; fi\necho 'Stopping #{app_name}...'\nkill -SIGTERM $pid", "#{deploy_to}/stop.sh", :mode => '755', :via => :scp
|
14
|
+
end
|
15
|
+
|
16
|
+
task :deploy_prod, :roles => :prod do
|
17
|
+
package
|
18
|
+
stop
|
19
|
+
copy_app_files
|
20
|
+
start_prod
|
21
|
+
end
|
22
|
+
|
23
|
+
task :deploy_dev, :roles => :dev do
|
24
|
+
package
|
25
|
+
stop
|
26
|
+
copy_app_files
|
27
|
+
start_dev
|
28
|
+
end
|
29
|
+
|
30
|
+
task :stop do
|
31
|
+
depend :remote, deploy_to
|
32
|
+
targets = find_servers_for_task(current_task)
|
33
|
+
failed_targets = targets.map do |target|
|
34
|
+
cmd = "ssh #{user}@#{target.host} 'cd #{deploy_to} && ./stop.sh'"
|
35
|
+
target.host unless system cmd
|
36
|
+
end.compact
|
37
|
+
raise "Stopping #{app_name} failed on #{failed_targets.join(',')}" if failed_targets.any?
|
38
|
+
end
|
39
|
+
|
40
|
+
task :start_prod do
|
41
|
+
targets = find_servers_for_task(current_task)
|
42
|
+
failed_targets = targets.map do |target|
|
43
|
+
cmd = "ssh #{user}@#{target.host} 'cd #{deploy_to} && ./start.sh -Dconfig.resource=#{prod_conf}'"
|
44
|
+
target.host unless system cmd
|
45
|
+
end.compact
|
46
|
+
raise "Starting #{app_name} failed on #{failed_targets.join(',')}" if failed_targets.any?
|
47
|
+
end
|
48
|
+
|
49
|
+
task :start_dev do
|
50
|
+
targets = find_servers_for_task(current_task)
|
51
|
+
failed_targets = targets.map do |target|
|
52
|
+
cmd = "ssh #{user}@#{target.host} 'cd #{deploy_to} && ./start.sh'"
|
53
|
+
target.host unless system cmd
|
54
|
+
end.compact
|
55
|
+
raise "Starting #{app_name} failed on #{failed_targets.join(',')}" if failed_targets.any?
|
56
|
+
end
|
57
|
+
|
58
|
+
task :package do
|
59
|
+
system "cd #{project_home} && play clean compile test stage"
|
60
|
+
raise "Error in package task" if not $?.success?
|
61
|
+
end
|
62
|
+
|
63
|
+
task :copy_app_files do
|
64
|
+
upload "#{project_home}/target", deploy_to, :via => :scp, :recursive => true
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: deplay
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jeroen Rosenberg
|
9
|
+
- Egemen Kalyoncu
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-11-14 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: capistrano
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.5.21
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 2.5.21
|
31
|
+
description: See http://jeroenr.github.com/deplay/
|
32
|
+
email:
|
33
|
+
- jeroen.rosenberg@gmail.com
|
34
|
+
executables: []
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- README.md
|
39
|
+
- Rakefile
|
40
|
+
- lib/deplay.rb
|
41
|
+
homepage: http://github.com/jeroenr/deplay
|
42
|
+
licenses: []
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.8.23
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: Deploying play applications with capistrano
|
65
|
+
test_files: []
|