dynport_tools 0.2.21 → 0.2.22
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -1
- data/Gemfile.lock +9 -8
- data/VERSION +1 -1
- data/dynport_tools.gemspec +14 -7
- data/lib/dynport_tools/embedded_redis.rb +6 -2
- data/lib/dynport_tools/jenkins.rb +41 -211
- data/lib/dynport_tools/jenkins/project.rb +151 -0
- data/lib/dynport_tools/jenkins/remote_project.rb +67 -0
- data/spec/dynport_tools/embedded_redis_spec.rb +6 -5
- data/spec/dynport_tools/jenkins/project_spec.rb +211 -0
- data/spec/dynport_tools/jenkins/remote_project_spec.rb +83 -0
- data/spec/dynport_tools/jenkins_spec.rb +141 -280
- data/spec/dynport_tools/redis_q_spec.rb +36 -1
- data/spec/spec_helper.rb +2 -0
- metadata +82 -64
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -24,14 +24,14 @@ GEM
|
|
24
24
|
rbx-require-relative (0.0.5)
|
25
25
|
rcov (0.9.9)
|
26
26
|
redis (2.2.1)
|
27
|
-
rspec (2.
|
28
|
-
rspec-core (~> 2.
|
29
|
-
rspec-expectations (~> 2.
|
30
|
-
rspec-mocks (~> 2.
|
31
|
-
rspec-core (2.
|
32
|
-
rspec-expectations (2.
|
27
|
+
rspec (2.8.0)
|
28
|
+
rspec-core (~> 2.8.0)
|
29
|
+
rspec-expectations (~> 2.8.0)
|
30
|
+
rspec-mocks (~> 2.8.0)
|
31
|
+
rspec-core (2.8.0)
|
32
|
+
rspec-expectations (2.8.0)
|
33
33
|
diff-lcs (~> 1.1.2)
|
34
|
-
rspec-mocks (2.
|
34
|
+
rspec-mocks (2.8.0)
|
35
35
|
ruby-debug (0.10.4)
|
36
36
|
columnize (>= 0.1)
|
37
37
|
ruby-debug-base (~> 0.10.4.0)
|
@@ -58,10 +58,11 @@ DEPENDENCIES
|
|
58
58
|
guard
|
59
59
|
jeweler (~> 1.6.4)
|
60
60
|
nokogiri
|
61
|
+
rake
|
61
62
|
rb-fsevent
|
62
63
|
rcov
|
63
64
|
redis
|
64
|
-
rspec (
|
65
|
+
rspec (= 2.8.0)
|
65
66
|
ruby-debug
|
66
67
|
spork
|
67
68
|
term-ansicolor
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.22
|
data/dynport_tools.gemspec
CHANGED
@@ -5,14 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "dynport_tools"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.22"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tobias Schwab"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-02-28"
|
13
13
|
s.description = "Collection of various tools"
|
14
14
|
s.email = "tobias.schwab@dynport.de"
|
15
|
-
s.executables = ["
|
15
|
+
s.executables = ["redis_dumper", "xmldiff"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"LICENSE.txt",
|
18
18
|
"README.rdoc"
|
@@ -42,6 +42,8 @@ Gem::Specification.new do |s|
|
|
42
42
|
"lib/dynport_tools/features.rb",
|
43
43
|
"lib/dynport_tools/have_attributes.rb",
|
44
44
|
"lib/dynport_tools/jenkins.rb",
|
45
|
+
"lib/dynport_tools/jenkins/project.rb",
|
46
|
+
"lib/dynport_tools/jenkins/remote_project.rb",
|
45
47
|
"lib/dynport_tools/job_dsl.rb",
|
46
48
|
"lib/dynport_tools/log_tracer.rb",
|
47
49
|
"lib/dynport_tools/redis_dumper.rb",
|
@@ -56,6 +58,8 @@ Gem::Specification.new do |s|
|
|
56
58
|
"spec/dynport_tools/eta_spec.rb",
|
57
59
|
"spec/dynport_tools/features_spec.rb",
|
58
60
|
"spec/dynport_tools/have_attributes_spec.rb",
|
61
|
+
"spec/dynport_tools/jenkins/project_spec.rb",
|
62
|
+
"spec/dynport_tools/jenkins/remote_project_spec.rb",
|
59
63
|
"spec/dynport_tools/jenkins_spec.rb",
|
60
64
|
"spec/dynport_tools/job_dsl_spec.rb",
|
61
65
|
"spec/dynport_tools/log_tracer_spec.rb",
|
@@ -74,7 +78,7 @@ Gem::Specification.new do |s|
|
|
74
78
|
s.homepage = "http://github.com/tobstarr/dynport_tools"
|
75
79
|
s.licenses = ["MIT"]
|
76
80
|
s.require_paths = ["lib"]
|
77
|
-
s.rubygems_version = "1.8.
|
81
|
+
s.rubygems_version = "1.8.17"
|
78
82
|
s.summary = "Collection of various tools"
|
79
83
|
|
80
84
|
if s.respond_to? :specification_version then
|
@@ -86,7 +90,8 @@ Gem::Specification.new do |s|
|
|
86
90
|
s.add_runtime_dependency(%q<typhoeus>, [">= 0"])
|
87
91
|
s.add_runtime_dependency(%q<term-ansicolor>, [">= 0"])
|
88
92
|
s.add_runtime_dependency(%q<diff-lcs>, [">= 0"])
|
89
|
-
s.add_development_dependency(%q<
|
93
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
94
|
+
s.add_development_dependency(%q<rspec>, ["= 2.8.0"])
|
90
95
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
91
96
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
92
97
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
@@ -105,7 +110,8 @@ Gem::Specification.new do |s|
|
|
105
110
|
s.add_dependency(%q<typhoeus>, [">= 0"])
|
106
111
|
s.add_dependency(%q<term-ansicolor>, [">= 0"])
|
107
112
|
s.add_dependency(%q<diff-lcs>, [">= 0"])
|
108
|
-
s.add_dependency(%q<
|
113
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
114
|
+
s.add_dependency(%q<rspec>, ["= 2.8.0"])
|
109
115
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
110
116
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
111
117
|
s.add_dependency(%q<rcov>, [">= 0"])
|
@@ -125,7 +131,8 @@ Gem::Specification.new do |s|
|
|
125
131
|
s.add_dependency(%q<typhoeus>, [">= 0"])
|
126
132
|
s.add_dependency(%q<term-ansicolor>, [">= 0"])
|
127
133
|
s.add_dependency(%q<diff-lcs>, [">= 0"])
|
128
|
-
s.add_dependency(%q<
|
134
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
135
|
+
s.add_dependency(%q<rspec>, ["= 2.8.0"])
|
129
136
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
130
137
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
131
138
|
s.add_dependency(%q<rcov>, [">= 0"])
|
@@ -50,9 +50,13 @@ class DynportTools::EmbeddedRedis
|
|
50
50
|
connection
|
51
51
|
end
|
52
52
|
|
53
|
+
def self.system(cmd)
|
54
|
+
Kernel.send(:system, cmd)
|
55
|
+
end
|
56
|
+
|
53
57
|
def do_start!
|
54
58
|
FileUtils.mkdir_p(base_path)
|
55
|
-
system(%(echo "#{config}" | redis-server -))
|
59
|
+
self.class.system(%(echo "#{config}" | redis-server -))
|
56
60
|
sleep 0.1
|
57
61
|
self.started = true
|
58
62
|
log "started redis with pid #{pid}"
|
@@ -88,7 +92,7 @@ class DynportTools::EmbeddedRedis
|
|
88
92
|
log "killing redis"
|
89
93
|
if !killed? && pid
|
90
94
|
log "killing #{pid}"
|
91
|
-
system(%(kill #{pid}))
|
95
|
+
self.class.system(%(kill #{pid}))
|
92
96
|
FileUtils.rm_f(socket_path)
|
93
97
|
FileUtils.rm_f(dbfile_path)
|
94
98
|
self.killed = true
|
@@ -38,10 +38,14 @@ class DynportTools::Jenkins
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def post_request(path, options = nil)
|
41
|
-
|
41
|
+
clear_cache
|
42
42
|
Typhoeus::Request.post(*["#{url}/#{path}", options].compact)
|
43
43
|
end
|
44
44
|
|
45
|
+
def clear_cache
|
46
|
+
cache.clear
|
47
|
+
end
|
48
|
+
|
45
49
|
def cache
|
46
50
|
@cache ||= {}
|
47
51
|
end
|
@@ -74,221 +78,47 @@ class DynportTools::Jenkins
|
|
74
78
|
cache[:projects_details] = jobs
|
75
79
|
end
|
76
80
|
|
81
|
+
CONFIGURED_PROJECTS_HASH = :configured_projects_hash
|
82
|
+
|
83
|
+
def configured_projects_hash=(new_hash)
|
84
|
+
@configured_projects_hash = new_hash
|
85
|
+
end
|
86
|
+
|
87
|
+
def configured_projects_hash
|
88
|
+
@configured_projects_hash ||= {}
|
89
|
+
end
|
90
|
+
|
91
|
+
def configured_projects
|
92
|
+
configured_projects_hash.values
|
93
|
+
end
|
94
|
+
|
77
95
|
def remote_projects
|
78
96
|
project_details.inject({}) do |hash, (url, project_hash)|
|
79
|
-
hash
|
97
|
+
hash[project_hash[:name]] = RemoteProject.from_details_hash(project_hash)
|
98
|
+
hash
|
80
99
|
end
|
81
100
|
end
|
82
101
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
def initialize(options = {})
|
87
|
-
options.each do |key, value|
|
88
|
-
self.send(:"#{key}=", value) if self.respond_to?(:"#{key}=")
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def doc
|
93
|
-
@doc ||= Nokogiri::XML(xml) if xml
|
94
|
-
end
|
95
|
-
|
96
|
-
def md5
|
97
|
-
Digest::MD5.hexdigest(xml) if xml
|
98
|
-
end
|
99
|
-
|
100
|
-
def days_to_keep
|
101
|
-
logrotate_value_when_set("daysToKeep")
|
102
|
-
end
|
103
|
-
|
104
|
-
def num_to_keep
|
105
|
-
logrotate_value_when_set("numToKeep")
|
106
|
-
end
|
107
|
-
|
108
|
-
def logrotate_value_when_set(key)
|
109
|
-
if node = doc.at("/project/logRotator/#{key}")
|
110
|
-
node.inner_text.to_i if node.inner_text.to_i != -1
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def commands
|
115
|
-
doc.xpath("/project/builders/hudson.tasks.Shell/command").map(&:inner_text)
|
116
|
-
end
|
117
|
-
|
118
|
-
def crontab_patterns
|
119
|
-
doc.xpath("/project/triggers/hudson.triggers.TimerTrigger/spec").map(&:inner_text)
|
120
|
-
end
|
121
|
-
|
122
|
-
def disabled?
|
123
|
-
doc.at("/project/disabled/text()").to_s == "true"
|
124
|
-
end
|
125
|
-
|
126
|
-
def child_projects
|
127
|
-
if projects = doc.xpath("/project/publishers/hudson.tasks.BuildTrigger/childProjects").first
|
128
|
-
projects.inner_text.split(/\s*,\s*/)
|
129
|
-
else
|
130
|
-
[]
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def email_addresses
|
135
|
-
doc.xpath("/project/publishers/hudson.tasks.Mailer/recipients").map { |rec| rec.inner_text.split(",") }.flatten
|
136
|
-
end
|
137
|
-
|
138
|
-
def node
|
139
|
-
doc.xpath("/project/assignedNode").map { |n| n.inner_text }.first
|
140
|
-
end
|
141
|
-
|
142
|
-
def locks
|
143
|
-
doc.xpath("/project/buildWrappers/hudson.plugins.locksandlatches.LockWrapper/locks/hudson.plugins.locksandlatches.LockWrapper_-LockWaitConfig/name").map(&:inner_text)
|
144
|
-
end
|
102
|
+
def exists_remotely?(project)
|
103
|
+
remote_projects.keys.include?(project.name)
|
145
104
|
end
|
146
105
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
def md5
|
162
|
-
Digest::MD5.hexdigest(to_xml)
|
163
|
-
end
|
164
|
-
|
165
|
-
def log_rotate_xml(node)
|
166
|
-
node.logRotator do
|
167
|
-
node.daysToKeep days_to_keep || -1
|
168
|
-
node.numToKeep num_to_keep || -1
|
169
|
-
node.artifactDaysToKeep -1
|
170
|
-
node.artifactNumToKeep -1
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
def git_repository_xml(xml)
|
175
|
-
xml.send("org.spearce.jgit.transport.RemoteConfig") do
|
176
|
-
xml.string "origin"
|
177
|
-
xml.int 5
|
178
|
-
xml.string "fetch"
|
179
|
-
xml.string "+refs/heads/*:refs/remotes/origin/*"
|
180
|
-
xml.string "receivepack"
|
181
|
-
xml.string "git-upload-pack"
|
182
|
-
xml.string "uploadpack"
|
183
|
-
xml.string "git-upload-pack"
|
184
|
-
xml.string "url"
|
185
|
-
xml.string git_repository
|
186
|
-
xml.string "tagopt"
|
187
|
-
xml.string
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
def git_options_xml(xml)
|
192
|
-
xml.mergeOptions
|
193
|
-
xml.recursiveSubmodules false
|
194
|
-
xml.doGenerateSubmoduleConfigurations false
|
195
|
-
xml.authorOrCommitter false
|
196
|
-
xml.clean false
|
197
|
-
xml.wipeOutWorkspace false
|
198
|
-
xml.pruneBranches false
|
199
|
-
xml.buildChooser(:class => "hudson.plugins.git.util.DefaultBuildChooser")
|
200
|
-
xml.gitTool "Default"
|
201
|
-
xml.submoduleCfg(:class => "list")
|
202
|
-
xml.relativeTargetDir
|
203
|
-
xml.excludedRegion
|
204
|
-
xml.excludedUsers
|
205
|
-
xml.skipTag false
|
206
|
-
end
|
207
|
-
|
208
|
-
def git_xml(xml)
|
209
|
-
xml.scm(:class => GIT_SCM) do
|
210
|
-
xml.config_version 1
|
211
|
-
xml.remoteRepositories do
|
212
|
-
git_repository_xml(xml)
|
213
|
-
end
|
214
|
-
xml.branches do
|
215
|
-
xml.send("hudson.plugins.git.BranchSpec") do
|
216
|
-
xml.name "master"
|
217
|
-
end
|
218
|
-
end
|
219
|
-
git_options_xml(xml)
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
def to_xml
|
224
|
-
Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
|
225
|
-
xml.project do
|
226
|
-
xml.actions
|
227
|
-
xml.description *[description].compact
|
228
|
-
log_rotate_xml(xml) if days_to_keep || num_to_keep
|
229
|
-
xml.keepDependencies false
|
230
|
-
xml.properties
|
231
|
-
if git_repository
|
232
|
-
git_xml(xml)
|
233
|
-
else
|
234
|
-
xml.scm(:class => DEFAULT_SCM)
|
235
|
-
end
|
236
|
-
if node
|
237
|
-
xml.assignedNode node
|
238
|
-
xml.canRoam false
|
239
|
-
else
|
240
|
-
xml.canRoam true
|
241
|
-
end
|
242
|
-
xml.disabled disabled ? true : false
|
243
|
-
xml.blockBuildWhenDownstreamBuilding false
|
244
|
-
xml.blockBuildWhenUpstreamBuilding false
|
245
|
-
xml.triggers(:class => "vector") do
|
246
|
-
if crontab_pattern
|
247
|
-
xml.send("hudson.triggers.TimerTrigger") do
|
248
|
-
xml.spec crontab_pattern
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
xml.concurrentBuild false
|
253
|
-
xml.builders do
|
254
|
-
commands.each do |command|
|
255
|
-
xml.send("hudson.tasks.Shell") do
|
256
|
-
xml.command command
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
xml.publishers do
|
261
|
-
if child_projects.any?
|
262
|
-
xml.send("hudson.tasks.BuildTrigger") do
|
263
|
-
xml.childProjects child_projects.map { |c| c.name }.join(",")
|
264
|
-
xml.threshold do
|
265
|
-
xml.name "SUCCESS"
|
266
|
-
xml.ordinal "0"
|
267
|
-
xml.color "BLUE"
|
268
|
-
end
|
269
|
-
end
|
270
|
-
end
|
271
|
-
if email_addresses.any?
|
272
|
-
xml.send("hudson.tasks.Mailer") do
|
273
|
-
xml.recipients email_addresses.join(",")
|
274
|
-
xml.dontNotifyEveryUnstableBuild true
|
275
|
-
xml.sendToIndividuals false
|
276
|
-
end
|
277
|
-
end
|
278
|
-
end
|
279
|
-
xml.buildWrappers do
|
280
|
-
if locks.any?
|
281
|
-
xml.send("hudson.plugins.locksandlatches.LockWrapper") do
|
282
|
-
xml.locks do
|
283
|
-
locks.each do |lock|
|
284
|
-
xml.send("hudson.plugins.locksandlatches.LockWrapper_-LockWaitConfig") { xml.name lock }
|
285
|
-
end
|
286
|
-
end
|
287
|
-
end
|
288
|
-
end
|
289
|
-
end
|
290
|
-
end
|
291
|
-
end.to_xml
|
292
|
-
end
|
106
|
+
def projects_to_delete
|
107
|
+
configured_projects.select { |project| project.deleted? && exists_remotely?(project) }
|
108
|
+
end
|
109
|
+
|
110
|
+
def projects_to_create
|
111
|
+
configured_projects.select { |project| !project.deleted? && !exists_remotely?(project) }
|
112
|
+
end
|
113
|
+
|
114
|
+
def projects_to_update
|
115
|
+
configured_projects.select { | project| exists_remotely?(project) && !project.deleted? && (project.md5 != remote_projects[project.name].md5) }
|
116
|
+
end
|
117
|
+
|
118
|
+
def not_configured_projects
|
119
|
+
remote_projects.values.select { |project| !configured_projects_hash.keys.include?(project.name) }
|
293
120
|
end
|
294
|
-
end
|
121
|
+
end
|
122
|
+
|
123
|
+
require "dynport_tools/jenkins/project"
|
124
|
+
require "dynport_tools/jenkins/remote_project"
|
@@ -0,0 +1,151 @@
|
|
1
|
+
class DynportTools::Jenkins::Project
|
2
|
+
attr_accessor :name, :commands, :crontab_pattern, :days_to_keep, :num_to_keep, :node, :child_projects, :locks, :disabled
|
3
|
+
attr_accessor :description, :email_addresses, :git_repository, :delete
|
4
|
+
DEFAULT_SCM = "hudson.scm.NullSCM"
|
5
|
+
GIT_SCM = "hudson.plugins.git.GitSCM"
|
6
|
+
|
7
|
+
def initialize(name = nil)
|
8
|
+
self.name = name
|
9
|
+
self.commands = []
|
10
|
+
self.child_projects = []
|
11
|
+
self.email_addresses = []
|
12
|
+
self.locks = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def deleted?
|
16
|
+
!!@delete
|
17
|
+
end
|
18
|
+
|
19
|
+
def md5
|
20
|
+
Digest::MD5.hexdigest(to_xml)
|
21
|
+
end
|
22
|
+
|
23
|
+
def log_rotate_xml(node)
|
24
|
+
node.logRotator do
|
25
|
+
node.daysToKeep days_to_keep || -1
|
26
|
+
node.numToKeep num_to_keep || -1
|
27
|
+
node.artifactDaysToKeep -1
|
28
|
+
node.artifactNumToKeep -1
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def git_repository_xml(xml)
|
33
|
+
xml.send("org.spearce.jgit.transport.RemoteConfig") do
|
34
|
+
xml.string "origin"
|
35
|
+
xml.int 5
|
36
|
+
xml.string "fetch"
|
37
|
+
xml.string "+refs/heads/*:refs/remotes/origin/*"
|
38
|
+
xml.string "receivepack"
|
39
|
+
xml.string "git-upload-pack"
|
40
|
+
xml.string "uploadpack"
|
41
|
+
xml.string "git-upload-pack"
|
42
|
+
xml.string "url"
|
43
|
+
xml.string git_repository
|
44
|
+
xml.string "tagopt"
|
45
|
+
xml.string
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def git_options_xml(xml)
|
50
|
+
xml.mergeOptions
|
51
|
+
xml.recursiveSubmodules false
|
52
|
+
xml.doGenerateSubmoduleConfigurations false
|
53
|
+
xml.authorOrCommitter false
|
54
|
+
xml.clean false
|
55
|
+
xml.wipeOutWorkspace false
|
56
|
+
xml.pruneBranches false
|
57
|
+
xml.buildChooser(:class => "hudson.plugins.git.util.DefaultBuildChooser")
|
58
|
+
xml.gitTool "Default"
|
59
|
+
xml.submoduleCfg(:class => "list")
|
60
|
+
xml.relativeTargetDir
|
61
|
+
xml.excludedRegion
|
62
|
+
xml.excludedUsers
|
63
|
+
xml.skipTag false
|
64
|
+
end
|
65
|
+
|
66
|
+
def git_xml(xml)
|
67
|
+
xml.scm(:class => GIT_SCM) do
|
68
|
+
xml.config_version 1
|
69
|
+
xml.remoteRepositories do
|
70
|
+
git_repository_xml(xml)
|
71
|
+
end
|
72
|
+
xml.branches do
|
73
|
+
xml.send("hudson.plugins.git.BranchSpec") do
|
74
|
+
xml.name "master"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
git_options_xml(xml)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def to_xml
|
82
|
+
Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
|
83
|
+
xml.project do
|
84
|
+
xml.actions
|
85
|
+
xml.description *[description].compact
|
86
|
+
log_rotate_xml(xml) if days_to_keep || num_to_keep
|
87
|
+
xml.keepDependencies false
|
88
|
+
xml.properties
|
89
|
+
if git_repository
|
90
|
+
git_xml(xml)
|
91
|
+
else
|
92
|
+
xml.scm(:class => DEFAULT_SCM)
|
93
|
+
end
|
94
|
+
if node
|
95
|
+
xml.assignedNode node
|
96
|
+
xml.canRoam false
|
97
|
+
else
|
98
|
+
xml.canRoam true
|
99
|
+
end
|
100
|
+
xml.disabled disabled ? true : false
|
101
|
+
xml.blockBuildWhenDownstreamBuilding false
|
102
|
+
xml.blockBuildWhenUpstreamBuilding false
|
103
|
+
xml.triggers(:class => "vector") do
|
104
|
+
if crontab_pattern
|
105
|
+
xml.send("hudson.triggers.TimerTrigger") do
|
106
|
+
xml.spec crontab_pattern
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
xml.concurrentBuild false
|
111
|
+
xml.builders do
|
112
|
+
commands.each do |command|
|
113
|
+
xml.send("hudson.tasks.Shell") do
|
114
|
+
xml.command command
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
xml.publishers do
|
119
|
+
if child_projects.any?
|
120
|
+
xml.send("hudson.tasks.BuildTrigger") do
|
121
|
+
xml.childProjects child_projects.map { |c| c.name }.join(",")
|
122
|
+
xml.threshold do
|
123
|
+
xml.name "SUCCESS"
|
124
|
+
xml.ordinal "0"
|
125
|
+
xml.color "BLUE"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
if email_addresses.any?
|
130
|
+
xml.send("hudson.tasks.Mailer") do
|
131
|
+
xml.recipients email_addresses.join(",")
|
132
|
+
xml.dontNotifyEveryUnstableBuild true
|
133
|
+
xml.sendToIndividuals false
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
xml.buildWrappers do
|
138
|
+
if locks.any?
|
139
|
+
xml.send("hudson.plugins.locksandlatches.LockWrapper") do
|
140
|
+
xml.locks do
|
141
|
+
locks.each do |lock|
|
142
|
+
xml.send("hudson.plugins.locksandlatches.LockWrapper_-LockWaitConfig") { xml.name lock }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end.to_xml
|
150
|
+
end
|
151
|
+
end
|