capistrano-deploylock 0.0.1 → 0.0.2
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 +45 -1
- data/capistrano-deploylock.gemspec +2 -0
- data/lib/capistrano/deploylock.rb +44 -40
- data/lib/capistrano/deploylock/version.rb +1 -1
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb6c57e60fd26e74432dce9a91e0d3356b623a5c
|
4
|
+
data.tar.gz: a4b44a64b340ac14e56e42cb69070a1f68f25676
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f0e0af14d52dae19ed6e29d7a79fe43475b2d048321b39826f346e2484f60a6d4598bd59b0c89ad0a9945da8a768083ce4292349ac2da6c6da3c78bb9e5c653
|
7
|
+
data.tar.gz: d10a993959109063058bf1f1fd5d349c192151137c9e527eb7135e0e56af9bad095610007c792ccde8f2850b5b48a3b8ca6267b5ecdb8f7976497f9a99ca18a4
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Capistrano::Deploylock
|
2
2
|
|
3
|
-
|
3
|
+
[](http://badge.fury.io/rb/capistrano-deploylock)
|
4
|
+
|
5
|
+
デプロイした環境を一日だけロックする
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -29,6 +31,48 @@ before "deploy:lock:start", "deploy:lock:check"
|
|
29
31
|
before "deploy", "deploy:lock:start"
|
30
32
|
~~~
|
31
33
|
|
34
|
+
## なぜ作ったのか
|
35
|
+
1. デプロイしていいか聞きまわるの面倒くさい とはいえ一人ずつサーバ作って管理するというのも面倒
|
36
|
+
1. デプロイしていいかその環境自体に聞けばイイジャンという発想
|
37
|
+
1. 要はlockファイルさえなければあらゆる環境に自由にデプロイしたい. lockファイル作っとかないほうが悪い状態が効率が良い
|
38
|
+
|
39
|
+
## 機能仕様
|
40
|
+
1. `` cap deploy`` 後、 自分以外のユーザが24hデプロイできないようになる
|
41
|
+
1. `` cap deploy:lock:end`` で取り消し可能
|
42
|
+
|
43
|
+
## 詳細仕様
|
44
|
+
1. `` cap deploy`` 時にdeploy_lock.ymlファイルをshared/systemに作成(`` cap deploy:lock:start`` フック)
|
45
|
+
1. `` cap deploy:lock:start `` 時にdeploy_lock.ymlファイルがshared/systemにないか確認(`` cap deploy:lock:start`` フック)
|
46
|
+
1. lockファイルが存在する場合
|
47
|
+
* 自分が作ったやつなら無視して、`` expired_at`` を今から24h後に更新
|
48
|
+
* 他人が作ったやつで`` expired_at > Time.now `` ならロック
|
49
|
+
|
50
|
+
* deploy_lock.ymlにはデプロイしたuser名と, 現在時間の24時間後が、expired_at時間として入る
|
51
|
+
|
52
|
+
|
53
|
+
## cmd
|
54
|
+
|
55
|
+
|
56
|
+
* ロック開始
|
57
|
+
|
58
|
+
~~~
|
59
|
+
% bundle exec cap $STAGE deploy:lock:start
|
60
|
+
~~~
|
61
|
+
|
62
|
+
* ロック終了
|
63
|
+
|
64
|
+
~~~
|
65
|
+
% bundle exec cap $STAGE deploy:lock:end
|
66
|
+
~~~
|
67
|
+
|
68
|
+
* ロック確認
|
69
|
+
|
70
|
+
~~~
|
71
|
+
% bundle exec cap $STAGE deploy:lock:check
|
72
|
+
~~~
|
73
|
+
|
74
|
+
|
75
|
+
|
32
76
|
## Contributing
|
33
77
|
|
34
78
|
1. Fork it ( https://github.com/[my-github-username]/capistrano-deploylock/fork )
|
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.required_ruby_version = '~> 2.1.0'
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
25
|
spec.add_development_dependency "minitest"
|
@@ -36,9 +36,13 @@ module Capistrano::Deploylock
|
|
36
36
|
`git config --get user.name`
|
37
37
|
end
|
38
38
|
|
39
|
+
def remove_local_file
|
40
|
+
FileUtils.rm deploy_lock_file_local_path, force: true
|
41
|
+
end
|
42
|
+
|
39
43
|
namespace :deploy do
|
40
44
|
namespace :lock do
|
41
|
-
|
45
|
+
desc 'デプロイロックを確認する'
|
42
46
|
task :start, roles: :web do
|
43
47
|
on_rollback { run "rm -f #{deploy_lock_remote_path}" }
|
44
48
|
require 'erb'
|
@@ -54,57 +58,57 @@ module Capistrano::Deploylock
|
|
54
58
|
puts "\n**** [LOCKED] #{rails_env}はロックされ、有効期限内が設定されました. **** "
|
55
59
|
puts "\n locked_user : #{user}"
|
56
60
|
puts " expired_at : #{expired_at}\n\n"
|
57
|
-
|
58
|
-
erb = ERB.new(File.read("#{deploy_lock_template_path}.erb")).result(binding)
|
59
|
-
put erb, "#{deploy_lock_remote_path}", mode: 0644
|
60
|
-
lock_start_log
|
61
|
-
end
|
62
61
|
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
erb = ERB.new(File.read("#{deploy_lock_template_path}.erb")).result(binding)
|
63
|
+
put erb, "#{deploy_lock_remote_path}", mode: 0644
|
64
|
+
lock_start_log
|
65
|
+
end
|
66
|
+
|
67
|
+
desc 'デプロイロックを解除する'
|
68
|
+
task :end, roles: :web do
|
69
|
+
lock_force_end(true)
|
70
|
+
end
|
71
|
+
|
72
|
+
desc 'デプロイロックを設定する'
|
73
|
+
task :check, roles: :web do
|
74
|
+
unless remote_file_exists?(deploy_lock_remote_path)
|
75
|
+
puts '[SKIP] ロックファイルがありません.'
|
76
|
+
next
|
66
77
|
end
|
67
78
|
|
68
|
-
|
69
|
-
|
70
|
-
unless remote_file_exists?(deploy_lock_remote_path)
|
71
|
-
puts '[SKIP] ロックファイルがありません.'
|
72
|
-
next
|
73
|
-
end
|
74
|
-
|
75
|
-
FileUtils.rm deploy_lock_file_local_path, force: true
|
76
|
-
FileUtils.mkdir_p './public/system'
|
79
|
+
FileUtils.rm deploy_lock_file_local_path, force: true
|
80
|
+
FileUtils.mkdir_p './public/system'
|
77
81
|
|
78
|
-
|
79
|
-
|
82
|
+
get deploy_lock_remote_path, deploy_lock_file_local_path
|
83
|
+
lock = YAML.load_file deploy_lock_file_local_path
|
80
84
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
85
|
+
if Time.now > lock["expired_at"]
|
86
|
+
puts '[SKIP] ロックファイルの設定期限が過ぎています.'
|
87
|
+
remove_local_file
|
88
|
+
lock_force_end(false)
|
89
|
+
next
|
90
|
+
end
|
86
91
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
+
current_user = git_config_user_name.chomp
|
93
|
+
if lock["user"] == current_user
|
94
|
+
puts '[SKIP] あなたのロックファイルです.'
|
95
|
+
remove_local_file
|
96
|
+
next
|
97
|
+
end
|
92
98
|
|
93
|
-
|
94
|
-
|
95
|
-
|
99
|
+
puts "\n**** [LOCKED] #{rails_env}はロックされ、有効期限内です. **** "
|
100
|
+
puts "\n locked_user : #{lock["user"]}"
|
101
|
+
puts " expired_at : #{lock["expired_at"]}\n\n"
|
96
102
|
|
97
|
-
|
98
|
-
|
103
|
+
puts "ロックは下記のコマンドで取り消しできます。"
|
104
|
+
puts "bundle exedc cap $STAGENAME deploy:lock:end"
|
99
105
|
|
100
|
-
|
101
|
-
|
102
|
-
|
106
|
+
remove_local_file
|
107
|
+
run "hostname; exit 1"
|
108
|
+
end
|
103
109
|
end
|
104
110
|
end
|
105
111
|
end
|
106
|
-
|
107
|
-
|
108
112
|
end
|
109
113
|
end
|
110
114
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-deploylock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tetuyoko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -102,9 +102,9 @@ require_paths:
|
|
102
102
|
- lib
|
103
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
|
-
- - "
|
105
|
+
- - "~>"
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version:
|
107
|
+
version: 2.1.0
|
108
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
110
|
- - ">="
|
@@ -120,4 +120,3 @@ test_files:
|
|
120
120
|
- test/minitest_helper.rb
|
121
121
|
- test/test_capistrano.rb
|
122
122
|
- test/test_capistrano/deploylock.rb
|
123
|
-
has_rdoc:
|