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.
Files changed (4) hide show
  1. data/README.md +56 -0
  2. data/Rakefile +16 -0
  3. data/lib/deplay.rb +67 -0
  4. metadata +65 -0
@@ -0,0 +1,56 @@
1
+ [![endorse](http://api.coderwall.com/jeroenr/endorsecount.png)](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.
@@ -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
@@ -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: []