remote_jenkins_job 1.0.1
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.
- data/README.md +23 -0
- data/bin/remote_jenkins_job +8 -0
- data/lib/remote_jenkins_job.rb +74 -0
- metadata +79 -0
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Remote Jenkins Job
|
2
|
+
==================
|
3
|
+
|
4
|
+
This script allows a job on a local instance of [Jenkins](http://jenkins-ci.org) to invoke a job on a remote instance of Jenkins.
|
5
|
+
The local job will only pass when the remote job passes.
|
6
|
+
|
7
|
+
This script has only been tested with ruby 1.9.2
|
8
|
+
|
9
|
+
Installation
|
10
|
+
------------
|
11
|
+
|
12
|
+
On the server that Jenkins is installed on, and as the jenkins user, run:
|
13
|
+
`gem install remote_jenkins_job`
|
14
|
+
|
15
|
+
Usage
|
16
|
+
-----
|
17
|
+
|
18
|
+
Create a new free-style software project.
|
19
|
+
|
20
|
+
Add a build step, and enter the following command:
|
21
|
+
`remote_jenkins_job <remote-job-url> <username> <password>`
|
22
|
+
|
23
|
+
(username and password are optional - only required if your remote jenkins is password protected using HTTP Basic Authentication)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
|
3
|
+
|
4
|
+
#require 'net/http'
|
5
|
+
#Net::HTTP.get URI.parse('http://remote.example.com/job/foo/build')
|
6
|
+
#puts 'alkesh'
|
7
|
+
require 'remote_jenkins_job'
|
8
|
+
RemoteJenkinsJob.new ARGV
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/https'
|
3
|
+
require 'open-uri'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
class RemoteJenkinsJob
|
7
|
+
def initialize params=[]
|
8
|
+
if params.empty?
|
9
|
+
puts "Usage: remote_jenkins_job [job uri] ([username] [password])"
|
10
|
+
else
|
11
|
+
@job_uri = params[0]
|
12
|
+
if params[1]
|
13
|
+
@basic_auth = [params[1], params[2]]
|
14
|
+
@options = {:http_basic_authentication => @basic_auth}
|
15
|
+
else
|
16
|
+
@options = {}
|
17
|
+
end
|
18
|
+
start
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def start
|
25
|
+
puts "Running remote job: #{@job_uri}"
|
26
|
+
original_last_build = get_last_build
|
27
|
+
puts "Last build was: " + original_last_build['url'].to_s
|
28
|
+
|
29
|
+
post_build_request
|
30
|
+
|
31
|
+
last_build = original_last_build
|
32
|
+
while last_build == original_last_build do
|
33
|
+
last_build = get_last_build
|
34
|
+
print '.'
|
35
|
+
sleep 1
|
36
|
+
end
|
37
|
+
|
38
|
+
puts ""
|
39
|
+
puts "New build started: #{last_build['url']}"
|
40
|
+
|
41
|
+
while (latest_build = get_new_build(last_build['url']))['building'] do
|
42
|
+
print '.'
|
43
|
+
sleep 1
|
44
|
+
end
|
45
|
+
|
46
|
+
puts ""
|
47
|
+
puts "Build result: " + latest_build['result']
|
48
|
+
|
49
|
+
exit(1) unless latest_build['result'] == 'SUCCESS'
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_last_build
|
53
|
+
json = JSON.parse(open(@job_uri+"/api/json", @options).read)
|
54
|
+
json['lastBuild']
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_new_build(url)
|
58
|
+
uri = URI.parse(url+'api/json')
|
59
|
+
uri.userinfo=''
|
60
|
+
JSON.parse(open(uri.to_s, @options).read)
|
61
|
+
end
|
62
|
+
|
63
|
+
def post_build_request
|
64
|
+
proxy_uri = URI.parse(ENV['http_proxy']) if ENV['http_proxy']
|
65
|
+
proxy_host, proxy_port = proxy_uri.host, proxy_uri.port if ENV['http_proxy']
|
66
|
+
url = URI.parse(@job_uri+'/build')
|
67
|
+
use_ssl = true if url.scheme == 'https'
|
68
|
+
Net::HTTP::Proxy(proxy_host, proxy_port).start(url.host, url.port, :use_ssl => use_ssl) do |http|
|
69
|
+
request = Net::HTTP::Post.new(url.request_uri)
|
70
|
+
request.basic_auth @basic_auth[0], @basic_auth[1] if @basic_auth
|
71
|
+
http.request(request)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: remote_jenkins_job
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 1.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Alkesh Vaghmaria
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-08-22 00:00:00 +01:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: json
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
description: Inovkes a job on a remote jenkins server
|
34
|
+
email: alkesh.vaghmaria@bt.com
|
35
|
+
executables:
|
36
|
+
- remote_jenkins_job
|
37
|
+
extensions: []
|
38
|
+
|
39
|
+
extra_rdoc_files:
|
40
|
+
- README.md
|
41
|
+
files:
|
42
|
+
- README.md
|
43
|
+
- lib/remote_jenkins_job.rb
|
44
|
+
- bin/remote_jenkins_job
|
45
|
+
has_rdoc: true
|
46
|
+
homepage: https://github.com/alkesh/jenkins-remote-job
|
47
|
+
licenses: []
|
48
|
+
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options:
|
51
|
+
- --main
|
52
|
+
- README.md
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
requirements: []
|
72
|
+
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.3.7
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Inovkes a job on a remote jenkins server
|
78
|
+
test_files: []
|
79
|
+
|