jenkins_api_client 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,14 @@
1
+ = jenkins_api_client
2
+
3
+ Client libraries for communicating with a Jenkins CI server
4
+
5
+ == Sample Usage:
6
+
7
+ Install jenkins_api_client by <tt>sudo gem install jenkins_api_client</tt>
8
+
9
+ require 'jenkins_api_client'
10
+
11
+ client = JenkinsApi::Client.new(:server_ip => '0.0.0.0',
12
+ :username => 'somename', :password => 'secret password')
13
+ # The following call will return all jobs matching 'Testjob'
14
+ puts client.job.list("^Testjob")
@@ -12,11 +12,17 @@ require File.expand_path('../job', __FILE__)
12
12
  module JenkinsApi
13
13
  class Client
14
14
 
15
- attr_accessor :server_ip, :server_port, :username, :password
16
15
  DEFAULT_SERVER_PORT = 8080
17
16
  VALID_PARAMS = %w(server_ip server_port username password)
18
17
 
18
+ # Initialize a Client object with Jenkins CI server information and credentials
19
+ #
19
20
  # @param [Hash] args
21
+ # * the +:server_ip+ param is the IP address of the Jenkins CI server
22
+ # * the +:server_port+ param is the port on which the Jenkins server listens
23
+ # * the +:username+ param is the username used for connecting to the CI server
24
+ # * the +:password+ param is the password for connecting to the CI server
25
+ #
20
26
  def initialize(args)
