hudson-remote-api 0.7.0 → 1.0.0
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 +7 -0
- data/.gitignore +4 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +20 -0
- data/README.md +11 -9
- data/Rakefile +10 -0
- data/fixtures/vcr_cassettes/TestHudsonBuildQueue_test_list.yml +38 -0
- data/fixtures/vcr_cassettes/TestHudsonBuild_setup.yml +407 -0
- data/fixtures/vcr_cassettes/TestHudsonBuild_test_build_info.yml +222 -0
- data/fixtures/vcr_cassettes/TestHudsonClient_test_build_job_.yml +52 -0
- data/fixtures/vcr_cassettes/TestHudsonClient_test_build_job_with_parameters_.yml +52 -0
- data/fixtures/vcr_cassettes/TestHudsonClient_test_build_queue_info.yml +38 -0
- data/fixtures/vcr_cassettes/TestHudsonClient_test_create_item_.yml +52 -0
- data/fixtures/vcr_cassettes/TestHudsonClient_test_delete_job_.yml +52 -0
- data/fixtures/vcr_cassettes/TestHudsonClient_test_job_build_info.yml +39 -0
- data/fixtures/vcr_cassettes/TestHudsonClient_test_job_config_info.yml +48 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_build.yml +409 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_build_with_params.yml +189 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_builds_list.yml +192 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_copy.yml +410 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_create.yml +257 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_desc_update.yml +281 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_get.yml +191 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_job_with_spaces.yml +260 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_list.yml +39 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_list_active.yml +39 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_new.yml +561 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_scm_url.yml +728 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_triggers_delete.yml +588 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_triggers_set.yml +346 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_triggers_set_using_shortcut.yml +346 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_url.yml +156 -0
- data/fixtures/vcr_cassettes/TestHudsonJob_test_wipe_out_workspace.yml +685 -0
- data/hudson-remote-api.gemspec +23 -0
- data/lib/hudson-remote-api.rb +3 -128
- data/lib/hudson-remote-api/build.rb +18 -35
- data/lib/hudson-remote-api/build_queue.rb +13 -20
- data/lib/hudson-remote-api/client.rb +179 -0
- data/lib/hudson-remote-api/hudson_xml_api.rb +61 -0
- data/lib/hudson-remote-api/job.rb +207 -345
- data/lib/hudson-remote-api/parser/build_info.rb +37 -0
- data/lib/hudson-remote-api/parser/build_queue_info.rb +19 -0
- data/lib/hudson-remote-api/parser/job_config_info.rb +99 -0
- data/lib/hudson-remote-api/parser/job_info.rb +62 -0
- data/lib/hudson-remote-api/parser/multicast.rb +28 -0
- data/lib/hudson-remote-api/parser/server_info.rb +49 -0
- data/lib/hudson-remote-api/settings.rb +31 -0
- data/lib/hudson-remote-api/version.rb +3 -0
- data/lib/hudson-remote-api/xml_writer/job_config_info.rb +113 -0
- data/test/test_helper.rb +10 -0
- data/test/test_hudson_build.rb +28 -0
- data/test/test_hudson_build_queue.rb +11 -0
- data/test/test_hudson_client.rb +65 -0
- data/test/test_hudson_job.rb +162 -0
- data/test/test_hudson_multicast.rb +9 -0
- data/test/test_hudson_settings.rb +70 -0
- metadata +71 -53
- data/lib/hudson-remote-api/config.rb +0 -46
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "hudson-remote-api/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "hudson-remote-api"
|
7
|
+
s.version = Hudson::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Dru Ibarra"]
|
10
|
+
s.email = ["Druwerd@gmail.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Connect to Hudson's remote web API}
|
13
|
+
s.description = %q{Connect to Hudson's remote web API}
|
14
|
+
|
15
|
+
#s.add_development_dependency "rspec"
|
16
|
+
|
17
|
+
s.rubyforge_project = "hudson-remote-api"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
data/lib/hudson-remote-api.rb
CHANGED
@@ -1,130 +1,5 @@
|
|
1
|
-
# This set of classes provides a Ruby interface to Hudson's web xml API
|
2
|
-
#
|
3
|
-
# Author:: Dru Ibarra
|
4
|
-
|
5
|
-
require 'net/http'
|
6
|
-
require "net/https"
|
7
1
|
require 'uri'
|
8
|
-
require '
|
9
|
-
require '
|
10
|
-
require 'yaml'
|
11
|
-
require 'zlib'
|
12
|
-
require File.dirname(__FILE__) + '/hudson-remote-api/config.rb'
|
13
|
-
|
14
|
-
module Hudson
|
15
|
-
# Base class for all Hudson objects
|
16
|
-
class HudsonObject
|
17
|
-
|
18
|
-
def self.hudson_request(uri,request)
|
19
|
-
Net::HTTP.start(uri.host, uri.port) do |http|
|
20
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
21
|
-
if uri.scheme == 'https'
|
22
|
-
http.use_ssl = true
|
23
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
24
|
-
end
|
25
|
-
http.request(request)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.load_xml_api
|
30
|
-
@@hudson_xml_api_path = File.join(Hudson[:url], "api/xml")
|
31
|
-
@@xml_api_create_item_path = File.join(Hudson[:url], "createItem")
|
32
|
-
end
|
33
|
-
|
34
|
-
load_xml_api
|
35
|
-
|
36
|
-
def self.url_for(path)
|
37
|
-
File.join Hudson[:url], path
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.get_xml(url)
|
41
|
-
uri = URI.parse(URI.encode(url))
|
42
|
-
host = uri.host
|
43
|
-
port = uri.port
|
44
|
-
path = uri.path
|
45
|
-
request = Net::HTTP::Get.new(path)
|
46
|
-
request.basic_auth(Hudson[:user], Hudson[:password]) if Hudson[:user] and Hudson[:password]
|
47
|
-
request['Content-Type'] = "text/xml"
|
48
|
-
response = hudson_request(uri,request)
|
49
|
-
|
50
|
-
if response.is_a?(Net::HTTPSuccess) or response.is_a?(Net::HTTPRedirection)
|
51
|
-
encoding = response.get_fields("Content-Encoding")
|
52
|
-
if encoding and encoding.include?("gzip")
|
53
|
-
return Zlib::GzipReader.new(StringIO.new(response.body)).read
|
54
|
-
else
|
55
|
-
return response.body
|
56
|
-
end
|
57
|
-
else
|
58
|
-
$stderr.puts response.body
|
59
|
-
raise APIError, "Error retrieving #{path}"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def get_xml(path)
|
64
|
-
self.class.get_xml(path)
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.send_post_request(url, data={})
|
68
|
-
uri = URI.parse(URI.encode(url))
|
69
|
-
host = uri.host
|
70
|
-
port = uri.port
|
71
|
-
path = uri.path
|
72
|
-
request = Net::HTTP::Post.new(path)
|
73
|
-
request.basic_auth(Hudson[:user], Hudson[:password]) if Hudson[:user] and Hudson[:password]
|
74
|
-
request.set_form_data(data)
|
75
|
-
request.add_field(crumb.name, crumb.value) if crumb
|
76
|
-
hudson_request(uri,request)
|
77
|
-
end
|
78
|
-
|
79
|
-
def send_post_request(url, data={})
|
80
|
-
self.class.send_post_request(url, data)
|
81
|
-
end
|
82
|
-
|
83
|
-
def self.send_xml_post_request(url, xml, data=nil)
|
84
|
-
uri = URI.parse(URI.encode(url))
|
85
|
-
host = uri.host
|
86
|
-
port = uri.port
|
87
|
-
path = uri.path
|
88
|
-
path = path+"?"+uri.query if uri.query
|
89
|
-
request = Net::HTTP::Post.new(path)
|
90
|
-
request.basic_auth(Hudson[:user], Hudson[:password]) if Hudson[:user] and Hudson[:password]
|
91
|
-
request.set_form_data(data) if data
|
92
|
-
request.add_field(crumb.name, crumb.value) if crumb
|
93
|
-
request.body = xml
|
94
|
-
hudson_request(uri,request)
|
95
|
-
end
|
96
|
-
|
97
|
-
def send_xml_post_request(url, xml, data=nil)
|
98
|
-
self.class.send_xml_post_request(url, xml, data)
|
99
|
-
end
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
def self.crumb
|
104
|
-
@@apiCrumb ||= nil
|
105
|
-
end
|
106
|
-
|
107
|
-
def self.fetch_crumb
|
108
|
-
if Hudson[:crumb]
|
109
|
-
body = get_xml(url_for '/crumbIssuer/api/xml')
|
110
|
-
doc = REXML::Document.new(body)
|
111
|
-
|
112
|
-
crumbValue = doc.elements['/defaultCrumbIssuer/crumb'] or begin
|
113
|
-
$stderr.puts "Failure fetching crumb value from server"
|
114
|
-
return
|
115
|
-
end
|
116
|
-
|
117
|
-
crumbName = doc.elements['/defaultCrumbIssuer/crumbRequestField'] or begin
|
118
|
-
$stderr.puts "Failure fetching crumb field name from server"
|
119
|
-
return
|
120
|
-
end
|
121
|
-
|
122
|
-
@@apiCrumb = Struct.new(:name,:value).new(crumbName.text,crumbValue.text)
|
123
|
-
end
|
124
|
-
rescue
|
125
|
-
$stderr.puts "Failure fetching crumb xml"
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
2
|
+
require 'net/http'
|
3
|
+
require './lib/hudson-remote-api/client.rb'
|
129
4
|
|
130
|
-
Dir[File.dirname(__FILE__) + '/hudson-remote-api
|
5
|
+
Dir[File.dirname(__FILE__) + '/hudson-remote-api/**/*.rb'].each {|file| require file }
|
@@ -1,41 +1,24 @@
|
|
1
1
|
module Hudson
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
def initialize(job, build_number=nil)
|
6
|
-
@job = Job.new(job) if job.kind_of?(String)
|
7
|
-
@job = job if job.kind_of?(Hudson::Job)
|
8
|
-
if build_number
|
9
|
-
@number = build_number
|
10
|
-
else
|
11
|
-
@number = @job.last_build
|
12
|
-
end
|
13
|
-
@revisions = {}
|
14
|
-
@xml_api_build_info_path = File.join(Hudson[:url], "job/#{@job.name}/#{@number}/api/xml")
|
15
|
-
load_build_info
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
def load_build_info
|
20
|
-
|
21
|
-
build_info_xml = patch_bad_git_xml(get_xml(@xml_api_build_info_path))
|
22
|
-
build_info_doc = REXML::Document.new(build_info_xml)
|
23
|
-
|
24
|
-
if build_info_doc.elements["/freeStyleBuild/result"]
|
25
|
-
@result = build_info_doc.elements["/freeStyleBuild/result"].text
|
26
|
-
end
|
27
|
-
if !build_info_doc.elements["/freeStyleBuild/changeSet"].nil?
|
28
|
-
build_info_doc.elements.each("/freeStyleBuild/changeSet/revision"){|e| @revisions[e.elements["module"].text] = e.elements["revision"].text }
|
29
|
-
end
|
2
|
+
class Build
|
3
|
+
attr_reader :number, :job, :revisions, :result, :culprit
|
30
4
|
|
31
|
-
|
32
|
-
|
33
|
-
|
5
|
+
def initialize(job, build_number=nil)
|
6
|
+
@job = Job.new(job) if job.kind_of?(String)
|
7
|
+
@job = job if job.kind_of?(Hudson::Job)
|
8
|
+
@number = build_number || @job.last_build
|
9
|
+
@revisions = {}
|
10
|
+
load_build_info
|
11
|
+
end
|
34
12
|
|
35
|
-
|
13
|
+
private
|
14
|
+
def load_build_info
|
15
|
+
build_info_xml = Hudson.client.job_build_info(self.job.name, self.number)
|
16
|
+
build_info_parser = Hudson::Parser::BuildInfo.new(build_info_xml)
|
36
17
|
|
37
|
-
|
38
|
-
|
18
|
+
@result = build_info_parser.result
|
19
|
+
@revisions = build_info_parser.revisions
|
20
|
+
@culprit = build_info_parser.culprit
|
39
21
|
end
|
40
|
-
|
22
|
+
|
23
|
+
end
|
41
24
|
end
|
@@ -1,23 +1,16 @@
|
|
1
1
|
module Hudson
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
def self.list()
|
13
|
-
xml = get_xml(@@xml_api_build_queue_info_path)
|
14
|
-
queue = []
|
15
|
-
queue_doc = REXML::Document.new(xml)
|
16
|
-
return queue if queue_doc.elements["/queue/item"].nil?
|
17
|
-
queue_doc.each_element("/queue/item/task") do |job|
|
18
|
-
queue << job.elements["name"].text
|
19
|
-
end
|
20
|
-
queue
|
21
|
-
end
|
2
|
+
# This class provides an interface to Hudson's build queue
|
3
|
+
class BuildQueue
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def list
|
7
|
+
xml = Hudson.client.build_queue_info
|
8
|
+
build_queue_info_parser = Hudson::Parser::BuildQueueInfo.new(xml)
|
9
|
+
|
10
|
+
build_queue_info_parser.items
|
11
|
+
end
|
22
12
|
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
23
16
|
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/multicast.rb'
|
2
|
+
|
3
|
+
module Hudson
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def client(config_settings={})
|
7
|
+
@client ||= Client.new(config_settings)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Client
|
12
|
+
attr_reader :configuration, :xml_api
|
13
|
+
|
14
|
+
def initialize(config_settings={})
|
15
|
+
@configuration = ::Hudson::Settings.new(config_settings).configuration
|
16
|
+
@xml_api = ::Hudson::XmlApi.new(self.configuration)
|
17
|
+
fetch_crumb
|
18
|
+
end
|
19
|
+
|
20
|
+
def auto_configure
|
21
|
+
xml_response = ::Hudson.discover
|
22
|
+
if xml_response
|
23
|
+
mulitcast_parser = ::Hudson::Parser::Multicast.new(xml_response)
|
24
|
+
self.configuration.host = mulitcast_parser.url || self.configuration.host
|
25
|
+
self.configuration.version = mulitcast_parser.version || self.configuration.version
|
26
|
+
puts "found Hudson version #{mulitcast_parser.version} @ #{mulitcast_parser.url}"
|
27
|
+
return !mulitcast_parser.url.nil?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def job_build_info(job_name, build_number)
|
32
|
+
get_xml(self.xml_api.build_info_url(job_name, build_number))
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_queue_info
|
36
|
+
get_xml(self.xml_api.build_queue_info_url)
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_job!(job_name, delay=0)
|
40
|
+
send_post_request(self.xml_api.build_url(job_name), {:delay => "#{delay}sec"})
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_job_with_parameters!(job_name, params, delay=0)
|
44
|
+
send_post_request(self.xml_api.build_with_parameters_url(job_name), {:delay => "#{delay}sec"}.merge(params) )
|
45
|
+
end
|
46
|
+
|
47
|
+
def job_config_info(job_name)
|
48
|
+
get_xml(self.xml_api.job_config_url(job_name))
|
49
|
+
end
|
50
|
+
|
51
|
+
def create_item!(params)
|
52
|
+
send_post_request(self.xml_api.create_item_url, params)
|
53
|
+
end
|
54
|
+
|
55
|
+
def delete_job!(job_name)
|
56
|
+
send_post_request(self.xml_api.delete_url(job_name))
|
57
|
+
end
|
58
|
+
|
59
|
+
def disable_job!(job_name)
|
60
|
+
send_post_request(self.xml_api.disable_url(job_name))
|
61
|
+
end
|
62
|
+
|
63
|
+
def enable_job!(job_name)
|
64
|
+
send_post_request(self.xml_api.enable_url(job_name))
|
65
|
+
end
|
66
|
+
|
67
|
+
def job_info(job_name)
|
68
|
+
get_xml(self.xml_api.job_info_url(job_name))
|
69
|
+
end
|
70
|
+
|
71
|
+
def server_info
|
72
|
+
get_xml(self.xml_api.server_info_url)
|
73
|
+
end
|
74
|
+
|
75
|
+
def update_job_config!(job_name, config)
|
76
|
+
send_xml_post_request(self.xml_api.job_config_url(job_name), config)
|
77
|
+
end
|
78
|
+
|
79
|
+
def wipeout_job_workspace!(job_name)
|
80
|
+
send_post_request(self.xml_api.wipeout_workspace_url(job_name))
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
def patch_bad_git_xml(xml)
|
85
|
+
xml.gsub(/<(\/?)origin\/([_a-zA-Z0-9\-\.]+)>/, '<\1origin-\2>')
|
86
|
+
end
|
87
|
+
|
88
|
+
def http_class
|
89
|
+
if self.configuration.proxy_host && self.configuration.proxy_port
|
90
|
+
::Net::HTTP::Proxy(self.configuration.proxy_host, self.configuration.proxy_port)
|
91
|
+
else
|
92
|
+
::Net::HTTP
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def hudson_request(uri,request)
|
97
|
+
http_class.start(uri.host, uri.port) do |http|
|
98
|
+
http = http_class.new(uri.host, uri.port)
|
99
|
+
if uri.scheme == 'https'
|
100
|
+
http.use_ssl = true
|
101
|
+
http.verify_mode = ::OpenSSL::SSL::VERIFY_NONE
|
102
|
+
end
|
103
|
+
http.request(request)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def get_xml(url)
|
108
|
+
uri = ::URI.parse(URI.encode(url))
|
109
|
+
request = http_class::Get.new(uri.path).tap do |r|
|
110
|
+
r.basic_auth(self.configuration.user, self.configuration.password) if self.configuration.user && self.configuration.password
|
111
|
+
r['Content-Type'] = "text/xml"
|
112
|
+
end
|
113
|
+
|
114
|
+
response = hudson_request(uri,request)
|
115
|
+
|
116
|
+
if response.is_a?(::Net::HTTPSuccess) or response.is_a?(::Net::HTTPRedirection)
|
117
|
+
encoding = response.get_fields("Content-Encoding")
|
118
|
+
if encoding and encoding.include?("gzip")
|
119
|
+
return ::Zlib::GzipReader.new(::StringIO.new(response.body)).read
|
120
|
+
else
|
121
|
+
return response.body
|
122
|
+
end
|
123
|
+
else
|
124
|
+
$stderr.puts response.body
|
125
|
+
raise APIError, "Error retrieving #{uri.path}"
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def send_post_request(url, data={})
|
130
|
+
uri = ::URI.parse(::URI.encode(url))
|
131
|
+
request = http_class::Post.new(uri.path).tap do |r|
|
132
|
+
r.basic_auth(self.configuration.user, self.configuration.password) if self.configuration.user && self.configuration.password
|
133
|
+
r.set_form_data(data)
|
134
|
+
r.add_field(crumb.name, crumb.value) if crumb
|
135
|
+
end
|
136
|
+
|
137
|
+
hudson_request(uri,request)
|
138
|
+
end
|
139
|
+
|
140
|
+
def send_xml_post_request(url, xml, data=nil)
|
141
|
+
uri = ::URI.parse(URI.encode(url))
|
142
|
+
path = uri.query ? "#{uri.path}?#{uri.query}" : uri.path
|
143
|
+
request = http_class::Post.new(path).tap do |r|
|
144
|
+
r.basic_auth(self.configuration.user, self.configuration.password) if self.configuration.user && self.configuration.password
|
145
|
+
r.set_form_data(data) if data
|
146
|
+
r.add_field(crumb.name, crumb.value) if crumb
|
147
|
+
r.body = xml
|
148
|
+
end
|
149
|
+
|
150
|
+
hudson_request(uri,request)
|
151
|
+
end
|
152
|
+
|
153
|
+
def crumb
|
154
|
+
@@apiCrumb ||= nil
|
155
|
+
end
|
156
|
+
|
157
|
+
def fetch_crumb
|
158
|
+
if self.configuration.crumb
|
159
|
+
body = get_xml(self.xml_api.crumb_url)
|
160
|
+
doc = ::REXML::Document.new(body)
|
161
|
+
|
162
|
+
crumbValue = doc.elements['/defaultCrumbIssuer/crumb'] or begin
|
163
|
+
$stderr.puts "Failure fetching crumb value from server"
|
164
|
+
return
|
165
|
+
end
|
166
|
+
|
167
|
+
crumbName = doc.elements['/defaultCrumbIssuer/crumbRequestField'] or begin
|
168
|
+
$stderr.puts "Failure fetching crumb field name from server"
|
169
|
+
return
|
170
|
+
end
|
171
|
+
|
172
|
+
@@apiCrumb = ::Struct.new(:name,:value).new(crumbName.text,crumbValue.text)
|
173
|
+
end
|
174
|
+
rescue
|
175
|
+
$stderr.puts "Failure fetching crumb xml"
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Hudson
|
2
|
+
class XmlApi
|
3
|
+
attr_accessor :host
|
4
|
+
|
5
|
+
def initialize(configuration)
|
6
|
+
self.host = configuration.host
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_url(job_name)
|
10
|
+
File.join(self.host, "job/#{job_name}/build")
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_info_url(job_name, build_number)
|
14
|
+
File.join(self.host, "job/#{job_name}/#{build_number}/api/xml")
|
15
|
+
end
|
16
|
+
|
17
|
+
def build_queue_info_url
|
18
|
+
File.join(self.host, "queue/api/xml")
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_with_parameters_url(job_name)
|
22
|
+
File.join(self.host, "job/#{job_name}/buildWithParameters")
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_item_url
|
26
|
+
File.join(self.host, "createItem")
|
27
|
+
end
|
28
|
+
|
29
|
+
def crumb_url
|
30
|
+
File.join(self.host, "/crumbIssuer/api/xml")
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete_url(job_name)
|
34
|
+
File.join(self.host, "job/#{job_name}/doDelete")
|
35
|
+
end
|
36
|
+
|
37
|
+
def disable_url(job_name)
|
38
|
+
File.join(self.host, "job/#{job_name}/disable")
|
39
|
+
end
|
40
|
+
|
41
|
+
def enable_url(job_name)
|
42
|
+
File.join(self.host, "job/#{job_name}/enable")
|
43
|
+
end
|
44
|
+
|
45
|
+
def job_info_url(job_name)
|
46
|
+
File.join(self.host, "job/#{job_name}/api/xml")
|
47
|
+
end
|
48
|
+
|
49
|
+
def job_config_url(job_name)
|
50
|
+
File.join(self.host, "job/#{job_name}/config.xml")
|
51
|
+
end
|
52
|
+
|
53
|
+
def server_info_url
|
54
|
+
File.join(self.host, "api/xml")
|
55
|
+
end
|
56
|
+
|
57
|
+
def wipeout_workspace_url(job_name)
|
58
|
+
File.join(self.host, "job/#{job_name}/doWipeOutWorkspace")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|