jenkins_pipeline_builder 0.10.12 → 0.10.13
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/.rubocop.yml +2 -2
- data/README.md +6 -12
- data/lib/jenkins_pipeline_builder/compiler.rb +82 -67
- data/lib/jenkins_pipeline_builder/extension_set.rb +4 -0
- data/lib/jenkins_pipeline_builder/extensions.rb +26 -0
- data/lib/jenkins_pipeline_builder/extensions/builders.rb +6 -0
- data/lib/jenkins_pipeline_builder/generator.rb +39 -124
- data/lib/jenkins_pipeline_builder/job.rb +1 -0
- data/lib/jenkins_pipeline_builder/job_collection.rb +17 -15
- data/lib/jenkins_pipeline_builder/module_registry.rb +1 -26
- data/lib/jenkins_pipeline_builder/pull_request.rb +6 -10
- data/lib/jenkins_pipeline_builder/pull_request_generator.rb +93 -13
- data/lib/jenkins_pipeline_builder/version.rb +1 -1
- data/lib/jenkins_pipeline_builder/view.rb +10 -20
- data/spec/lib/jenkins_pipeline_builder/compiler_spec.rb +78 -21
- data/spec/lib/jenkins_pipeline_builder/extensions/builders_spec.rb +10 -1
- data/spec/lib/jenkins_pipeline_builder/generator_spec.rb +26 -72
- data/spec/lib/jenkins_pipeline_builder/job_spec.rb +142 -0
- data/spec/lib/jenkins_pipeline_builder/module_registry_spec.rb +2 -0
- data/spec/lib/jenkins_pipeline_builder/pull_request_generator_spec.rb +8 -4
- data/spec/lib/jenkins_pipeline_builder/pull_request_spec.rb +10 -4
- data/spec/lib/jenkins_pipeline_builder/view_spec.rb +1 -0
- metadata +4 -3
@@ -22,6 +22,8 @@ describe 'builders' do
|
|
22
22
|
|
23
23
|
after :each do |example|
|
24
24
|
name = example.description.gsub ' ', '_'
|
25
|
+
require 'fileutils'
|
26
|
+
FileUtils.mkdir_p 'out/xml'
|
25
27
|
File.open("./out/xml/builder_#{name}.xml", 'w') { |f| @n_xml.write_xml_to f }
|
26
28
|
end
|
27
29
|
|
@@ -63,13 +65,20 @@ describe 'builders' do
|
|
63
65
|
|
64
66
|
it 'provides job specific config' do
|
65
67
|
params = { builders: { multi_job: { phases: { foo: { jobs: [{ name: 'foo', config: {
|
66
|
-
predefined_build_parameters: 'bar'
|
68
|
+
predefined_build_parameters: 'bar',
|
69
|
+
properties_file: { file: 'props', skip_if_missing: true }
|
67
70
|
} }] } } } } }
|
68
71
|
|
69
72
|
JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
|
70
73
|
|
71
74
|
node = @n_xml.xpath '//hudson.plugins.parameterizedtrigger.PredefinedBuildParameters'
|
72
75
|
expect(node.children.first.content).to eq 'bar'
|
76
|
+
|
77
|
+
node = @n_xml.xpath '//hudson.plugins.parameterizedtrigger.FileBuildParameters/propertiesFile'
|
78
|
+
expect(node.children.first.content).to eq 'props'
|
79
|
+
|
80
|
+
node = @n_xml.xpath '//hudson.plugins.parameterizedtrigger.FileBuildParameters/failTriggerOnMissing'
|
81
|
+
expect(node.children.first.content).to eq 'true'
|
73
82
|
end
|
74
83
|
end
|
75
84
|
end
|
@@ -1,11 +1,7 @@
|
|
1
1
|
require File.expand_path('../spec_helper', __FILE__)
|
2
2
|
|
3
3
|
describe JenkinsPipelineBuilder::Generator do
|
4
|
-
|
5
|
-
JenkinsPipelineBuilder.registry.clear_versions
|
6
|
-
end
|
7
|
-
|
8
|
-
before(:all) do
|
4
|
+
before :all do
|
9
5
|
JenkinsPipelineBuilder.credentials = {
|
10
6
|
server_ip: '127.0.0.1',
|
11
7
|
server_port: 8080,
|
@@ -13,11 +9,17 @@ describe JenkinsPipelineBuilder::Generator do
|
|
13
9
|
password: 'password',
|
14
10
|
log_location: '/dev/null'
|
15
11
|
}
|
12
|
+
end
|
13
|
+
|
14
|
+
after :each do
|
15
|
+
JenkinsPipelineBuilder.registry.clear_versions
|
16
|
+
end
|
17
|
+
|
18
|
+
before :each do
|
16
19
|
@generator = JenkinsPipelineBuilder.generator
|
17
20
|
end
|
18
21
|
|
19
22
|
after(:each) do
|
20
|
-
JenkinsPipelineBuilder.no_debug!
|
21
23
|
@generator.job_collection = JenkinsPipelineBuilder::JobCollection.new
|
22
24
|
end
|
23
25
|
|
@@ -109,80 +111,37 @@ describe JenkinsPipelineBuilder::Generator do
|
|
109
111
|
|
110
112
|
describe '#pull_request' do
|
111
113
|
before :each do
|
112
|
-
allow(JenkinsPipelineBuilder
|
113
|
-
|
114
|
-
JenkinsPipelineBuilder.debug!
|
114
|
+
allow(JenkinsPipelineBuilder).to receive(:debug).and_return true
|
115
|
+
JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version = '1000.0'
|
115
116
|
end
|
116
|
-
|
117
|
-
|
118
|
-
'{{name}}-10-SampleJob' => {
|
119
|
-
name: '{{name}}-10-SampleJob',
|
120
|
-
type: :job,
|
121
|
-
value: {
|
122
|
-
name: '{{name}}-10-SampleJob',
|
123
|
-
scm_branch: 'origin/pr/{{pull_request_number}}/head',
|
124
|
-
scm_params: {
|
125
|
-
refspec: 'refs/pull/*:refs/remotes/origin/pr/*'
|
126
|
-
}
|
127
|
-
}
|
128
|
-
}
|
129
|
-
}
|
117
|
+
after :each do
|
118
|
+
JenkinsPipelineBuilder.registry.registry[:job][:scm_params].clear_installed_version
|
130
119
|
end
|
120
|
+
|
131
121
|
let(:path) { File.expand_path('../fixtures/generator_tests/pullrequest_pipeline', __FILE__) }
|
132
122
|
it 'produces no errors while creating pipeline PullRequest' do
|
133
|
-
# Dummy data
|
134
|
-
purge = []
|
135
|
-
create = [
|
136
|
-
{
|
137
|
-
name: 'PullRequest-PR1',
|
138
|
-
type: :project,
|
139
|
-
value: {
|
140
|
-
name: 'PullRequest-PR1',
|
141
|
-
pull_request_number: '1',
|
142
|
-
jobs: [
|
143
|
-
'{{name}}-10-SampleJob'
|
144
|
-
]
|
145
|
-
}
|
146
|
-
}
|
147
|
-
]
|
148
|
-
# Run the test
|
149
123
|
job_name = 'PullRequest'
|
150
|
-
|
151
|
-
|
152
|
-
)
|
124
|
+
allow_any_instance_of(JenkinsPipelineBuilder::PullRequestGenerator).to receive(:check_for_pull).and_return([1])
|
125
|
+
allow_any_instance_of(JenkinsPipelineBuilder::PullRequestGenerator).to receive(:purge_jobs).and_return(true)
|
153
126
|
success = @generator.pull_request(path, job_name)
|
154
127
|
expect(success).to be_truthy
|
155
128
|
end
|
156
129
|
|
157
|
-
it '
|
158
|
-
purge = []
|
159
|
-
create = %w(1 2).map do |n|
|
160
|
-
{
|
161
|
-
name: "PullRequest-PR#{n}",
|
162
|
-
type: :project,
|
163
|
-
value: {
|
164
|
-
pull_request_number: n,
|
165
|
-
name: "PullRequest-PR#{n}",
|
166
|
-
jobs: [
|
167
|
-
'{{name}}-10-SampleJob'
|
168
|
-
]
|
169
|
-
}
|
170
|
-
}
|
171
|
-
end
|
130
|
+
it 'correctly creates jobs when there are multiple pulls open' do
|
172
131
|
job_name = 'PullRequest'
|
173
|
-
|
174
|
-
double(purge: purge, create: create, jobs: jobs)
|
175
|
-
)
|
132
|
+
allow_any_instance_of(JenkinsPipelineBuilder::PullRequestGenerator).to receive(:check_for_pull).and_return([1, 2])
|
176
133
|
job1 = double name: 'job name'
|
177
134
|
job2 = double name: 'job name'
|
178
135
|
expect(JenkinsPipelineBuilder::Job).to receive(:new).once.with(
|
179
136
|
name: 'PullRequest-PR1-10-SampleJob', scm_branch: 'origin/pr/1/head', scm_params: {
|
180
|
-
refspec: 'refs/pull
|
137
|
+
refspec: 'refs/pull/1/head:refs/remotes/origin/pr/1/head',
|
138
|
+
changelog_to_branch: { remote: 'origin', branch: 'pr/1/head' }
|
181
139
|
}
|
182
140
|
).and_return job1
|
183
141
|
expect(JenkinsPipelineBuilder::Job).to receive(:new).once.with(
|
184
142
|
name: 'PullRequest-PR2-10-SampleJob', scm_branch: 'origin/pr/2/head', scm_params: {
|
185
|
-
refspec: 'refs/pull
|
143
|
+
refspec: 'refs/pull/2/head:refs/remotes/origin/pr/2/head',
|
144
|
+
changelog_to_branch: { remote: 'origin', branch: 'pr/2/head' }
|
186
145
|
}
|
187
146
|
).and_return job2
|
188
147
|
expect(job1).to receive(:create_or_update).and_return true
|
@@ -195,7 +154,7 @@ describe JenkinsPipelineBuilder::Generator do
|
|
195
154
|
# Fails to purge old PR jobs from Jenkins
|
196
155
|
end
|
197
156
|
|
198
|
-
describe '#
|
157
|
+
describe '#load_from_path' do
|
199
158
|
let(:project_hash) do
|
200
159
|
[{ 'defaults' => { 'name' => 'global', 'description' => 'Tests, all the tests' } },
|
201
160
|
{ 'project' => { 'name' => 'TestProject', 'jobs' => ['{{name}}-part1'] } }]
|
@@ -206,28 +165,23 @@ describe JenkinsPipelineBuilder::Generator do
|
|
206
165
|
}]
|
207
166
|
end
|
208
167
|
|
209
|
-
before :each do
|
210
|
-
expect(@generator.job_collection).to receive(:load_file).once.with(view_hash, false).and_return(true)
|
211
|
-
expect(@generator.job_collection).to receive(:load_file).once.with(project_hash, false).and_return(true)
|
212
|
-
end
|
213
|
-
|
214
168
|
it 'loads a yaml collection from a path' do
|
215
169
|
path = File.expand_path('../fixtures/generator_tests/test_yaml_files', __FILE__)
|
216
|
-
@generator.job_collection.
|
170
|
+
@generator.job_collection.load_from_path path
|
217
171
|
end
|
218
172
|
it 'loads a json collection from a path' do
|
219
173
|
path = File.expand_path('../fixtures/generator_tests/test_json_files', __FILE__)
|
220
|
-
@generator.job_collection.
|
174
|
+
@generator.job_collection.load_from_path path
|
221
175
|
end
|
222
176
|
it 'loads both yaml and json files from a path' do
|
223
177
|
path = File.expand_path('../fixtures/generator_tests/test_combo_files', __FILE__)
|
224
|
-
@generator.job_collection.
|
178
|
+
@generator.job_collection.load_from_path path
|
225
179
|
end
|
226
180
|
end
|
227
181
|
|
228
182
|
describe '#dump' do
|
229
183
|
it "writes a job's config XML to a file" do
|
230
|
-
JenkinsPipelineBuilder.debug
|
184
|
+
allow(JenkinsPipelineBuilder).to receive(:debug).and_return true
|
231
185
|
job_name = 'test_job'
|
232
186
|
body = ''
|
233
187
|
test_path = File.expand_path('../fixtures/generator_tests', __FILE__)
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe JenkinsPipelineBuilder::Job do
|
4
|
+
before :all do
|
5
|
+
JenkinsPipelineBuilder.credentials = {
|
6
|
+
server_ip: '127.0.0.1',
|
7
|
+
server_port: 8080,
|
8
|
+
username: 'username',
|
9
|
+
password: 'password',
|
10
|
+
log_location: '/dev/null'
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
allow(JenkinsPipelineBuilder).to receive(:logger).and_return double(
|
16
|
+
debug: true,
|
17
|
+
info: true,
|
18
|
+
warn: true,
|
19
|
+
error: true,
|
20
|
+
fatal: true
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
context '#create_or_update' do
|
25
|
+
before :each do
|
26
|
+
@job_double = double
|
27
|
+
@client = double job: @job_double
|
28
|
+
allow(JenkinsPipelineBuilder).to receive(:client).and_return @client
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:job) { described_class.new name: 'asdf' }
|
32
|
+
|
33
|
+
it 'fails if to_xml fails' do
|
34
|
+
expect(job).to receive(:to_xml).ordered.and_return [false, 'oops']
|
35
|
+
expect(job.create_or_update).to eq [false, 'oops']
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'does not call the client in debug mode' do
|
39
|
+
expect(job).to receive(:to_xml).and_return [true, '']
|
40
|
+
expect(JenkinsPipelineBuilder).to receive(:debug).and_return true
|
41
|
+
expect(JenkinsPipelineBuilder).to_not receive(:file_mode)
|
42
|
+
expect(JenkinsPipelineBuilder.client.job).to_not receive(:exists?)
|
43
|
+
job.create_or_update
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'does not call the client in file mode' do
|
47
|
+
expect(job).to receive(:to_xml).and_return [true, '']
|
48
|
+
expect(JenkinsPipelineBuilder).to receive(:debug).and_return false
|
49
|
+
expect(JenkinsPipelineBuilder).to receive(:file_mode).and_return true
|
50
|
+
expect(JenkinsPipelineBuilder.client.job).to_not receive(:exists?)
|
51
|
+
job.create_or_update
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'creates if the job does not exist' do
|
55
|
+
expect(JenkinsPipelineBuilder).to receive(:debug).and_return false
|
56
|
+
expect(JenkinsPipelineBuilder).to receive(:file_mode).and_return false
|
57
|
+
expect(job).to receive(:to_xml).and_return [true, '']
|
58
|
+
expect(@job_double).to receive(:exists?).with('asdf').and_return false
|
59
|
+
expect(@job_double).to receive(:create).and_return true
|
60
|
+
job.create_or_update
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'updates if the job exists' do
|
64
|
+
expect(JenkinsPipelineBuilder).to receive(:debug).and_return false
|
65
|
+
expect(JenkinsPipelineBuilder).to receive(:file_mode).and_return false
|
66
|
+
expect(job).to receive(:to_xml).and_return [true, '']
|
67
|
+
expect(@job_double).to receive(:exists?).with('asdf').and_return true
|
68
|
+
expect(@job_double).to receive(:update).and_return true
|
69
|
+
job.create_or_update
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context '#to_xml' do
|
74
|
+
it 'fails if the job has no name' do
|
75
|
+
job = described_class.new foo: :bar
|
76
|
+
expect { job.to_xml }.to raise_error 'Job name is not specified'
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'parses inline job dsl' do
|
80
|
+
job = described_class.new job_type: 'job_dsl', name: 'asdf', job_dsl: 'this is my job dsl'
|
81
|
+
|
82
|
+
success, xml = job.to_xml
|
83
|
+
expect(success).to be true
|
84
|
+
expect(xml).to include 'javaposse.jobdsl.plugin.ExecuteDslScripts'
|
85
|
+
expect(xml).to include 'usingScriptText>true'
|
86
|
+
expect(xml).to include 'this is my job dsl'
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'parses job dsl from a file' do
|
90
|
+
job = described_class.new job_type: 'job_dsl', name: 'asdf', job_dsl_targets: 'targets'
|
91
|
+
|
92
|
+
success, xml = job.to_xml
|
93
|
+
expect(success).to be true
|
94
|
+
expect(xml).to include 'javaposse.jobdsl.plugin.ExecuteDslScripts'
|
95
|
+
expect(xml).to include 'targets>targets'
|
96
|
+
expect(xml).to include 'usingScriptText>false'
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'parses multi_job' do
|
100
|
+
job = described_class.new job_type: 'multi_project', name: 'asdf'
|
101
|
+
|
102
|
+
success, xml = job.to_xml
|
103
|
+
expect(success).to be true
|
104
|
+
expect(xml).to include 'com.tikal.jenkins.plugins.multijob.MultiJobProject'
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'parses build flow' do
|
108
|
+
job = described_class.new job_type: 'build_flow', name: 'asdf'
|
109
|
+
|
110
|
+
success, xml = job.to_xml
|
111
|
+
expect(success).to be true
|
112
|
+
expect(xml).to include 'com.cloudbees.plugins.flow.BuildFlow'
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'parses freestyle' do
|
116
|
+
job = described_class.new job_type: 'free_style', name: 'asdf'
|
117
|
+
|
118
|
+
success, xml = job.to_xml
|
119
|
+
expect(success).to be true
|
120
|
+
expect(xml).to_not include 'com.cloudbees.plugins.flow.BuildFlow'
|
121
|
+
expect(xml).to_not include 'javaposse.jobdsl.plugin.ExecuteDslScripts'
|
122
|
+
expect(xml).to_not include 'com.tikal.jenkins.plugins.multijob.MultiJobProject'
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'parses pull request generator' do
|
126
|
+
job = described_class.new job_type: 'pull_request_generator', name: 'asdf'
|
127
|
+
|
128
|
+
success, xml = job.to_xml
|
129
|
+
expect(success).to be true
|
130
|
+
expect(xml).to_not include 'com.cloudbees.plugins.flow.BuildFlow'
|
131
|
+
expect(xml).to_not include 'javaposse.jobdsl.plugin.ExecuteDslScripts'
|
132
|
+
expect(xml).to_not include 'com.tikal.jenkins.plugins.multijob.MultiJobProject'
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'fails on an unknown type' do
|
136
|
+
job = described_class.new job_type: 'unknonw', name: 'asdf'
|
137
|
+
|
138
|
+
success, _ = job.to_xml
|
139
|
+
expect(success).to be false
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -139,6 +139,8 @@ describe JenkinsPipelineBuilder::ModuleRegistry do
|
|
139
139
|
end
|
140
140
|
|
141
141
|
it 'pulls the version from the registry if it is not memoized' do
|
142
|
+
subject.clear_versions
|
143
|
+
expect(JenkinsPipelineBuilder).to receive(:debug).and_return false
|
142
144
|
expect(JenkinsPipelineBuilder.client).to receive(:plugin).and_return double(list_installed: { 'one' => '0.1' })
|
143
145
|
subject.versions
|
144
146
|
end
|
@@ -3,10 +3,10 @@ require 'webmock/rspec'
|
|
3
3
|
|
4
4
|
describe JenkinsPipelineBuilder::PullRequestGenerator do
|
5
5
|
let(:pull_request_generator) { JenkinsPipelineBuilder::PullRequestGenerator }
|
6
|
-
let(:project) { { name: 'pull_req_test', type: :project, value: { name: 'pull_req_test', jobs: ['{{name}}-00', '{{name}}-10', '{{name}}-11'] } } }
|
6
|
+
let(:project) { { name: 'pull_req_test', type: :project, value: { name: 'pull_req_test', jobs: [{ name: '{{name}}-00', type: :job, name: '{{name}}-00', job_type: 'pull_request_generator', git_url: 'https://www.github.com/', git_repo: 'jenkins_pipeline_builder', git_org: 'constantcontact', jobs: ['{{name}}-10', '{{name}}-11'], builders: [{ shell_command: 'generate -v || gem install jenkins_pipeline_builder\ngenerate pipeline -c config/{{login_config}} pull_request pipeline/ {{name}}\n' }] }, '{{name}}-10', '{{name}}-11'] } } }
|
7
7
|
let(:jobs) { { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }] } }, '{{name}}-11' => { name: '{{name}}-11', type: :'job-template', value: { name: '{{name}}-11', description: '{{description}}' } } } }
|
8
8
|
let(:create_jobs) { [{ name: 'pull_req_test-PR5', type: :project, value: { name: 'pull_req_test-PR5', jobs: ['{{name}}-10', '{{name}}-11'], pull_request_number: '5' } }, { name: 'pull_req_test-PR6', type: :project, value: { name: 'pull_req_test-PR6', jobs: ['{{name}}-10', '{{name}}-11'], pull_request_number: '6' } }] }
|
9
|
-
let(:
|
9
|
+
let(:generator) { JenkinsPipelineBuilder::Generator.new }
|
10
10
|
before do
|
11
11
|
# Request to get current pull requests from github
|
12
12
|
stub_request(:any, 'https://www.github.com/api/v3/repos/constantcontact/jenkins_pipeline_builder/pulls').to_return(body: '[{"number": 5,"state": "open","title": "Update README again" },{"number": 6,"state": "open", "title": "Update README again2"}]')
|
@@ -16,13 +16,17 @@ describe JenkinsPipelineBuilder::PullRequestGenerator do
|
|
16
16
|
after(:all) do
|
17
17
|
FileUtils.rm_r 'pull_requests.csv'
|
18
18
|
end
|
19
|
+
|
19
20
|
it 'can work without a csv' do
|
20
|
-
|
21
|
+
pending 'rework this'
|
22
|
+
pull = pull_request_generator.new(project, generator)
|
23
|
+
generator.job_collection.collection = jobs
|
21
24
|
expect(pull.purge.count).to eq(0)
|
22
25
|
expect(pull.create).to eq(create_jobs)
|
23
26
|
end
|
24
27
|
it 'can work with a csv' do
|
25
|
-
|
28
|
+
pending 'rework this'
|
29
|
+
pull = pull_request_generator.new(project, generator)
|
26
30
|
expect(pull.purge.count).to eq(0)
|
27
31
|
expect(pull.create).to eq(create_jobs)
|
28
32
|
end
|
@@ -2,14 +2,20 @@ require File.expand_path('../spec_helper', __FILE__)
|
|
2
2
|
require 'webmock/rspec'
|
3
3
|
|
4
4
|
describe JenkinsPipelineBuilder::PullRequest do
|
5
|
+
before :each do
|
6
|
+
JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version = '1000.0'
|
7
|
+
end
|
8
|
+
after :each do
|
9
|
+
JenkinsPipelineBuilder.registry.registry[:job][:scm_params].clear_installed_version
|
10
|
+
end
|
5
11
|
let(:pull_request_class) { JenkinsPipelineBuilder::PullRequest }
|
6
12
|
let(:project) { { name: 'pull_req_test', type: :project, value: { name: 'pull_req_test', jobs: ['{{name}}-00', '{{name}}-10', '{{name}}-11'] } } }
|
7
|
-
let(:pull_request) { { name: '{{name}}-00', type: :job, name: '{{name}}-00', job_type: 'pull_request_generator', git_url: 'https://www.github.com/', git_repo: 'jenkins_pipeline_builder', git_org: 'constantcontact', jobs: ['{{name}}-10', '{{name}}-11'], builders: [{ shell_command: 'generate -v || gem install jenkins_pipeline_builder\ngenerate pipeline -c config/{{login_config}} pull_request pipeline/ {{name}}\n' }] } }
|
13
|
+
let(:pull_request) { { name: '{{name}}-00', type: :job, name: '{{name}}-00', job_type: 'pull_request_generator', git_url: 'https://www.github.com/', git_repo: 'jenkins_pipeline_builder', git_org: 'constantcontact', value: { jobs: ['{{name}}-10', '{{name}}-11'] }, builders: [{ shell_command: 'generate -v || gem install jenkins_pipeline_builder\ngenerate pipeline -c config/{{login_config}} pull_request pipeline/ {{name}}\n' }] } }
|
8
14
|
let(:jobs) { { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }] } }, '{{name}}-11' => { name: '{{name}}-11', type: :'job-template', value: { name: '{{name}}-11', description: '{{description}}' } } } }
|
9
15
|
describe '#initialize' do
|
10
16
|
it 'process pull_request' do
|
11
17
|
pull = pull_request_class.new(project, 2, jobs, pull_request)
|
12
|
-
post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull
|
18
|
+
post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { changelog_to_branch: { remote: 'origin', branch: 'pr/{{pull_request_number}}/head' }, refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' } } }, '{{name}}-11' => { name: '{{name}}-11', type: :'job-template', value: { name: '{{name}}-11', description: '{{description}}', scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { changelog_to_branch: { remote: 'origin', branch: 'pr/{{pull_request_number}}/head' }, refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' } } } }
|
13
19
|
post_project = { name: 'pull_req_test-PR2', type: :project, value: { name: 'pull_req_test-PR2', jobs: ['{{name}}-00', '{{name}}-10', '{{name}}-11'], pull_request_number: '2' } }
|
14
20
|
|
15
21
|
expect(pull.project).to eq(post_project)
|
@@ -23,7 +29,7 @@ describe JenkinsPipelineBuilder::PullRequest do
|
|
23
29
|
end
|
24
30
|
it 'process pull_request' do
|
25
31
|
pull = pull_request_class.new(project, 2, jobs, pull_request)
|
26
|
-
post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull
|
32
|
+
post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' } } }, '{{name}}-11' => { name: '{{name}}-11', type: :'job-template', value: { name: '{{name}}-11', description: '{{description}}', scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head' } } } }
|
27
33
|
expect(pull.jobs).to eq(post_jobs)
|
28
34
|
end
|
29
35
|
end
|
@@ -34,7 +40,7 @@ describe JenkinsPipelineBuilder::PullRequest do
|
|
34
40
|
end
|
35
41
|
it 'process pull_request' do
|
36
42
|
pull = pull_request_class.new(project, 2, jobs, pull_request)
|
37
|
-
post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull
|
43
|
+
post_jobs = { '{{name}}-10' => { name: '{{name}}-10', type: :'job-template', value: { name: '{{name}}-10', description: '{{description}}', publishers: [{ downstream: { project: '{{job@{{name}}-11}}' } }], scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head', changelog_to_branch: { remote: 'origin', branch: 'pr/{{pull_request_number}}/head' } } } }, '{{name}}-11' => { name: '{{name}}-11', type: :'job-template', value: { name: '{{name}}-11', description: '{{description}}', scm_branch: 'origin/pr/{{pull_request_number}}/head', scm_params: { refspec: 'refs/pull/{{pull_request_number}}/head:refs/remotes/origin/pr/{{pull_request_number}}/head', changelog_to_branch: { remote: 'origin', branch: 'pr/{{pull_request_number}}/head' } } } } }
|
38
44
|
expect(pull.jobs).to eq(post_jobs)
|
39
45
|
end
|
40
46
|
end
|
@@ -27,6 +27,7 @@ describe JenkinsPipelineBuilder::View do
|
|
27
27
|
stub_request(:any, 'http://username:password@127.0.0.1:8080/api/json').to_return(body: '{"assignedLabels":[{}],"mode":"NORMAL","nodeDescription":"the master Jenkins node","nodeName":"","numExecutors":2,"description":null,"jobs":[{"name":"PurgeTest-PR1","url":"http://localhost:8080/job/PurgeTest-PR1/","color":"notbuilt" },{"name":"PurgeTest-PR3","url":"http://localhost:8080/job/PurgeTest-PR3/","color":"notbuilt" },{"name":"PurgeTest-PR4","url":"http://localhost:8080/job/PurgeTest-PR4/","color":"notbuilt"}],"overallLoad":{},"primaryView":{"name":"All","url":"http://localhost:8080/" },"quietingDown":false,"slaveAgentPort":0,"unlabeledLoad":{},"useCrumbs":false,"useSecurity":true,"views":[{"name":"All","url":"http://localhost:8080/"}, {"name":"duplicate_view"}]}')
|
28
28
|
stub_request(:any, 'http://username:password@127.0.0.1:8080/view/ParentView/api/json').to_return(body: '{"assignedLabels":[{}],"mode":"NORMAL","nodeDescription":"the master Jenkins node","nodeName":"","numExecutors":2,"description":null,"jobs":[{"name":"PurgeTest-PR1","url":"http://localhost:8080/job/PurgeTest-PR1/","color":"notbuilt" },{"name":"PurgeTest-PR3","url":"http://localhost:8080/job/PurgeTest-PR3/","color":"notbuilt" },{"name":"PurgeTest-PR4","url":"http://localhost:8080/job/PurgeTest-PR4/","color":"notbuilt"}],"overallLoad":{},"primaryView":{"name":"All","url":"http://localhost:8080/" },"quietingDown":false,"slaveAgentPort":0,"unlabeledLoad":{},"useCrumbs":false,"useSecurity":true,"views":[{"name":"All","url":"http://localhost:8080/"}]}')
|
29
29
|
stub_request(:post, /.*/).to_return(status: 200) # Stop actual creating/deleting
|
30
|
+
allow(JenkinsPipelineBuilder).to receive(:debug).and_return false
|
30
31
|
end
|
31
32
|
context 'parent view is specified' do
|
32
33
|
it 'needs to create the parent view and view' 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.13
|
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-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -369,7 +369,6 @@ files:
|
|
369
369
|
- lib/jenkins_pipeline_builder/version.rb
|
370
370
|
- lib/jenkins_pipeline_builder/view.rb
|
371
371
|
- out/.keep
|
372
|
-
- out/xml/.keep
|
373
372
|
- pipeline/Jenkins-Pipeline-Builder.yaml
|
374
373
|
- pipeline/project.yaml
|
375
374
|
- spec/lib/jenkins_pipeline_builder/cli/helper_spec.rb
|
@@ -408,6 +407,7 @@ files:
|
|
408
407
|
- spec/lib/jenkins_pipeline_builder/fixtures/view_test/parent_view.yaml
|
409
408
|
- spec/lib/jenkins_pipeline_builder/fixtures/view_test/regular_view.yaml
|
410
409
|
- spec/lib/jenkins_pipeline_builder/generator_spec.rb
|
410
|
+
- spec/lib/jenkins_pipeline_builder/job_spec.rb
|
411
411
|
- spec/lib/jenkins_pipeline_builder/module_registry_spec.rb
|
412
412
|
- spec/lib/jenkins_pipeline_builder/pull_request_generator_spec.rb
|
413
413
|
- spec/lib/jenkins_pipeline_builder/pull_request_spec.rb
|
@@ -476,6 +476,7 @@ test_files:
|
|
476
476
|
- spec/lib/jenkins_pipeline_builder/fixtures/view_test/parent_view.yaml
|
477
477
|
- spec/lib/jenkins_pipeline_builder/fixtures/view_test/regular_view.yaml
|
478
478
|
- spec/lib/jenkins_pipeline_builder/generator_spec.rb
|
479
|
+
- spec/lib/jenkins_pipeline_builder/job_spec.rb
|
479
480
|
- spec/lib/jenkins_pipeline_builder/module_registry_spec.rb
|
480
481
|
- spec/lib/jenkins_pipeline_builder/pull_request_generator_spec.rb
|
481
482
|
- spec/lib/jenkins_pipeline_builder/pull_request_spec.rb
|