jenkins-builder 0.2.2 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8539764b2a462cde75417d8d87ce5248ad38f1804dfafc29cda15d6f450c8ac
4
- data.tar.gz: a54a9fc99b568d807f20394adfd4209f926b8da951ddb5fc961056261932d76f
3
+ metadata.gz: e02900cebd1b3529e65898dda5aca6e2500f12a2cee552f7a219bc415d8f5721
4
+ data.tar.gz: de6ecb61d2bd8fab3c4dcd4efa783c9e0ab3386e2192b9244f580887571f4a8a
5
5
  SHA512:
6
- metadata.gz: aa33092a43f0d46d1a8ecad68b2db695674def411296a0e2616af5314c17088bfd84f93d29468c9690b411445e3c4b14ccefeac5279815f8a30bd0fbdaa432df
7
- data.tar.gz: 81069b1a9c51907933babc709871e8fd00a98199c6bfaec38800971fea4cd9364421d7200995fb08e84bc4d5933b168da40ca52db21dadbc5cc2d309149ae863
6
+ metadata.gz: e2e9c966bcfa4b663cb22447a502bf91a93621407b189ec8edefc687aaf6edf10cfd170a00abb45a5c9d03f2ae7ee96d60b1a2a40b4b0a8a203ef7e8c4af4978
7
+ data.tar.gz: 8db0ddd35393efad96e3bb122f952d6a95dd4d470632d3f470512d4a778e7f202d7a63e2124cbb99474d41986ae97d0e22accd8ad79aad1641616a9bca28ed36
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jenkins-builder (0.2.2)
4
+ jenkins-builder (0.3.0)
5
+ ferrum (~> 0.9)
5
6
  jenkins_api_client (~> 1.5.3)
6
7
  pastel (~> 0.7.2)
7
8
  security (~> 0.1.3)
@@ -11,10 +12,20 @@ PATH
11
12
  GEM
12
13
  remote: https://gems.ruby-china.com/
13
14
  specs:
15
+ addressable (2.7.0)
16
+ public_suffix (>= 2.0.2, < 5.0)
14
17
  byebug (10.0.2)
18
+ chef-utils (16.3.38)
19
+ cliver (0.3.2)
15
20
  coderay (1.1.2)
21
+ concurrent-ruby (1.1.6)
16
22
  diff-lcs (1.3)
17
- equatable (0.5.0)
23
+ equatable (0.6.1)
24
+ ferrum (0.9)
25
+ addressable (~> 2.5)
26
+ cliver (~> 0.3)
27
+ concurrent-ruby (~> 1.1)
28
+ websocket-driver (>= 0.6, < 0.8)
18
29
  jenkins_api_client (1.5.3)
19
30
  json (>= 1.0)
20
31
  mixlib-shellout (>= 1.1.0)
@@ -22,15 +33,16 @@ GEM
22
33
  socksify (>= 1.7.0)
23
34
  terminal-table (>= 1.4.0)
24
35
  thor (>= 0.16.0)
25
- json (2.3.0)
36
+ json (2.3.1)
26
37
  method_source (0.9.1)
27
38
  mini_portile2 (2.4.0)
28
- mixlib-shellout (2.4.0)
29
- nokogiri (1.10.9)
39
+ mixlib-shellout (3.1.2)
40
+ chef-utils
41
+ nokogiri (1.10.10)
30
42
  mini_portile2 (~> 2.4.0)
31
- pastel (0.7.2)
32
- equatable (~> 0.5.0)
33
- tty-color (~> 0.4.0)
43
+ pastel (0.7.4)
44
+ equatable (~> 0.6)
45
+ tty-color (~> 0.5)
34
46
  pry (0.11.3)
35
47
  coderay (~> 1.1.0)
36
48
  method_source (~> 0.9.0)
@@ -40,6 +52,7 @@ GEM
40
52
  pry-doc (0.13.4)
41
53
  pry (~> 0.11)
42
54
  yard (~> 0.9.11)
55
+ public_suffix (4.0.5)
43
56
  rake (10.5.0)
44
57
  rspec (3.8.0)
45
58
  rspec-core (~> 3.8.0)
@@ -59,11 +72,14 @@ GEM
59
72
  terminal-table (1.8.0)
60
73
  unicode-display_width (~> 1.1, >= 1.1.1)
61
74
  thor (0.20.3)
62
- tty-color (0.4.3)
63
- tty-cursor (0.6.0)
75
+ tty-color (0.5.1)
76
+ tty-cursor (0.7.1)
64
77
  tty-spinner (0.8.0)
65
78
  tty-cursor (>= 0.5.0)
66
79
  unicode-display_width (1.7.0)
80
+ websocket-driver (0.7.3)
81
+ websocket-extensions (>= 0.1.0)
82
+ websocket-extensions (0.1.5)
67
83
  yard (0.9.24)
68
84
 
69
85
  PLATFORMS
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.add_dependency 'security', '~> 0.1.3'
36
36
  spec.add_dependency 'pastel', '~> 0.7.2'
37
37
  spec.add_dependency 'tty-spinner', '~> 0.8.0'
38
+ spec.add_dependency 'ferrum', '~> 0.9'
38
39
 
39
40
  spec.add_development_dependency "bundler", "~> 2.1.2"
40
41
  spec.add_development_dependency "rake", "~> 10.0"
@@ -5,6 +5,7 @@ require 'pastel'
5
5
  require 'tty-spinner'
