jenkins-builder 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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: []