21
27
  args.each { |key, value|
22
28
  instance_variable_set("@#{key}", value) if value
@@ -26,14 +32,22 @@ module JenkinsApi
26
32
  @server_port = DEFAULT_SERVER_PORT unless @server_port
27
33
  end
28
34
 
35
+ # Creates an instance to the Job object by passing a reference to self
36
+ #
29
37
  def job
30
38
  JenkinsApi::Client::Job.new(self)
31
39
  end
32
40
 
41
+ # Returns a string representing the class name
42
+ #
33
43
  def to_s
34
44
  "#<JenkinsApi::Client>"
35
45
  end
36
46
 
47
+ # Sends a GET request to the Jenkins CI server with the specified URL
48
+ #
49
+ # @param [String] url_prefix
50
+ #
37
51
  def api_get_request(url_prefix)
38
52
  http = Net::HTTP.start(@server_ip, @server_port)
39
53
  request = Net::HTTP::Get.new("#{url_prefix}/api/json")
@@ -42,6 +56,10 @@ module JenkinsApi
42
56
  JSON.parse(response.body)
43
57
  end
44
58
 
59
+ # Sends a POST message to the Jenkins CI server with the specified URL
60
+ #
61
+ # @param [String] url_prefix
62
+ #
45
63
  def api_post_request(url_prefix)
46
64
  http = Net::HTTP.start(@server_ip, @server_port)
47
65
  request = Net::HTTP::Post.new("#{url_prefix}")
@@ -49,7 +67,10 @@ module JenkinsApi
49
67
  response = http.request(request)
50
68
  end
51
69
 
52
-
70
+ # Obtains the configuration of a component from the Jenkins CI server
71
+ #
72
+ # @param [String] url_prefix
73
+ #
53
74
  def get_config(url_prefix)
54
75
  http = Net::HTTP.start(@server_ip, @server_port)
55
76
  request = Net::HTTP::Get.new("#{url_prefix}/config.xml")
@@ -58,6 +79,11 @@ module JenkinsApi
58
79
  response.body
59
80
  end
60
81
 
82
+ # Posts the given xml configuration to the url given
83
+ #
84
+ # @param [String] url_prefix
85
+ # @param [String] xml
86
+ #
61
87
  def post_config(url_prefix, xml)
62
88
  http = Net::HTTP.start(@server_ip, @server_port)
63
89
  request = Net::HTTP::Post.new("#{url_prefix}/config.xml")
@@ -2,14 +2,14 @@ module JenkinsApi
2
2
  class Client
3
3
  class Job
4
4
 
5
+ # Initialize the Job object and store the reference to Client object
6
+ #
5
7
  def initialize(client)
6
8
  @client = client
7
9
  end
8
10
 
9
- def test_method
10
- puts "Username is: #{@client}"
11
- end
12
-
11
+ # List all jobs on the Jenkins CI server
12
+ #
13
13
  def list_all
14
14
  response_json = @client.api_get_request("")
15
15
  jobs = []
@@ -19,6 +19,10 @@ module JenkinsApi
19
19
  jobs.sort!
20
20
  end
21
21
 
22
+ # List all jobs that match the given regex
23
+ #
24
+ # @param [String] filter - a regex
25
+ #
22
26
  def list(filter)
23
27
  response_json = @client.api_get_request("")
24
28
  jobs = []
@@ -28,52 +32,130 @@ module JenkinsApi
28
32
  jobs
29
33
  end
30
34
 
35
+ # List all jobs on the Jenkins CI server along with their details
36
+ #
31
37
  def list_all_with_details
32
38
  response_json = @client.api_get_request("")
33
39
  response_json["jobs"]
34
40
  end
35
41
 
42
+ # List details of a specific job
43
+ #
44
+ # @param [String] job_name
45
+ #
36
46
  def list_details(job_name)
37
47
  @client.api_get_request("/job/#{job_name}")
38
48
  end
39
49
 
50
+ # List upstream projects of a specific job
51
+ #
52
+ # @param [String] job_name
53
+ #
40
54
  def get_upstream_projects(job_name)
41
55
  response_json = @client.api_get_request("/job/#{job_name}")
42
56
  response_json["upstreamProjects"]
43
57
  end
44
58
 
59
+ # List downstream projects of a specific job
60
+ #
61
+ # @param [String] job_name
62
+ #
45
63
  def get_downstream_projects(job_name)
46
64
  response_json = @client.api_get_request("/job/#{job_name}")
47
65
  response_json["downstreamProjects"]
48
66
  end
49
67
 
68
+ # Obtain build details of a specific job
69
+ #
70
+ # @param [String] job_name
71
+ #
50
72
  def get_builds(job_name)
51
73
  response_json = @client.api_get_request("/job/#{job_name}")
52
74
  response_json["builds"]
53
75
  end
54
76
 
77
+ # Obtain the current build status of the job
78
+ # By defaule Jenkins returns the color of the job status icon
79
+ # This function translates the color into a meaningful status
80
+ #
81
+ # @param [String] job_name
82
+ #
83
+ def get_current_build_status(job_name)
84
+ response_json = @client.api_get_request("/job/#{job_name}")
85
+ case response_json["color"]
86
+ when "blue"
87
+ "success"
88
+ when "red"
89
+ "failure"
90
+ when "yellow"
91
+ "unstable"
92
+ when "grey_anime", "blue_anime", "red_anime"
93
+ "running"
94
+ when "grey"
95
+ "not run"
96
+ when "aborted"
97
+ "aborted"
98
+ end
99
+ end
100
+
101
+ # This functions lists all jobs that are currently running on the Jenkins CI server
102
+ #
103
+ def list_running
104
+ jobs = list_all
105
+ running_jobs = []
106
+ jobs.each { |job|
107
+ running_jobs << job if get_current_build_status(job) == "running"
108
+ }
109
+ running_jobs
110
+ end
111
+
112
+ # Build a job given the name of the job
113
+ #
114
+ # @param [String] job_name
115
+ #
55
116
  def build(job_name)
56
117
  @client.api_post_request("/job/#{job_name}/build")
57
118
  end
58
119
 
120
+ # Obtain the configuration stored in config.xml of a specific job
121
+ #
122
+ # @param [String] job_name
123
+ #
59
124
  def get_config(job_name)
60
125
  @client.get_config("/job/#{job_name}")
61
126
  end
62
127
 
128
+ # Post the configuration of a job given the job name and the config.xml
129
+ #
130
+ # @param [String] job_name
131
+ # @param [String] xml
132
+ #
63
133
  def post_config(job_name, xml)
64
134
  @client.post_config("/job/#{job_name}", xml)
65
135
  end
66
136
 
67
- def change_description(job_name)
137
+ # Change the description of a specific job
138
+ #
139
+ # @param [String] job_name
140
+ # @param [String] description
141
+ #
142
+ def change_description(job_name, description)
68
143
  xml = get_config(job_name)
69
144
  n_xml = Nokogiri::XML(xml)
70
145
  desc = n_xml.xpath("//description").first
71
- desc.content = "Some description"
146
+ desc.content = "#{description}"
72
147
  xml_modified = n_xml.to_xml
73
148
  post_config(job_name, xml_modified)
74
149
  end
75
150
 
76
- def add_downstream_projects(job_name, downstream_project, threshold = 'success')
151
+ # Add downstream projects to a specific job given the job name, projects to be
152
+ # added as downstream projects, and the threshold
153
+ #
154
+ # @param [String] job_name
155
+ # @param [String] downstream_projects
156
+ # @param [String] threshold - failure, success, or unstable
157
+ #
158
+ def add_downstream_projects(job_name, downstream_projects, threshold = 'success')
77
159
  case threshold
78
160
  when 'success'
79
161
  name = 'SUCCESS'
@@ -92,11 +174,11 @@ module JenkinsApi
92
174
  n_xml = Nokogiri::XML(xml)
93
175
  child_projects_node = n_xml.xpath("//childProjects").first
94
176
  if child_projects_node
95
- child_projects_node.content = child_projects_node.content + ", #{downstream_project}"
177
+ child_projects_node.content = child_projects_node.content + ", #{downstream_projects}"
96
178
  else
97
179
  publisher_node = n_xml.xpath("//publishers").first
98
180
  build_trigger_node = publisher_node.add_child("<hudson.tasks.BuildTrigger/>")
99
- child_project_node = build_trigger_node.first.add_child("<childProjects>#{downstream_project}</childProjects>")
181
+ child_project_node = build_trigger_node.first.add_child("<childProjects>#{downstream_projects}</childProjects>")
100
182
  threshold_node = child_project_node.first.add_next_sibling("<threshold/>")
101
183
  threshold_node.first.add_child("<name>#{name}</name><ordinal>#{ordinal}</ordinal><color>#{color}</color>")
102
184
  end
@@ -104,6 +186,10 @@ module JenkinsApi
104
186
  post_config(job_name, xml_modified)
105
187
  end
106
188
 
189
+ # Remove all downstream projects of a specific job
190
+ #
191
+ # @param [String] job_name
192
+ #
107
193
  def remove_downstream_projects(job_name)
108
194
  xml = get_config(job_name)
109
195
  n_xml = Nokogiri::XML(xml)
@@ -131,6 +217,11 @@ module JenkinsApi
131
217
  post_config(job_name, xml_modified)
132
218
  end
133
219
 
220
+ # Resctrict the given job to a specific node
221
+ #
222
+ # @param [String] job_name
223
+ # @param [String] node_name
224
+ #
134
225
  def restrict_to_node(job_name, node_name)
135
226
  xml = get_config(job_name)
136
227
  n_xml = Nokogiri::XML(xml)
@@ -1,6 +1,6 @@
1
1
 
2
2
  module JenkinsApi
3
3
  class Client
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-15 00:00:00.000000000 Z
12
+ date: 2012-10-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -165,10 +165,10 @@ email:
165
165
  executables: []
166
166
  extensions: []
167
167
  extra_rdoc_files:
168
- - README.md
168
+ - README.rdoc
169
169
  files:
170
170
  - Gemfile
171
- - README.md
171
+ - README.rdoc
172
172
  - Rakefile
173
173
  - lib/jenkins_api_client.rb
174
174
  - lib/jenkins_api_client/client.rb
@@ -189,7 +189,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
189
  version: '0'
190
190
  segments:
191
191
  - 0
192
- hash: -29913673152348123
192
+ hash: -746284255980224518
193
193
  required_rubygems_version: !ruby/object:Gem::Requirement
194
194
  none: false
195
195
  requirements:
data/README.md DELETED
@@ -1,4 +0,0 @@
1
- jenkins_api_client
2
- ==================
3
-
4
- Client libraries for communicating with a Jenkins CI server