capistrano-dockerized 0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c125d1e75888bd5908e7d9efe9f81a049f781f1d
4
+ data.tar.gz: a3168ddd8aaf10cce4177ee2b10a1d1a32595e6c
5
+ SHA512:
6
+ metadata.gz: 8924e8844c5fea4811fd88ff169f2debd91701fa9a13bbb8c767da9b06b65a51de762d62eae01ea2e9c3a1ac2c3233cc8c93cb2d3d163c90796b64e95dd22a45
7
+ data.tar.gz: 73a4e850f24cade751b411df85493f087a1953bc24154e1ac6a1bb71583c03bcfc5d0ee694066e3383b4f9b69380c066946540597e437cc576fcc33fe10f45b8
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ .bundle/
2
+ log/*.log
3
+ pkg/
4
+ test/dummy/db/*.sqlite3
5
+ test/dummy/db/*.sqlite3-journal
6
+ test/dummy/log/*.log
7
+ test/dummy/tmp/
8
+ test/dummy/.sass-cache
9
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ capistrano-dockerized (0.1)
5
+ capistrano (~> 3.5)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ airbrussh (1.0.2)
11
+ sshkit (>= 1.6.1, != 1.7.0)
12
+ capistrano (3.5.0)
13
+ airbrussh (>= 1.0.0)
14
+ capistrano-harrow
15
+ i18n
16
+ rake (>= 10.0.0)
17
+ sshkit (>= 1.9.0)
18
+ capistrano-harrow (0.5.1)
19
+ i18n (0.7.0)
20
+ net-scp (1.2.1)
21
+ net-ssh (>= 2.6.5)
22
+ net-ssh (3.1.1)
23
+ rake (11.1.2)
24
+ sshkit (1.10.0)
25
+ net-scp (>= 1.1.2)
26
+ net-ssh (>= 2.8.0)
27
+
28
+ PLATFORMS
29
+ ruby
30
+
31
+ DEPENDENCIES
32
+ capistrano-dockerized!
33
+
34
+ BUNDLED WITH
35
+ 1.11.2
data/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # Capistrano::Dockerized
2
+
3
+ Add tasks for capistrano to deploy with docker compose.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your Gemfile
8
+
9
+ ``` ruby
10
+ gem 'capistrano-dockerized'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ ``` bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+
21
+ ``` bash
22
+ $ gem install capistrano-dockerized
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ Add this line to your `Capfile`:
28
+
29
+ ``` ruby
30
+ require 'capistrano/dockerized
31
+ ```
32
+
33
+ ## Options for deployment
34
+
35
+ You can specify the following options in you `deploy.rb` script or the environment specific deploy file:
36
+
37
+ * **dockerized_restart**: An array of services that should be restarted each deployment, if not specified dockerized will restart all services
38
+ * **dockerized_web_service**: The web service that will be used to execute commands inside like `rake` or any interactive command from `dockerized:run`, default value: :web
39
+ * **dockerized_rake_tasks**: A set of rake tasks to execute after each deploy, default value is `nil`
40
+
41
+ For a typical rails application the previous options should be as follows, given that the application container service name is `web`:
42
+
43
+ ```ruby
44
+ set :dockerized_restart, [:web]
45
+ set :dockerized_web_service, :web
46
+ set :dockerized_rake_tasks, ['db:migrate', 'assets:precompile']
47
+ ```
48
+
49
+ ## Defined Tasks
50
+
51
+ ```
52
+ dockerized:build # build docker-compose services
53
+ dockerized:clean # delete docker images that are not related to current build
54
+ dockerized:down # shutdown all project services with docker-compose
55
+ dockerized:rake_tasks # execute a set of rake tasts inside the web container
56
+ dockerized:restart # restart services of docker-compose and if not services listed restart all services
57
+ dockerized:run # run an interactive command inside the web container
58
+ dockerized:up # boot up all docker-compose services
59
+ ```
60
+
61
+ ## After the first deployment of a rails application
62
+
63
+ You would need to setup your database by invoking the `db:setup` task to create and seed your database:
64
+
65
+ * `cap production dockerized:run rake db:setup`
66
+
67
+ ## General note
68
+
69
+ * This gem doesn't provide a `dockerfile` nor `docker-compose.yml` file, you have to create these files yourself
70
+ * The linked directories and files will not work and you should use docker data volumes anyway
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,18 @@
1
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
2
+ require 'capistrano/dockerized/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'capistrano-dockerized'
6
+ s.version = Capistrano::Dockerized::VERSION
7
+ s.authors = ['GV']
8
+ s.email = ['']
9
+ s.homepage = 'https://github.com/wadik/capistrano-dockerized'
10
+ s.summary = 'Capistrano plugin to deploy your application inside docker containers using docker compose'
11
+ s.description = 'Capistrano plugin to deploy your application inside docker containers using docker compose'
12
+ s.license = 'MIT'
13
+
14
+ s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
15
+ s.require_paths = ['lib']
16
+
17
+ s.add_dependency 'capistrano', '~> 3.5'
18
+ end
File without changes
@@ -0,0 +1 @@
1
+ load File.expand_path('../tasks/dockerized.rake', __FILE__)
@@ -0,0 +1,5 @@
1
+ module Capistrano
2
+ module Dockerized
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
@@ -0,0 +1,100 @@
1
+ namespace :dockerized do
2
+
3
+ desc 'build docker-compose services'
4
+ task :build do
5
+ on roles(:app) do
6
+ within release_path do
7
+ docker_execute :build
8
+ end
9
+ end
10
+ end
11
+
12
+ desc 'shutdown all project services with docker-compose'
13
+ task :down do
14
+ on roles(:app) do
15
+ within release_path do
16
+ docker_execute :down
17
+ end
18
+ end
19
+ end
20
+
21
+ desc 'boot up all docker-compose services'
22
+ task :up do
23
+ on roles(:app) do
24
+ within release_path do
25
+ docker_execute :up, '-d'
26
+ end
27
+ end
28
+ end
29
+
30
+ desc 'restart services of docker-compose and if not services listed restart all services'
31
+ task :restart do
32
+ on roles(:app) do
33
+ within release_path do
34
+ services = Array(fetch(:dockerized_restart))
35
+ if services.empty?
36
+ docker_execute :down
37
+ docker_execute :up
38
+ else
39
+ docker_execute :stop, *services
40
+ docker_execute :up, '-d', *services
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ desc 'delete docker images that are not related to current build'
47
+ task :clean do
48
+ on roles(:app) do
49
+ within release_path do
50
+ images_to_delete = capture('docker images -f "dangling=true" -q')
51
+ execute 'docker rmi -f $(docker images -f "dangling=true" -q)' unless images_to_delete.empty?
52
+ end
53
+ end
54
+ end
55
+
56
+ desc 'execute a set of rake tasts inside the web container'
57
+ task :rake_tasks do
58
+ on roles(:app) do
59
+ within release_path do
60
+ docker_rake(*fetch(:dockerized_rake_tasks)) if fetch(:dockerized_rake_tasks)
61
+ end
62
+ end
63
+ end
64
+
65
+ desc 'run an interactive command inside the web container'
66
+ task :run do
67
+ on roles(:app) do |host|
68
+ command = ARGV[2..-1].join(' ')
69
+ docker_execute_interactively host, command
70
+ end
71
+ end
72
+
73
+ namespace :load do
74
+ task :defaults do
75
+ set :dockerized_restart, fetch(:dockerized_restart, nil)
76
+ set :dockerized_web_service, fetch(:dockerized_web_service, :web)
77
+ set :dockerized_rake_tasks, fetch(:dockerized_rake_tasks, nil)
78
+ end
79
+ end
80
+
81
+ def docker_rake(*args)
82
+ docker_execute('run', '--rm', fetch(:dockerized_web_service), 'rake', *args)
83
+ end
84
+
85
+ def docker_execute(*args)
86
+ execute('docker-compose', "-p #{fetch :application}", *args)
87
+ end
88
+
89
+ def docker_execute_interactively(host, command)
90
+ user = host.user
91
+ port = fetch(:port) || 22
92
+ docker_run = "docker-compose -p #{fetch :application} run --rm #{fetch(:dockerized_web_service)} #{command}"
93
+ exec "ssh -l #{user} #{host} -p #{port} -t 'cd #{deploy_to}/current && #{docker_run}'"
94
+ end
95
+
96
+ after 'deploy:updated', 'dockerized:build'
97
+ after 'deploy:published', 'dockerized:rake_tasks'
98
+ after 'deploy:published', 'dockerized:restart'
99
+ after 'deploy:cleanup', 'dockerized:clean'
100
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-dockerized
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - GV
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capistrano
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.5'
27
+ description: Capistrano plugin to deploy your application inside docker containers
28
+ using docker compose
29
+ email:
30
+ - ''
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - ".gitignore"
36
+ - Gemfile
37
+ - Gemfile.lock
38
+ - README.md
39
+ - Rakefile
40
+ - capistrano-dockerized.gemspec
41
+ - lib/capistrano-dockerized.rb
42
+ - lib/capistrano/dockerized.rb
43
+ - lib/capistrano/dockerized/version.rb
44
+ - lib/capistrano/tasks/dockerized.rake
45
+ homepage: https://github.com/wadik/capistrano-dockerized
46
+ licenses:
47
+ - MIT
48
+ metadata: {}
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 2.5.1
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: Capistrano plugin to deploy your application inside docker containers using
69
+ docker compose
70
+ test_files: []