jenkins-capistrano 0.0.7 → 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.
Files changed (47) hide show
  1. data/.gitignore +73 -16
  2. data/Gemfile.lock +80 -0
  3. data/README.md +169 -56
  4. data/Vagrantfile +23 -0
  5. data/example/Gemfile +3 -1
  6. data/example/README.md +13 -17
  7. data/example/config/deploy.rb +8 -12
  8. data/example/config/deploy/develop.rb +5 -3
  9. data/example/config/deploy/production.rb +13 -3
  10. data/example/config/deploy/staging.rb +13 -4
  11. data/example/config/jenkins/nodes/develop/dev-slave01.xml.erb +33 -0
  12. data/example/config/jenkins/nodes/production/prod-slave01.xml.erb +33 -0
  13. data/example/config/jenkins/nodes/production/prod-slave02.xml.erb +33 -0
  14. data/example/config/jenkins/nodes/production/prod-slave03.xml.erb +33 -0
  15. data/example/config/jenkins/nodes/staging/stg-slave01.xml.erb +33 -0
  16. data/example/config/jenkins/nodes/staging/stg-slave02.xml.erb +33 -0
  17. data/example/config/jenkins/nodes/staging/stg-slave03.xml.erb +33 -0
  18. data/example/script/bootstrap +1 -2
  19. data/features/config_jobs.feature +162 -0
  20. data/features/config_nodes.feature +121 -0
  21. data/features/config_views.feature +136 -0
  22. data/features/help.feature +83 -0
  23. data/features/step_definitions/jenkins_steps.rb +19 -0
  24. data/features/support/env.rb +5 -0
  25. data/features/support/jenkins_helper.rb +113 -0
  26. data/jenkins-capistrano.gemspec +4 -3
  27. data/lib/jenkins-capistrano.rb +2 -215
  28. data/lib/jenkins-capistrano/configurator.rb +87 -0
  29. data/lib/jenkins-capistrano/tasks.rb +112 -0
  30. data/lib/jenkins-capistrano/template.rb +20 -0
  31. data/lib/jenkins-capistrano/version.rb +1 -1
  32. metadata +87 -41
  33. checksums.yaml +0 -7
  34. data/example/config/jenkins/jobs/.gitkeep +0 -0
  35. data/example/config/jenkins/nodes/develop/dev-slave01.json +0 -17
  36. data/example/config/jenkins/nodes/production/prod-slave01.json +0 -17
  37. data/example/config/jenkins/nodes/production/prod-slave02.json +0 -17
  38. data/example/config/jenkins/nodes/production/prod-slave03.json +0 -17
  39. data/example/config/jenkins/nodes/staging/stg-slave01.json +0 -17
  40. data/example/config/jenkins/nodes/staging/stg-slave02.json +0 -17
  41. data/example/config/jenkins/nodes/staging/stg-slave03.json +0 -17
  42. data/lib/jenkins-capistrano/client.rb +0 -66
  43. data/lib/jenkins-capistrano/client/job.rb +0 -47
  44. data/lib/jenkins-capistrano/client/node.rb +0 -103
  45. data/lib/jenkins-capistrano/client/plugin_manager.rb +0 -51
  46. data/lib/jenkins-capistrano/client/update_center.rb +0 -43
  47. data/lib/jenkins-capistrano/client/view.rb +0 -40
@@ -1,5 +1,5 @@
1
1
  module Jenkins
2
2
  module Capistrano
3
- VERSION = "0.0.7"
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,83 +1,110 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins-capistrano
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - cynipe
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-29 00:00:00.000000000 Z
12
+ date: 2014-07-11 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: capistrano
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - <
18
20
  - !ruby/object:Gem::Version
19
- version: '0'
21
+ version: 3.0.0
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - <
25
28
  - !ruby/object:Gem::Version
26
- version: '0'
29
+ version: 3.0.0
27
30
  - !ruby/object:Gem::Dependency
28
- name: httparty
31
+ name: jenkins_api_client
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - ~>
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
- version: 0.8.3
37
+ version: 1.0.0
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - ~>
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
- version: 0.8.3
45
+ version: 1.0.0
41
46
  - !ruby/object:Gem::Dependency
42
- name: hpricot
47
+ name: rake
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - '>='
51
+ - - ! '>='
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
- type: :runtime
54
+ type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - '>='
59
+ - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  - !ruby/object:Gem::Dependency
56
- name: rake
63
+ name: pry
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - '>='
67
+ - - ! '>='
60
68
  - !ruby/object:Gem::Version
61
69
  version: '0'
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - '>='
75
+ - - ! '>='
67
76
  - !ruby/object:Gem::Version
68
77
  version: '0'
69
78
  - !ruby/object:Gem::Dependency
