jenkins_pipeline_builder 0.10.8 → 0.10.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/jenkins_pipeline_builder.gemspec +2 -0
- data/lib/jenkins_pipeline_builder/cli/describe.rb +0 -1
- data/lib/jenkins_pipeline_builder/extensions.rb +42 -35
- data/lib/jenkins_pipeline_builder/extensions/builders.rb +0 -1
- data/lib/jenkins_pipeline_builder/extensions/publishers.rb +0 -1
- data/lib/jenkins_pipeline_builder/generator.rb +10 -6
- data/lib/jenkins_pipeline_builder/pull_request.rb +6 -2
- data/lib/jenkins_pipeline_builder/version.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/compiler_spec.rb +0 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/builders_spec.rb +22 -0
- data/spec/lib/jenkins_pipeline_builder/extensions/job_attributes_spec.rb +0 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/publishers_spec.rb +0 -1
- data/spec/lib/jenkins_pipeline_builder/extensions/wrappers_spec.rb +0 -4
- data/spec/lib/jenkins_pipeline_builder/extensions_spec.rb +2 -3
- data/spec/lib/jenkins_pipeline_builder/generator_spec.rb +1 -1
- data/spec/lib/jenkins_pipeline_builder/module_registry_spec.rb +0 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Y2NjMWU0N2Q4MmNhYzVmNGM5YmY5OTBlYjA1YmE0NmIyY2ZlNDU2ZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YmJmNzUzMDZiOTRmYTZkODY0MTllNDQ2OWM1ZGM4MTYxZGQyYzE3Nw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmI4ZmY2OWQxNTQ1NDA0NmY2ZGRmNjgyNjg4YjBjZDUwMmI2MDg2MGM4YjI5
|
10
|
+
MTcxMWY4ZmU2Y2RhMTIwZjc3MzI2NTRkNWYyYjZmM2M0ZDgzNGJhNmM0ZmIz
|
11
|
+
M2Q0YmFiMzFmODg3YWNhMjM0YmUwZjBlZTI5ODQ4MDcyNjZjNDQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZGQ1ODhjNzViZWYwMWViYmVkYmQ5MGYxYjY1ZGU1Y2I0NTE3ZGQzY2Q5NzRm
|
14
|
+
OTEwOGZhNTE1YjI1YmI0NDJkZjc3NzJmOWI2OGY1OTlhODFmNjZjZGY5Yzcy
|
15
|
+
ODA4MjVjOWFlNWUyZmY4N2I4YjlkY2Q5NjhmMWE3NzY4MzVhNjY=
|
@@ -42,5 +42,7 @@ automating Job & Pipeline creation from the YAML files checked-in with your appl
|
|
42
42
|
spec.add_development_dependency 'yard'
|
43
43
|
spec.add_development_dependency 'rspec_junit_formatter'
|
44
44
|
spec.add_development_dependency 'webmock'
|
45
|
+
# Eventually, we'll fix all the Complexity that ties us to 0.26.1
|
46
|
+
# spec.add_development_dependency 'rubocop'
|
45
47
|
spec.add_development_dependency 'rubocop', '= 0.26.1'
|
46
48
|
end
|
@@ -28,7 +28,6 @@ module JenkinsPipelineBuilder
|
|
28
28
|
klass_name = entry.to_s.classify
|
29
29
|
# rubocop:disable Style/AccessModifierIndentation
|
30
30
|
klass = Class.new(Thor) do
|
31
|
-
|
32
31
|
if entry == :job_attributes
|
33
32
|
extensions = JenkinsPipelineBuilder.registry.registry[:job].select { |_, x| x.is_a? ExtensionSet }
|
34
33
|
else
|
@@ -23,35 +23,20 @@ require 'jenkins_pipeline_builder'
|
|
23
23
|
JenkinsPipelineBuilder.registry.entries.each do |type, path|
|
24
24
|
singular_type = type.to_s.singularize
|
25
25
|
define_method singular_type do |&block|
|
26
|
-
set = JenkinsPipelineBuilder::ExtensionSet.new
|
27
|
-
set.
|
28
|
-
|
29
|
-
set.add_extension singular_type, version, settings, path
|
30
|
-
end
|
31
|
-
unless set.valid?
|
32
|
-
name = set.name || 'A plugin with no name provided'
|
33
|
-
puts "Encountered errors while registering #{name}"
|
34
|
-
puts set.errors.map { |k, v| "#{k}: #{v}" }.join(', ')
|
35
|
-
return false
|
36
|
-
end
|
26
|
+
set = JenkinsPipelineBuilder::ExtensionSet.new singular_type, path, &block
|
27
|
+
return false unless set.valid?
|
28
|
+
|
37
29
|
JenkinsPipelineBuilder.registry.register([:job, type], set)
|
38
30
|
versions = set.extensions.map(&:min_version)
|
39
31
|
puts "Successfully registered #{set.name} for versions #{versions}" if set.announced
|
32
|
+
true
|
40
33
|
end
|
41
34
|
end
|
42
35
|
|
43
36
|
def job_attribute(&block)
|
44
|
-
set = JenkinsPipelineBuilder::ExtensionSet.new
|
45
|
-
set.
|
46
|
-
|
47
|
-
set.add_extension :job_attribute, version, settings
|
48
|
-
end
|
49
|
-
unless set.valid?
|
50
|
-
name = set.name || 'A plugin with no name provided'
|
51
|
-
puts "Encountered errors while registering #{name}"
|
52
|
-
puts set.errors.map { |k, v| "#{k}: #{v}" }.join(', ')
|
53
|
-
return false
|
54
|
-
end
|
37
|
+
set = JenkinsPipelineBuilder::ExtensionSet.new :job_attribute, &block
|
38
|
+
return false unless set.valid?
|
39
|
+
|
55
40
|
JenkinsPipelineBuilder.registry.register([:job], set)
|
56
41
|
versions = set.extensions.map(&:min_version)
|
57
42
|
puts "Successfully registered #{set.name} for versions #{versions}" if set.announced
|
@@ -76,10 +61,16 @@ module JenkinsPipelineBuilder
|
|
76
61
|
|
77
62
|
attr_accessor :blocks, :extensions, :settings
|
78
63
|
|
79
|
-
def initialize
|
64
|
+
def initialize(type, path = nil, &block)
|
80
65
|
@blocks = {}
|
81
66
|
@settings = {}
|
82
67
|
@extensions = []
|
68
|
+
|
69
|
+
instance_eval(&block)
|
70
|
+
|
71
|
+
blocks.each do |version, settings|
|
72
|
+
add_extension type, version, settings, path
|
73
|
+
end
|
83
74
|
end
|
84
75
|
|
85
76
|
def installed_version=(version)
|
@@ -103,7 +94,6 @@ module JenkinsPipelineBuilder
|
|
103
94
|
return @version if @version
|
104
95
|
reg = JenkinsPipelineBuilder.registry
|
105
96
|
version = reg.versions[settings[:plugin_id]]
|
106
|
-
puts reg.versions.inspect if version.nil?
|
107
97
|
fail "Plugin #{settings[:name]} is not installed (plugin_id: #{settings[:plugin_id]})" if version.nil?
|
108
98
|
self.installed_version = version
|
109
99
|
@version
|
@@ -113,11 +103,12 @@ module JenkinsPipelineBuilder
|
|
113
103
|
# TODO: Support multiple xml sections for the native to jenkins plugins
|
114
104
|
return extensions.first if settings[:plugin_id] == 'builtin'
|
115
105
|
|
116
|
-
|
117
|
-
return versions[version] if version <= installed_version
|
118
|
-
end
|
106
|
+
extension = versions[highest_allowed_version]
|
119
107
|
|
120
|
-
|
108
|
+
unless extension
|
109
|
+
fail "Can't find version of #{name} lte #{installed_version}, available versions: #{versions.keys.map(&:to_s)}"
|
110
|
+
end
|
111
|
+
extension
|
121
112
|
end
|
122
113
|
|
123
114
|
def merge(other_set)
|
@@ -130,7 +121,7 @@ module JenkinsPipelineBuilder
|
|
130
121
|
mismatch.each do |error|
|
131
122
|
puts error
|
132
123
|
end
|
133
|
-
fail 'Values did not match, cannot merge
|
124
|
+
fail 'Values did not match, cannot merge extension sets' if mismatch.any?
|
134
125
|
|
135
126
|
blocks.merge other_set.blocks
|
136
127
|
end
|
@@ -152,11 +143,7 @@ module JenkinsPipelineBuilder
|
|
152
143
|
fail "no block found for version #{version}" unless blocks.key version
|
153
144
|
return blocks[version][:block]
|
154
145
|
end
|
155
|
-
|
156
|
-
blocks[version].merge!(xml: block, path: path)
|
157
|
-
else
|
158
|
-
blocks[version] = { xml: block, path: path }
|
159
|
-
end
|
146
|
+
store_xml version, block, path
|
160
147
|
end
|
161
148
|
|
162
149
|
def version(ver, &block)
|
@@ -179,7 +166,13 @@ module JenkinsPipelineBuilder
|
|
179
166
|
end
|
180
167
|
|
181
168
|
def valid?
|
182
|
-
errors.empty?
|
169
|
+
valid = errors.empty?
|
170
|
+
unless valid
|
171
|
+
name ||= 'A plugin with no name provided'
|
172
|
+
puts "Encountered errors while registering #{name}"
|
173
|
+
puts errors.map { |k, v| "#{k}: #{v}" }.join(', ')
|
174
|
+
end
|
175
|
+
valid
|
183
176
|
end
|
184
177
|
|
185
178
|
def errors
|
@@ -194,6 +187,20 @@ module JenkinsPipelineBuilder
|
|
194
187
|
|
195
188
|
private
|
196
189
|
|
190
|
+
def highest_allowed_version
|
191
|
+
ordered_version_list.each do |version|
|
192
|
+
return version if version <= installed_version
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def store_xml(version, block, path)
|
197
|
+
if blocks[version]
|
198
|
+
blocks[version].merge!(xml: block, path: path)
|
199
|
+
else
|
200
|
+
blocks[version] = { xml: block, path: path }
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
197
204
|
def versions
|
198
205
|
@versions ||= extensions.each_with_object({}) do |ext, hash|
|
199
206
|
hash[Gem::Version.new(ext.min_version)] = ext
|
@@ -117,7 +117,6 @@ builder do
|
|
117
117
|
send('hudson.plugins.parameterizedtrigger.TriggerBuilder', 'plugin' => 'parameterized-trigger') do
|
118
118
|
configs do
|
119
119
|
send('hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig') do
|
120
|
-
|
121
120
|
configs do
|
122
121
|
params[:data] = [{ params: '' }] unless params[:data]
|
123
122
|
params[:data].each do |config|
|
@@ -129,6 +129,14 @@ module JenkinsPipelineBuilder
|
|
129
129
|
|
130
130
|
private
|
131
131
|
|
132
|
+
def create_or_update_job(job_name, xml)
|
133
|
+
if client.job.exists?(job_name)
|
134
|
+
client.job.update(job_name, xml)
|
135
|
+
else
|
136
|
+
client.job.create(job_name, xml)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
132
140
|
# Converts standalone jobs to the format that they have when loaded as part of a project.
|
133
141
|
# This addresses an issue where #pubish_jobs assumes that each job will be wrapped
|
134
142
|
# with in a hash a referenced under a key called :result, which is what happens when
|
@@ -189,7 +197,7 @@ module JenkinsPipelineBuilder
|
|
189
197
|
end
|
190
198
|
|
191
199
|
def compile_pull_request_generator(pull_job, project)
|
192
|
-
defaults =
|
200
|
+
defaults = find_defaults
|
193
201
|
settings = defaults.nil? ? {} : defaults[:value] || {}
|
194
202
|
settings = Compiler.get_settings_bag(project, settings)
|
195
203
|
resolve_job_by_name(pull_job, settings)
|
@@ -514,11 +522,7 @@ module JenkinsPipelineBuilder
|
|
514
522
|
return
|
515
523
|
end
|
516
524
|
|
517
|
-
|
518
|
-
client.job.update(job_name, xml)
|
519
|
-
else
|
520
|
-
client.job.create(job_name, xml)
|
521
|
-
end
|
525
|
+
create_or_update_job job_name, xml
|
522
526
|
end
|
523
527
|
|
524
528
|
def compile_job_to_xml(job)
|
@@ -46,8 +46,7 @@ module JenkinsPipelineBuilder
|
|
46
46
|
git_version = JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version
|
47
47
|
if git_version >= Gem::Version.new(2.0)
|
48
48
|
@jobs.each_value do |j|
|
49
|
-
j
|
50
|
-
j[:value][:scm_params][:changelog_to_branch] = { remote: 'origin', branch: 'pr-{{pull_request_number}}' }
|
49
|
+
override_git_2_params j
|
51
50
|
end
|
52
51
|
end
|
53
52
|
update_jobs!
|
@@ -55,6 +54,11 @@ module JenkinsPipelineBuilder
|
|
55
54
|
change_name!
|
56
55
|
end
|
57
56
|
|
57
|
+
def override_git_2_params(job)
|
58
|
+
job[:value][:scm_params] ||= {}
|
59
|
+
job[:value][:scm_params][:changelog_to_branch] = { remote: 'origin', branch: 'pr-{{pull_request_number}}' }
|
60
|
+
end
|
61
|
+
|
58
62
|
# Change the git branch for each job
|
59
63
|
def change_git!
|
60
64
|
@jobs.each_value do |job|
|
@@ -50,7 +50,6 @@ describe JenkinsPipelineBuilder::Compiler do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
describe '#enable_blocks' do
|
53
|
-
|
54
53
|
it 'generates correct new jobs with true' do
|
55
54
|
item = { enabled: '{{use1}}', parameters: { rootPom: 'path_to_pomasd' } }
|
56
55
|
settings = { name: 'PushTest', description: 'DB Pipeline tooling', git_repo: 'git@github.roving.com:devops/DBPipeline.git', git_branch: 'master', excluded_user: 'buildmaster', hipchat_room: 'CD Builds', hipchat_auth_token: 'f3e98ed54605b36f56dd2c562e3775', discard_days: '30', discard_number: '100', maven_name: 'tools-maven-3.0.3', hipchat_jenkins_url: 'https://cd-jenkins.ad.prodcc.net/', use1: true }
|
@@ -25,6 +25,28 @@ describe 'builders' do
|
|
25
25
|
File.open("./out/xml/builder_#{name}.xml", 'w') { |f| @n_xml.write_xml_to f }
|
26
26
|
end
|
27
27
|
|
28
|
+
context 'generic' do
|
29
|
+
it 'can register a builder' do
|
30
|
+
result = builder do
|
31
|
+
name :test_generic
|
32
|
+
plugin_id :foo
|
33
|
+
xml do
|
34
|
+
foo :bar
|
35
|
+
end
|
36
|
+
end
|
37
|
+
JenkinsPipelineBuilder.registry.registry[:job][:builders].delete :test_generic
|
38
|
+
expect(result).to be true
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'fails to register an invalid builder' do
|
42
|
+
result = builder do
|
43
|
+
name :test_generic
|
44
|
+
end
|
45
|
+
JenkinsPipelineBuilder.registry.registry[:job][:builders].delete :test_generic
|
46
|
+
expect(result).to be false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
28
50
|
context 'multi_job builder' do
|
29
51
|
before :each do
|
30
52
|
allow(JenkinsPipelineBuilder.client).to receive(:plugin).and_return double(
|
@@ -55,9 +55,6 @@ describe 'wrappers' do
|
|
55
55
|
JenkinsPipelineBuilder.registry.traverse_registry_path('job', { wrappers: { xvfb: {} } }, @n_xml)
|
56
56
|
|
57
57
|
node = @n_xml.root.xpath('//buildWrappers/org.jenkinsci.plugins.xvfb.XvfbBuildWrapper')
|
58
|
-
puts node.inspect
|
59
|
-
t = node.css('timeout')
|
60
|
-
puts t.inspect
|
61
58
|
expect(node.first).to_not be_nil
|
62
59
|
end
|
63
60
|
end
|
@@ -119,5 +116,4 @@ describe 'wrappers' do
|
|
119
116
|
expect(node.first.content).to match 'Node-0.10.24'
|
120
117
|
end
|
121
118
|
end
|
122
|
-
|
123
119
|
end
|
@@ -119,6 +119,7 @@ describe JenkinsPipelineBuilder::Extension do
|
|
119
119
|
expect(extension.errors).to be_empty
|
120
120
|
expect(extension.valid?).to be true
|
121
121
|
end
|
122
|
+
|
122
123
|
it 'returns false if errors is not empty' do
|
123
124
|
expect(extension.errors).to_not be_empty
|
124
125
|
expect(extension.valid?).to be false
|
@@ -128,7 +129,7 @@ describe JenkinsPipelineBuilder::Extension do
|
|
128
129
|
end
|
129
130
|
|
130
131
|
describe JenkinsPipelineBuilder::ExtensionSet do
|
131
|
-
subject(:set) { JenkinsPipelineBuilder::ExtensionSet.new }
|
132
|
+
subject(:set) { JenkinsPipelineBuilder::ExtensionSet.new('foo') {} }
|
132
133
|
|
133
134
|
before :each do
|
134
135
|
set.name 'example'
|
@@ -219,9 +220,7 @@ describe JenkinsPipelineBuilder::ExtensionSet do
|
|
219
220
|
# set.installed_version = '2.0-beta-1'
|
220
221
|
# set.installed_version = '2.0+build.93'
|
221
222
|
# set.installed_version = '2.0.8'
|
222
|
-
|
223
223
|
expect(set.extension.min_version).to eq '1.9'
|
224
|
-
|
225
224
|
end
|
226
225
|
end
|
227
226
|
end
|
@@ -258,7 +258,7 @@ describe JenkinsPipelineBuilder::Generator do
|
|
258
258
|
end
|
259
259
|
end
|
260
260
|
stub_request(:get, 'http://username:password@127.0.0.1:8080/job/test_job/config.xml')
|
261
|
-
|
261
|
+
.to_return(status: 200, body: "#{body}", headers: {})
|
262
262
|
@generator.dump(job_name)
|
263
263
|
expect(File.exist?("#{job_name}.xml")).to be true
|
264
264
|
File.delete("#{job_name}.xml")
|
@@ -6,7 +6,6 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
|
|
6
6
|
end
|
7
7
|
describe '#register' do
|
8
8
|
it 'should return item by a specified path' do
|
9
|
-
|
10
9
|
registry = JenkinsPipelineBuilder::ModuleRegistry.new
|
11
10
|
set = double
|
12
11
|
allow(set).to receive(:name).and_return :foo
|
@@ -126,7 +125,6 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
|
|
126
125
|
end
|
127
126
|
end
|
128
127
|
describe '#initialize' do
|
129
|
-
|
130
128
|
end
|
131
129
|
|
132
130
|
describe '#version' do
|
@@ -147,23 +145,18 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
|
|
147
145
|
end
|
148
146
|
|
149
147
|
describe '#entries' do
|
150
|
-
|
151
148
|
end
|
152
149
|
|
153
150
|
describe '#get' do
|
154
|
-
|
155
151
|
end
|
156
152
|
|
157
153
|
describe '#get_by_path_collection' do
|
158
|
-
|
159
154
|
end
|
160
155
|
|
161
156
|
describe '#traverse_registry_path' do
|
162
|
-
|
163
157
|
end
|
164
158
|
|
165
159
|
describe '#traverse_registry' do
|
166
|
-
|
167
160
|
end
|
168
161
|
|
169
162
|
describe '#execute_extension' do
|
@@ -203,7 +196,6 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
|
|
203
196
|
end
|
204
197
|
expect(JenkinsPipelineBuilder.registry.registry[:job][:wrappers]).to have_key :test_name
|
205
198
|
@ext = JenkinsPipelineBuilder.registry.registry[:job][:wrappers][:test_name].extension
|
206
|
-
|
207
199
|
end
|
208
200
|
|
209
201
|
after :each do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jenkins_pipeline_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Moochnick
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|