jenkins_pipeline_builder 0.10.8 → 0.10.9
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 +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
|