70
- name: pry
79
+ name: tapp
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: aruba
71
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
72
98
  requirements:
73
- - - '>='
99
+ - - ! '>='
74
100
  - !ruby/object:Gem::Version
75
101
  version: '0'
76
102
  type: :development
77
103
  prerelease: false
78
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
79
106
  requirements:
80
- - - '>='
107
+ - - ! '>='
81
108
  - !ruby/object:Gem::Version
82
109
  version: '0'
83
110
  description: The capistrano tasks for Jenkins CI Server
@@ -89,9 +116,11 @@ extra_rdoc_files: []
89
116
  files:
90
117
  - .gitignore
91
118
  - Gemfile
119
+ - Gemfile.lock
92
120
  - LICENSE
93
121
  - README.md
94
122
  - Rakefile
123
+ - Vagrantfile
95
124
  - example/.gitignore
96
125
  - example/Capfile
97
126
  - example/Gemfile
@@ -101,47 +130,64 @@ files:
101
130
  - example/config/deploy/develop.rb
102
131
  - example/config/deploy/production.rb
103
132
  - example/config/deploy/staging.rb
104
- - example/config/jenkins/jobs/.gitkeep
105
133
  - example/config/jenkins/jobs/hello.xml
106
- - example/config/jenkins/nodes/develop/dev-slave01.json
107
- - example/config/jenkins/nodes/production/prod-slave01.json
108
- - example/config/jenkins/nodes/production/prod-slave02.json
109
- - example/config/jenkins/nodes/production/prod-slave03.json
110
- - example/config/jenkins/nodes/staging/stg-slave01.json
111
- - example/config/jenkins/nodes/staging/stg-slave02.json
112
- - example/config/jenkins/nodes/staging/stg-slave03.json
134
+ - example/config/jenkins/nodes/develop/dev-slave01.xml.erb
135
+ - example/config/jenkins/nodes/production/prod-slave01.xml.erb
136
+ - example/config/jenkins/nodes/production/prod-slave02.xml.erb
137
+ - example/config/jenkins/nodes/production/prod-slave03.xml.erb
138
+ - example/config/jenkins/nodes/staging/stg-slave01.xml.erb
139
+ - example/config/jenkins/nodes/staging/stg-slave02.xml.erb
140
+ - example/config/jenkins/nodes/staging/stg-slave03.xml.erb
113
141
  - example/script/bootstrap
114
142
  - example/script/deploy
143
+ - features/config_jobs.feature
144
+ - features/config_nodes.feature
145
+ - features/config_views.feature
146
+ - features/help.feature
147
+ - features/step_definitions/jenkins_steps.rb
148
+ - features/support/env.rb
149
+ - features/support/jenkins_helper.rb
115
150
  - jenkins-capistrano.gemspec
116
151
  - lib/jenkins-capistrano.rb
117
- - lib/jenkins-capistrano/client.rb
118
- - lib/jenkins-capistrano/client/job.rb
119
- - lib/jenkins-capistrano/client/node.rb
120
- - lib/jenkins-capistrano/client/plugin_manager.rb
121
- - lib/jenkins-capistrano/client/update_center.rb
122
- - lib/jenkins-capistrano/client/view.rb
152
+ - lib/jenkins-capistrano/configurator.rb
153
+ - lib/jenkins-capistrano/tasks.rb
154
+ - lib/jenkins-capistrano/template.rb
123
155
  - lib/jenkins-capistrano/version.rb
124
156
  homepage: https://github.com/cynipe/jenkins-capistrano
125
157
  licenses: []
126
- metadata: {}
127
158
  post_install_message:
128
159
  rdoc_options: []
129
160
  require_paths:
130
161
  - lib
131
162
  required_ruby_version: !ruby/object:Gem::Requirement
163
+ none: false
132
164
  requirements:
133
- - - '>='
165
+ - - ! '>='
134
166
  - !ruby/object:Gem::Version
135
167
  version: '0'
168
+ segments:
169
+ - 0
170
+ hash: -1694678970093714243
136
171
  required_rubygems_version: !ruby/object:Gem::Requirement
172
+ none: false
137
173
  requirements:
138
- - - '>='
174
+ - - ! '>='
139
175
  - !ruby/object:Gem::Version
140
176
  version: '0'
177
+ segments:
178
+ - 0
179
+ hash: -1694678970093714243
141
180
  requirements: []
142
181
  rubyforge_project:
143
- rubygems_version: 2.0.3
182
+ rubygems_version: 1.8.23
144
183
  signing_key:
145
- specification_version: 4
184
+ specification_version: 3
146
185
  summary: ''