6
6
  require 'time'
7
7
  require 'cgi'
8
+ require 'ferrum'
8
9
 
9
10
 
10
11
  module JenkinsApi
@@ -29,9 +30,9 @@ module Jenkins
29
30
 
30
31
  attr_accessor :config, :client, :options
31
32
 
32
- def initialize(options={})
33
+ def initialize(service, options={})
33
34
  @options = options
34
- @service = @options[:service]
35
+ @service = service
35
36
  @config = Jenkins::Builder::Config.new(@service)
36
37
 
37
38
  if @config.url && @config.username && @config.password
@@ -85,9 +86,19 @@ module Jenkins
85
86
 
86
87
  def build_each(jobs)
87
88
  if @options[:failfast]
88
- jobs.find { |job| build(job).nil? }
89
+ failed_job = jobs.find { |job| build(job).nil? }
90
+ if failed_job
91
+ exit 1
92
+ else
93
+ exit 0
94
+ end
89
95
  else
90
- jobs.each { |job| build(job) }
96
+ results = jobs.map { |job| build(job) }
97
+ if results.any? { |r| r.nil? }
98
+ exit 1
99
+ else
100
+ exit 0
101
+ end
91
102
  end
92
103
  end
93
104
 
@@ -137,14 +148,42 @@ module Jenkins
137
148
  msg = "#{job_name} with branch #{branch}"
138
149
  mbranch_param = {name: 'mbranch', value: branch}
139
150
  params = mbranch_param.merge(json: {parameter: mbranch_param}.to_json)
140
- @client.api_post_request("/job/#{job_name}/build?delay=0sec", params, true)
151
+ begin
152
+ @client.api_post_request("/job/#{job_name}/build?delay=0sec", params, true)
153
+ rescue JenkinsApi::Exceptions::ForbiddenWithCrumb => e
154
+ start_build_use_ferrum(job_name, branch)
155
+ end
141
156
  else
142
157
  msg = job_name
143
- @client.api_post_request("/job/#{job_name}/build?delay=0sec")
158
+ begin
159
+ @client.api_post_request("/job/#{job_name}/build?delay=0sec")
160
+ rescue JenkinsApi::Exceptions::ForbiddenWithCrumb => e
161
+ start_build_use_ferrum(job_name, nil)
162
+ end
144
163
  end
145
164
  puts Pastel.new.cyan.bold("\n%s%s %s %s%s\n" % [' '*30, '★ '*5, msg, '★ '*5, ' '*30])
146
165
  end
147
166
 
167
+ def start_build_use_ferrum(job_name, branch)
168
+ browser = Ferrum::Browser.new(headless: true)
169
+ browser.goto("#{config.url}/login")
170
+ username_input = browser.at_css('input[name=j_username]')
171
+ password_input = browser.at_css('input[name=j_password]')
172
+ username_input.focus.type(config.username)
173
+ password_input.focus.type(config.password)
174
+ browser.at_css('input[name=Submit]').click
175
+ if branch
176
+ browser.goto("#{config.url}/job/#{job_name}/build?delay=0sec")
177
+ sleep(2)
178
+ browser.evaluate("document.querySelector('#gitParameterSelect').value = '#{branch}'")
179
+ browser.at_css('#yui-gen1-button').click
180
+ else
181
+ browser.goto("#{config.url}/job/#{job_name}/")
182
+ browser.at_css('#tasks a.task-link[onclick^=return\ build]').click
183
+ end
184
+ browser.quit
185
+ end
186
+
148
187
  def check_and_show_result(job_name, latest_build_no)
149
188
  while (build_no = @client.job.get_current_build_number(job_name)) <= latest_build_no
150
189
  sleep 1
@@ -63,7 +63,13 @@ module Jenkins
63
63
  puts Jenkins::Builder::VERSION
64
64
  exit
65
65
  end
66
- app = Jenkins::Builder::App.new(options)
66
+ if options.service.nil?
67
+ service = fzf(Config.new().services).first
68
+ exit if service.nil?
69
+ else
70
+ service = options.service
71
+ end
72
+ app = Jenkins::Builder::App.new(service, options)
67
73
  if jobs.empty?
68
74
  jobs = fzf(app.fetch_all_jobs)
69
75
  exit if jobs.empty?
@@ -26,6 +26,10 @@ module Jenkins
26
26
  @config[k] = v
27
27
  end
28
28
 
29
+ def services
30
+ @config['services'].keys
31
+ end
32
+
29
33
  def username
30
34
  @config['services'][@service]['username']
31
35
  end
@@ -1,5 +1,5 @@
1
1
  module Jenkins
2
2
  module Builder
3
- VERSION = "0.2.2"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liu Xiang
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-18 00:00:00.000000000 Z
11
+ date: 2020-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.8.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: ferrum
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.9'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.9'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -196,7 +210,7 @@ licenses:
196
210
  - MIT
197
211
  metadata:
198
212
  allowed_push_host: https://rubygems.org
199
- post_install_message:
213
+ post_install_message:
200
214
  rdoc_options: []
201
215
  require_paths:
202
216
  - lib
@@ -212,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
226
  version: '0'
213
227
  requirements: []
214
228
  rubygems_version: 3.1.2
215
- signing_key:
229
+ signing_key:
216
230
  specification_version: 4
217
231
  summary: Build Jenkins Jobs
218
232
  test_files: []