dlss-capistrano 3.11.0 → 4.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 +4 -4
- data/README.md +25 -11
- data/dlss-capistrano.gemspec +1 -1
- data/lib/dlss/capistrano/tasks/check_status.rake +23 -0
- data/lib/dlss/capistrano/tasks/remote_execute.rake +9 -0
- data/lib/dlss/capistrano/tasks/sneakers_systemd.rake +1 -9
- metadata +5 -4
- data/lib/dlss/capistrano/tasks/bundle_config.rake +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1702874c90a70b558db39872139922c1bc1f513813925c50c378cf3eac575f24
|
4
|
+
data.tar.gz: 1a4c30ef36c1ccf64c9883bd0b0cced6aee568958db25d74160c1d7e71ed025d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9ab79dc66765e0c794966b6e6969d060d8c3f8de8b9bcac19c659f0630da6a85b5ae8b474257f98fb71313ed103938dd2d1dbdb736ca34b15e421be928f5fc7
|
7
|
+
data.tar.gz: 427abdeb794947a38336829bcd5cd3ad9b7bc5b64f0e262f98cfc52bdc4485196a3fdfa74a30fe91150ba63fa856034dfc307fc6c87a39e433134d2e289540c5
|
data/README.md
CHANGED
@@ -6,20 +6,21 @@ This gem provides Capistrano deployment tasks used by Stanford Libraries' Digita
|
|
6
6
|
|
7
7
|
## Included Tasks
|
8
8
|
|
9
|
-
###
|
9
|
+
### Remote Execution
|
10
10
|
|
11
|
-
|
11
|
+
Sometimes you want to execute a command on all boxes in a given environment, and dlss-capistrano's got your back:
|
12
12
|
|
13
|
-
```
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
```shell
|
14
|
+
$ cap qa remote_execute["ps -ef | grep rolling | grep -v grep"]
|
15
|
+
00:00 remote_execute
|
16
|
+
ps -ef | grep rolling | grep -v grep
|
17
|
+
ps -ef | grep rolling | grep -v grep
|
18
|
+
dor-indexing-app-qa-a.stanford.edu:
|
19
|
+
dor_ind+ 9159 1 20 Feb18 ? 14:15:03 rolling index
|
20
|
+
dor-indexing-app-qa-b.stanford.edu:
|
21
|
+
dor_ind+ 29689 1 20 Feb18 ? 14:24:53 rolling index
|
19
22
|
```
|
20
23
|
|
21
|
-
Note that only `bundler2_config_use_hook` **must** be set in order to use this functionality.
|
22
|
-
|
23
24
|
### Sidekiq symlink
|
24
25
|
|
25
26
|
Every time the version of Sidekiq or Ruby changes, a corresponding Puppet PR must be made in order to update the XSendFilePath that allows Apache to access the bundled Sidekiq gem's assets. dlss-capistrano provides a hook to create a symlink to the bundled Sidekiq to avoid having to do this:
|
@@ -31,6 +32,19 @@ set :bundled_sidekiq_roles, [:app] # this is the default value
|
|
31
32
|
|
32
33
|
Set this in `config/deploy.rb` to automate the symlink creation, and then use `XSendFilePath /path/to/my/app/shared/bundled_sidekiq/web/assets` in Apache configuration (in Puppet).
|
33
34
|
|
35
|
+
### Status checking
|
36
|
+
|
37
|
+
**NOTE**: Requires that `curl` is installed on each server host the check is run on.
|
38
|
+
|
39
|
+
Use `cap ENV check_status` to hit the (*e.g.*, [okcomputer](https://github.com/sportngin/okcomputer)-based) status endpoint of your application. This is especially valuable with hosts that cannot be directly checked due to firewall rules.
|
40
|
+
|
41
|
+
By default, these checks run against all nodes with the `:web` role and hit the `/status/all` endpoint. These can be configured in `config/deploy.rb` (or `config/deploy/{ENV}.rb` if you need environment-specific variation):
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
set :check_status_roles, [:my_status_check_web_role]
|
45
|
+
set :check_status_path, '/my/status/check/endpoint'
|
46
|
+
```
|
47
|
+
|
34
48
|
### SSH
|
35
49
|
|
36
50
|
`cap ENV ssh` establishes an SSH connection to the host running in `ENV` environment, and changes into the current deployment directory
|
@@ -72,7 +86,7 @@ These tasks are intended to replace those provided by `capistrano-sidekiq` gem,
|
|
72
86
|
|
73
87
|
### Sneakers via systemd
|
74
88
|
|
75
|
-
`cap ENV sneakers_systemd:{
|
89
|
+
`cap ENV sneakers_systemd:{stop,start,restart}`: stops, starts, restarts Sneakers via systemd.
|
76
90
|
|
77
91
|
|
78
92
|
#### Capistrano role
|
data/dlss-capistrano.gemspec
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Capistrano plugin hook to set default values
|
2
|
+
namespace :load do
|
3
|
+
task :defaults do
|
4
|
+
set :check_status_roles, fetch(:check_status_roles, [:web])
|
5
|
+
set :check_status_path, fetch(:check_status_path, '/status/all')
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
desc 'Run status checks'
|
10
|
+
task :check_status do
|
11
|
+
on roles fetch(:check_status_roles), in: :sequence do |host|
|
12
|
+
status_url = "https://#{host}#{fetch(:check_status_path)}"
|
13
|
+
|
14
|
+
info "Checking status at #{status_url}"
|
15
|
+
status_body = capture("curl #{status_url}")
|
16
|
+
|
17
|
+
if status_body.match?(/FAILED/)
|
18
|
+
error status_body.lines.grep(/FAILED/).join
|
19
|
+
else
|
20
|
+
info SSHKit::Color.new($stdout).colorize('All checks passed!', :green)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
desc "execute command on all servers"
|
2
|
+
task :remote_execute, :command do |_task, args|
|
3
|
+
raise ArgumentError, 'remote_execute task requires an argument' unless args[:command]
|
4
|
+
|
5
|
+
on roles(:all) do |host|
|
6
|
+
info args[:command] if fetch(:log_level) == :debug
|
7
|
+
info "#{host}:\n#{capture(args[:command])}"
|
8
|
+
end
|
9
|
+
end
|
@@ -18,15 +18,7 @@ namespace :sneakers_systemd do
|
|
18
18
|
task :add_hooks do
|
19
19
|
after 'deploy:failed', 'sneakers_systemd:restart'
|
20
20
|
after 'deploy:published', 'sneakers_systemd:start'
|
21
|
-
after 'deploy:starting', 'sneakers_systemd:
|
22
|
-
after 'deploy:updated', 'sneakers_systemd:stop'
|
23
|
-
end
|
24
|
-
|
25
|
-
desc 'Stop workers from picking up new jobs'
|
26
|
-
task :quiet do
|
27
|
-
on roles fetch(:sneakers_systemd_role) do
|
28
|
-
sudo :systemctl, 'reload', 'sneakers', raise_on_non_zero_exit: false
|
29
|
-
end
|
21
|
+
after 'deploy:starting', 'sneakers_systemd:stop'
|
30
22
|
end
|
31
23
|
|
32
24
|
desc 'Stop running workers gracefully'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dlss-capistrano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-04-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
@@ -87,9 +87,10 @@ files:
|
|
87
87
|
- lib/dlss/capistrano.rb
|
88
88
|
- lib/dlss/capistrano/resque_pool.rb
|
89
89
|
- lib/dlss/capistrano/resque_pool/tasks/resque_pool.rake
|
90
|
-
- lib/dlss/capistrano/tasks/bundle_config.rake
|
91
90
|
- lib/dlss/capistrano/tasks/bundled_sidekiq.rake
|
91
|
+
- lib/dlss/capistrano/tasks/check_status.rake
|
92
92
|
- lib/dlss/capistrano/tasks/deployed_branch.rake
|
93
|
+
- lib/dlss/capistrano/tasks/remote_execute.rake
|
93
94
|
- lib/dlss/capistrano/tasks/sidekiq_systemd.rake
|
94
95
|
- lib/dlss/capistrano/tasks/sneakers_systemd.rake
|
95
96
|
- lib/dlss/capistrano/tasks/ssh.rake
|
@@ -114,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
115
|
- !ruby/object:Gem::Version
|
115
116
|
version: 1.3.6
|
116
117
|
requirements: []
|
117
|
-
rubygems_version: 3.
|
118
|
+
rubygems_version: 3.2.32
|
118
119
|
signing_key:
|
119
120
|
specification_version: 4
|
120
121
|
summary: Capistrano recipes for use in SUL/DLSS projects
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# These tasks exist because capistrano-bundler does not yet have a built-in
|
4
|
-
# mechanism for configuring bundler 2 without deprecation warnings. We can dump
|
5
|
-
# this if/when https://github.com/capistrano/bundler/issues/115 is resolved.
|
6
|
-
|
7
|
-
def default_bundle_path
|
8
|
-
Pathname.new("#{shared_path}/bundle")
|
9
|
-
end
|
10
|
-
|
11
|
-
namespace :load do
|
12
|
-
task :defaults do
|
13
|
-
# This provides opt-in behavior. Do nothing if not requested.
|
14
|
-
set :bundler2_config_use_hook, fetch(:bundler2_config_use_hook, false)
|
15
|
-
set :bundler2_config_roles, fetch(:bundler2_config_roles, [:app])
|
16
|
-
set :bundler2_config_deployment, fetch(:bundler2_config_deployment, true)
|
17
|
-
set :bundler2_config_without, fetch(:bundler2_config_without, 'development:test')
|
18
|
-
# NOTE: `shared_path` is not defined at this point, so we can't set the default value to `default_bundle_path`
|
19
|
-
set :bundler2_config_path, fetch(:bundler2_config_path, nil)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Integrate bundle config hook into Capistrano
|
24
|
-
namespace :deploy do
|
25
|
-
before :starting, :add_bundler2_config_hook do
|
26
|
-
invoke 'bundler2:add_hook' if fetch(:bundler2_config_use_hook)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
namespace :bundler2 do
|
31
|
-
# NOTE: no `desc` here to avoid publishing this task in the `cap -T` list
|
32
|
-
task :add_hook do
|
33
|
-
# Override capistrano-bundler settings
|
34
|
-
# HT: https://github.com/capistrano/bundler/issues/115#issuecomment-616570236
|
35
|
-
set :bundle_flags, '--quiet' # this unsets --deployment, see details in config_bundler task details
|
36
|
-
set :bundle_path, nil
|
37
|
-
set :bundle_without, nil
|
38
|
-
|
39
|
-
before 'bundler:install', 'bundler2:config'
|
40
|
-
end
|
41
|
-
|
42
|
-
# NOTE: This task lacks a `desc` to avoid publishing it, since we do not
|
43
|
-
# foresee needing to run this task manually. It should run via hook.
|
44
|
-
#
|
45
|
-
# Configure bundler 2 without using deprecated arguments (overrides capistrano-bundler
|
46
|
-
task :config do
|
47
|
-
on roles fetch(:bundler2_config_roles) do
|
48
|
-
execute "bundle config --local deployment #{fetch(:bundler2_config_deployment)}"
|
49
|
-
execute "bundle config --local without '#{fetch(:bundler2_config_without)}'"
|
50
|
-
execute "bundle config --local path #{fetch(:bundler2_config_path) || default_bundle_path}"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|