147
- test_files: []
186
+ test_files:
187
+ - features/config_jobs.feature
188
+ - features/config_nodes.feature
189
+ - features/config_views.feature
190
+ - features/help.feature
191
+ - features/step_definitions/jenkins_steps.rb
192
+ - features/support/env.rb
193
+ - features/support/jenkins_helper.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 08e7f0caa243bf076670aee6c701dea64f471263
4
- data.tar.gz: c4bf4f53e44317c8c51d503e6d68343a5deeb05f
5
- SHA512:
6
- metadata.gz: 42bf4c7d1b3d24563f8844bcfe553116c464260748aa403bd4bd63b2c6eef2b71f93ed5cdeb478c0e3a805e2b7ce055f4829f8cef31e41cefe78d5d50195c7c0
7
- data.tar.gz: a4af671c54adbeb70e9c624eef73b057f44aef1c9b0ac4b7200507defbea1daffea715cf1646d2fb25f6328fedc6b64dae6db1970052fb720eb7e803d634407e
File without changes
@@ -1,17 +0,0 @@
1
- {
2
- "description" : "Slave1",
3
- "slave_fs" : "/home/jenkins",
4
- "executors" : 5,
5
- "exclusive" : true,
6
- "labels" : "hello",
7
- "slave_host" : "dev-slave01.local",
8
- "slave_port" : 22,
9
- "slave_user" : "jenkins",
10
- "master_key" : "/var/lib/jenkins/.ssh/id_rsa",
11
- "jvm_options" : "-Dfile.encoding=UTF-8",
12
- "env_vars": {
13
- "LANG" : "ja_JP.UTF-8",
14
- "ENVIRONMENT" : "production",
15
- }
16
- }
17
-
@@ -1,17 +0,0 @@
1
- {
2
- "description" : "Slave1",
3
- "slave_fs" : "/home/jenkins",
4
- "executors" : 5,
5
- "exclusive" : true,
6
- "labels" : "hello",
7
- "slave_host" : "prod-slave01.local",
8
- "slave_port" : 22,
9
- "slave_user" : "jenkins",
10
- "master_key" : "/var/lib/jenkins/.ssh/id_rsa",
11
- "jvm_options" : "-Dfile.encoding=UTF-8",
12
- "env_vars": {
13
- "LANG" : "ja_JP.UTF-8",
14
- "ENVIRONMENT" : "production",
15
- }
16
- }
17
-
@@ -1,17 +0,0 @@
1
- {
2
- "description" : "Slave1",
3
- "slave_fs" : "/home/jenkins",
4
- "executors" : 5,
5
- "exclusive" : true,
6
- "labels" : "hello",
7
- "slave_host" : "prod-slave02.local",
8
- "slave_port" : 22,
9
- "slave_user" : "jenkins",
10
- "master_key" : "/var/lib/jenkins/.ssh/id_rsa",
11
- "jvm_options" : "-Dfile.encoding=UTF-8",
12
- "env_vars": {
13
- "LANG" : "ja_JP.UTF-8",
14
- "ENVIRONMENT" : "production",
15
- }
16
- }
17
-
@@ -1,17 +0,0 @@
1
- {
2
- "description" : "Slave1",
3
- "slave_fs" : "/home/jenkins",
4
- "executors" : 5,
5
- "exclusive" : true,
6
- "labels" : "hello",
7
- "slave_host" : "prod-slave03.local",
8
- "slave_port" : 22,
9
- "slave_user" : "jenkins",
10
- "master_key" : "/var/lib/jenkins/.ssh/id_rsa",
11
- "jvm_options" : "-Dfile.encoding=UTF-8",
12
- "env_vars": {
13
- "LANG" : "ja_JP.UTF-8",
14
- "ENVIRONMENT" : "production",
15
- }
16
- }
17
-
@@ -1,17 +0,0 @@
1
- {
2
- "description" : "Slave1",
3
- "slave_fs" : "/home/jenkins",
4
- "executors" : 5,
5
- "exclusive" : true,
6
- "labels" : "hello",
7
- "slave_host" : "stg-slave01.local",
8
- "slave_port" : 22,
9
- "slave_user" : "jenkins",
10
- "master_key" : "/var/lib/jenkins/.ssh/id_rsa",
11
- "jvm_options" : "-Dfile.encoding=UTF-8",
12
- "env_vars": {
13
- "LANG" : "ja_JP.UTF-8",
14
- "ENVIRONMENT" : "staging",
15
- }
16
- }
17
-
@@ -1,17 +0,0 @@
1
- {
2
- "description" : "Slave2",
3
- "slave_fs" : "/home/jenkins",
4
- "executors" : 5,
5
- "exclusive" : true,
6
- "labels" : "hello",
7
- "slave_host" : "stg-slave02.local",
8
- "slave_port" : 22,
9
- "slave_user" : "jenkins",
10
- "master_key" : "/var/lib/jenkins/.ssh/id_rsa",
11
- "jvm_options" : "-Dfile.encoding=UTF-8",
12
- "env_vars": {
13
- "LANG" : "ja_JP.UTF-8",
14
- "ENVIRONMENT" : "staging",
15
- }
16
- }
17
-
@@ -1,17 +0,0 @@
1
- {
2
- "description" : "Slave3",
3
- "slave_fs" : "/home/jenkins",
4
- "executors" : 5,
5
- "exclusive" : true,
6
- "labels" : "hello",
7
- "slave_host" : "stg-slave03.local",
8
- "slave_port" : 22,
9
- "slave_user" : "jenkins",
10
- "master_key" : "/var/lib/jenkins/.ssh/id_rsa",
11
- "jvm_options" : "-Dfile.encoding=UTF-8",
12
- "env_vars": {
13
- "LANG" : "ja_JP.UTF-8",
14
- "ENVIRONMENT" : "staging",
15
- }
16
- }
17
-
@@ -1,66 +0,0 @@
1
- require 'httparty'
2
- require 'cgi'
3
- require 'json'
4
- require 'jenkins-capistrano/client/node'
5
- require 'jenkins-capistrano/client/job'
6
- require 'jenkins-capistrano/client/view'
7
- require 'jenkins-capistrano/client/update_center'
8
- require 'jenkins-capistrano/client/plugin_manager'
9
-
10
- module Jenkins
11
- class Client
12
- include HTTParty
13
-
14
- headers 'content-type' => 'application/json'
15
- format :json
16
- follow_redirects false
17
-
18
- ServerError = Class.new(Exception)
19
- TimeoutError = Class.new(Exception)
20
-
21
- def initialize(host, opts = {})
22
- self.class.base_uri host
23
- self.class.basic_auth opts[:username], opts[:password] if opts[:username] and opts[:password]
24
- end
25
-
26
- def parse_error_message(response)
27
- require "hpricot"
28
- doc = Hpricot(response.body)
29
- error_msg = doc.search("td#main-panel p")
30
- error_msg.inner_text.empty? ? doc.search("body").text : error_msg
31
- end
32
-
33
- def session
34
- self.class.get('/api/json?tree=nothing').headers['X-JENKINS-SESSION']
35
- rescue Errno::ECONNRESET, Errno::ECONNREFUSED => e
36
- nil
37
- end
38
-
39
- def safe_restart!(timeout = 60 * 5)
40
- if block_given?
41
- due = Time.now + timeout
42
- origin = session
43
- end
44
-
45
- res = self.class.post("/safeRestart")
46
- raise ServerError, parse_error_message(res) unless res.code.to_i == 302
47
- return unless block_given?
48
-
49
- loop do
50
- new = session
51
- break if new and new != origin
52
- yield
53
- raise TimeoutError, "Restating timeout: #{timeout}" if Time.now > due
54
- sleep 5
55
- end
56
- end
57
-
58
- include Node
59
- include Job
60
- include View
61
- include UpdateCenter
62
- include PluginManager
63
-
64
- end
65
- end
66
-
@@ -1,47 +0,0 @@
1
-
2
- module Jenkins
3
- class Client
4
- module Job
5
-
6
- def job_names
7
- self.class.get("/api/json")['jobs'].map {|job| job['name'] }
8
- end
9
-
10
- def create_job(name, config)
11
- res = self.class.post("/createItem/api/xml?name=#{CGI.escape(name)}", xml_body(config))
12
- raise ServerError, parse_error_message(res) unless res.code.to_i == 200
13
- rescue => e
14
- raise ServerError, "Failed to create job: #{name}, make sure you have specified auth info properly"
15
- end
16
-
17
- def update_job(name, config)
18
- res = self.class.post("/job/#{CGI.escape(name)}/config.xml", xml_body(config))
19
- raise ServerError, parse_error_message(res) unless res.code.to_i == 200
20
- rescue => e
21
- raise ServerError, "Failed to create job: #{name}, make sure you have specified auth info properly"
22
- end
23
-
24
- def create_or_update_job(name, config)
25
- job_names.include?(name) ? update_job(name, config) : create_job(name, config)
26
- end
27
-
28
- def disable_job(name)
29
- res = self.class.post("/job/#{CGI.escape(name)}/disable")
30
- raise ServerError, parse_error_message(res) unless res.code.to_i == 200 || res.code.to_i == 302
31
- rescue => e
32
- raise ServerError, "Failed to create job: #{name}, make sure you have specified auth info properly"
33
- end
34
-
35
- private
36
- def xml_body(xml_str)
37
- {
38
- :body => xml_str,
39
- :format => :xml,
40
- :headers => { 'content-type' => 'application/xml' }
41
- }
42
- end
43
-
44
- end
45
- end
46
- end
47
-