jenkins-builder 0.2.3 → 0.3.1

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: 4344c5bd63933b7a95d76310f4aca60aa7f8b8914bb85519f9de589ed60956f4
4
- data.tar.gz: 7cd18dd16185f3650d85103f075bd45d43a6db4142232fedb554ecc1b9cf7ed4
3
+ metadata.gz: 0ab1ed5fd9475b83aca85b3473b5a0d4f0bf8dbb316085d6ea2207ae77885295
4
+ data.tar.gz: dc75544746b40656ab1451c753e61fc488757d055a724255336f50a71c8a8f10
5
5
  SHA512:
6
- metadata.gz: 6efc476422ddc43a5f408f5b12c9cfc67d8a2297a3e62958e4fe540f0204afb6e8186f38cf50fec42cc134dba8a5a55c7f7d37f9fa221086a23265de973c36c1
7
- data.tar.gz: b4e38a74ed226ca256849ee306d6c907810cf2089014d24780d4b866ebeb39745d0bf6248a38a361528ee3f6167988b069c217ac7be06ab6f834d2d0a2a018b9
6
+ metadata.gz: 55d677fddc172a17c239a1fb2b554ef947ff2381b33029f61c7ae3b223443b6db8d2d5c041cfcc3c4e0fabf91de77876bb25172b6839aa41b4b78ecf5a6c0de6
7
+ data.tar.gz: ec1426aae298081e23b066d9221534a814bb0c5684cc4327d1d6f9be9ddeca37a724b28996067c22db985f056fc08c3a72fbc28890aeab69cb9216760b80a1ec
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jenkins-builder (0.2.2)
4
+ jenkins-builder (0.3.1)
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,7 +30,7 @@ module Jenkins
29
30
 
30
31
  attr_accessor :config, :client, :options
31
32
 
32
- def initialize(service, options={})
33
+ def initialize(service = nil, options={})
33
34
  @options = options
34
35
  @service = service
35
36
  @config = Jenkins::Builder::Config.new(@service)
@@ -79,15 +80,25 @@ module Jenkins
79
80
 
80
81
  def list_aliases
81
82
  @config.aliases.each do |k, v|
82
- puts "`%s' is alias for `%s'" % [k, v]
83
+ puts "%-10s --> %s" % [k, v]
83
84
  end
84
85
  end
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
@@ -55,7 +55,7 @@ module Jenkins
55
55
  end
56
56
 
57
57
  def url
58
- @config['services'][@service]['url']
58
+ @service && @config['services'][@service]['url']
59
59
  end
60
60
 
61
61
  def url=(url)
@@ -1,5 +1,5 @@
1
1
  module Jenkins
2
2
  module Builder
3
- VERSION = "0.2.3"
3
+ VERSION = "0.3.1"
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.3
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liu Xiang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-10 00:00:00.000000000 Z
11
+ date: 2020-08-07 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