jenkins_pipeline_builder 0.10.12 → 0.10.13
Sign up to get free protection for your applications and to get access to all the features.
- 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
|