shiplane_deployers_capistrano_docker 0.1.1

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
+ SHA256:
3
+ metadata.gz: ec84da285f3c55064ca75b5940db4ce55ec78f1412fde601ac66ba01edfdd57a
4
+ data.tar.gz: 52470871f3b1dd30a4c269e7c917c904e3050b2e0874a194c9382d11b63641dd
5
+ SHA512:
6
+ metadata.gz: 8a136ba2dc5d9bde48ac9db6b0a8837e20c2f24dfe358e691bd204f439626cd1470b7ca5c963bca908f491188ccaa9689e516815a9a5affbb1c096535f0a8161
7
+ data.tar.gz: d360f3094cf0921fe70a5ec26e66b5f0cfee5f2d8b2818243cb4581003e73c721b39d4973891ea2c88542e18488c87aff5a3a9e8969b58f81888ab4511b3cea8
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ ### Settings
2
+
3
+ `deploy.rb`:
4
+
5
+ ```
6
+ # Docker Registry Authentication
7
+ set :docker_registry, :dockerhub
8
+ set :docker_registry_username, ENV["DOCKERHUB_USERNAME"]
9
+ set :docker_registry_password, ENV["DOCKERHUB_PASSWORD"]
10
+
11
+ set :containers, [
12
+ {
13
+ name: "podcaster_app_#{fetch(:sha)}",
14
+ server_role: 'app',
15
+ command: 'bin/start_web_server',
16
+ virtual_host_name: 'battlecryforfreedom.com',
17
+ docker_registry_repo: 'kirillian2/podcaster',
18
+ port: 3000,
19
+ mounted_volumes: [
20
+ [fetch(:sso_cert_file),'/var/www/podcaster/config/app.crt'],
21
+ [fetch(:sso_cert_private_key_file),'/var/www/podcaster/config/app.key'],
22
+ ],
23
+ terminate_ssl: false,
24
+ ssl_cert_file: nil,
25
+ },
26
+ {
27
+ name: "podcaster_sidekiq_#{fetch(:sha)}",
28
+ server_role: 'app',
29
+ command: 'bundle exec sidekiq',
30
+ docker_registry_repo: 'kirillian2/podcaster',
31
+ mounted_volumes: [
32
+ [fetch(:sso_cert_file),'/var/www/podcaster/config/app.crt'],
33
+ [fetch(:sso_cert_private_key_file),'/var/www/podcaster/config/app.key'],
34
+ ],
35
+ terminate_ssl: false,
36
+ ssl_cert_file: nil,
37
+ },
38
+ ]
39
+ ```
@@ -0,0 +1,5 @@
1
+ module Capistrano
2
+ module ShiplaneDeployersCapistranoDocker
3
+ VERSION = Shiplane::Deployers::CapistranoDocker::VERSION
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ load File.expand_path('../tasks/dockerhub.rake', __FILE__)
2
+ load File.expand_path('../tasks/deployer.rake', __FILE__)
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dotenv'
4
+ Dotenv.load File.join(Dir.pwd, '.env')
5
+
6
+ namespace :deploy do
7
+ task :starting do
8
+ invoke "shiplane:instantiate_shiplane_environment"
9
+ invoke "shiplane:create_networks"
10
+ end
11
+
12
+ task :updating do
13
+ invoke "shiplane:download_container"
14
+ end
15
+
16
+ task :publishing do
17
+ invoke "shiplane:stop_old_containers"
18
+ invoke "shiplane:remove_conflicting_containers"
19
+ invoke "shiplane:deploy_latest"
20
+ end
21
+
22
+ task :finishing do
23
+ end
24
+ end
25
+
26
+ namespace :shiplane do
27
+ task :instantiate_shiplane_environment do
28
+ set :shiplane_container_configurations, Hash[fetch(:shiplane_containers).map do |name, config|
29
+ [name, Shiplane::Deploy::ContainerConfiguration.new(name, config, env)]
30
+ end]
31
+
32
+ set :shiplane_network_configurations, Hash[fetch(:shiplane_networks).map do |name, config|
33
+ [name, Shiplane::Deploy::NetworkConfiguration.new(name, config, env)]
34
+ end]
35
+ end
36
+
37
+ task :create_networks do
38
+ fetch(:shiplane_network_configurations).each do |name, config|
39
+ roles = roles(config.fetch(:capistrano_role, :all)).map{|role| Shiplane::Host.new(role, env) }
40
+ roles.each do |role|
41
+ on role.capistrano_role do
42
+ config.create_commands(role).each(&method(:execute))
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ desc "Deploy the current branch to production via its docker container"
49
+ task deploy_latest: [:instantiate_shiplane_environment, :create_networks, :download_container, :stop_old_containers, :remove_conflicting_containers] do
50
+ fetch(:shiplane_container_configurations).each do |name, config|
51
+ roles = roles(config.fetch(:capistrano_role, :all)).map{|role| Shiplane::Host.new(role, env) }
52
+ roles.each do |role|
53
+ on role.capistrano_role do
54
+ config.run_commands(role).each(&method(:execute))
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ task :stop_old_containers do
61
+ fetch(:shiplane_container_configurations).each do |name, config|
62
+ roles = roles(config.fetch(:capistrano_role, :all)).map{|role| Shiplane::Host.new(role, env) }
63
+ roles.each do |role|
64
+ on role.capistrano_role do
65
+ old_container_ids = capture("#{config.docker_command(role)} ps --filter name=#{config.container_name} --format \"{{.ID}}\"").split("\n")
66
+ old_container_ids.each do |container_id|
67
+ execute "#{config.docker_command(role)} kill #{container_id}"
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ task :remove_conflicting_containers do
75
+ fetch(:shiplane_container_configurations).each do |name, config|
76
+ roles = roles(config.fetch(:capistrano_role, :all)).map{|role| Shiplane::Host.new(role, env) }
77
+ roles.each do |role|
78
+ on role.capistrano_role do
79
+ old_container_ids = capture("#{config.docker_command(role)} ps -a --filter name=#{fetch(:sha)} --format \"{{.ID}}\"").split("\n")
80
+ old_container_ids.each do |container_id|
81
+ execute "#{config.docker_command(role)} rm #{container_id}"
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,25 @@
1
+ namespace :shiplane do
2
+ task :login_to_dockerhub do
3
+ fetch(:shiplane_container_configurations).each do |name, config|
4
+ roles = roles(config.fetch(:capistrano_role, :all)).map{|role| Shiplane::Host.new(role, env) }
5
+ roles.each do |role|
6
+ on role.capistrano_role do
7
+ username = fetch(:shiplane_docker_registry_username)
8
+ password = fetch(:shiplane_docker_registry_password)
9
+ execute "echo '#{password}' | #{config.docker_command(role)} login --username #{username} --password-stdin"
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ task download_container: [:login_to_dockerhub] do
16
+ fetch(:shiplane_container_configurations).each do |name, config|
17
+ roles = roles(config.fetch(:capistrano_role, :all)).map{|role| Shiplane::Host.new(role, env) }
18
+ roles.each do |role|
19
+ on role.capistrano_role do
20
+ execute "#{config.docker_command(role)} pull #{config.image_name}"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Shiplane
4
+ module Deployers
5
+ module CapistranoDocker
6
+ VERSION = "0.1.1"
7
+ end
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shiplane_deployers_capistrano_docker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - John Epperson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-04-16 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.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.7.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.7.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: airbrussh
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.1'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.1.1
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.1'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.1.1
53
+ description: Converts docker-compose.yml files into images that can be uploaded to
54
+ any docker image repository.
55
+ email:
56
+ - john.epperson@rockagile.io
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - README.md
62
+ - lib/capistrano/shiplane_deployers_capistrano_docker.rb
63
+ - lib/capistrano/shiplane_deployers_capistrano_docker/version.rb
64
+ - lib/capistrano/tasks/deployer.rake
65
+ - lib/capistrano/tasks/dockerhub.rake
66
+ - lib/shiplane/deployers/capistrano_docker/version.rb
67
+ homepage: https://github.com/kirillian/shiplane
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 2.3.1
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.7.7
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: A toolbox for converting developer docker-compose files into production-ready
91
+ images.
92
+ test_files: []