jenkins_launcher 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ CHANGELOG
2
+ =========
3
+
4
+ v0.0.1 [12-JAN-2013]
5
+ ---------------------
6
+ * Initial release with all basic functionality implemented.
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "jenkins_api_client", "~> 0.6.0"
4
+ gem "json", ">=0"
5
+ gem "thor", "~> 0.16.0"
6
+
7
+ group :development do
8
+ gem "bundler", ">= 1.0"
9
+ gem "jeweler", ">= 1.6.4"
10
+ gem "builder", "~> 3.1.3"
11
+ gem "simplecov"
12
+ gem "rspec"
13
+ end
data/LICENCE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2013 Kannan Manickam <arangamani.kannan@gmail.com>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ Jenkins Launcher
2
+ ================
3
+
4
+ Overview:
5
+ ---------
6
+ Jenkins launcher makes use of the [jenkins_api_client](https://github.com/arangamani/jenkins_api_client) Rubygem which is an API client/wrapper written in pure Ruby and makes use of the Jenkins's JSON API. This project mainly focusses on performing continuous integration tests on a remote Jenkins CI server and all activities are achieved through a command line interface. This projects acts much like building on Travis CI, but makes use of your organization's own Jenkins server where you may have specialized configuration or you don't want to expose your results publicly.
7
+
8
+ Installation:
9
+ -------------
10
+
11
+ ```
12
+ gem install jenkins_launcher
13
+ ```
14
+
15
+ Getting Started:
16
+ ----------------
17
+ Please see [Wiki](http://arangamani.github.com/jenkins_launcher) to get started with up-to-date instructions.
18
+
19
+ Author:
20
+ -------
21
+ Kannan Manickam <arangamani.kannan@gmail.com>
22
+
23
+ CONTRIBUTING:
24
+ -------------
25
+
26
+ If you would like to contribute to this project, just do the following:
27
+
28
+ 1. Fork the repo on Github.
29
+ 2. Add your features and make commits to your forked repo.
30
+ 3. Make a pull request to this repo.
31
+ 4. Review will be done and changes will be requested.
32
+ 5. Once changes are done or no changes are required, pull request will be merged.
33
+ 6. The next release will have your changes in it.
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../lib/jenkins_launcher', __FILE__)
2
+ require File.expand_path('../lib/jenkins_launcher/version', __FILE__)
3
+ require 'rake'
4
+ require 'jeweler'
5
+
6
+ Jeweler::Tasks.new do |gemspec|
7
+ gemspec.name = 'jenkins_launcher'
8
+ gemspec.version = JenkinsLauncher::VERSION
9
+ gemspec.platform = Gem::Platform::RUBY
10
+ gemspec.date = Time.now.utc.strftime("%Y-%m-%d")
11
+ gemspec.require_path = 'lib'
12
+ gemspec.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
13
+ gemspec.files = `git ls-files`.split("\n")
14
+ gemspec.extra_rdoc_files = ['CHANGELOG.md', 'LICENSE', 'README.md']
15
+ gemspec.authors = [ 'Kannan Manickam' ]
16
+ gemspec.email = [ 'arangamani.kannan@gmail.com' ]
17
+ gemspec.homepage = 'https://github.com/arangamani/jenkins_launcher'
18
+ gemspec.summary = 'Jenkins Jobs Launcher through Jenkins API Client'
19
+ gemspec.description = %{
20
+ This is a simple easy-to-use Jenkins jobs launcher that uses jenkins_api_client.}
21
+ gemspec.test_files = `git ls-files -- {spec}/*`.split("\n")
22
+ gemspec.rubygems_version = '1.8.17'
23
+ end
data/bin/jlaunch ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
4
+ require 'jenkins_launcher'
5
+ JenkinsLauncher::CLI.start
data/config/sample.yml ADDED
@@ -0,0 +1,6 @@
1
+ :name: test_build_kannan
2
+ :shell_command:
3
+ - echo "first echo"
4
+ - sleep 10
5
+ - echo "second echo"
6
+ - sleep 5
@@ -0,0 +1,26 @@
1
+ #
2
+ # Copyright (c) 2013 Kannan Manickam <arangamani.kannan@gmail.com>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+
23
+ require File.expand_path('../jenkins_launcher/config_loader', __FILE__)
24
+ require File.expand_path('../jenkins_launcher/api_interface', __FILE__)
25
+ require File.expand_path('../jenkins_launcher/cli', __FILE__)
26
+ require File.expand_path('../jenkins_launcher/version', __FILE__)
@@ -0,0 +1,90 @@
1
+ #
2
+ # Copyright (c) 2013 Kannan Manickam <arangamani.kannan@gmail.com>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+
23
+ require 'jenkins_api_client'
24
+
25
+ module JenkinsLauncher
26
+ class APIInterface
27
+
28
+ def initialize(options)
29
+ if options[:username] && options[:server_ip] && (options[:password] || options[:password_base64])
30
+ creds = options
31
+ elsif options[:creds_file]
32
+ creds = YAML.load_file(File.expand_path(options[:creds_file], __FILE__))
33
+ elsif File.exist?("#{ENV['HOME']}/.jenkins_api_client/login.yml")
34
+ creds = YAML.load_file(File.expand_path("#{ENV['HOME']}/.jenkins_api_client/login.yml", __FILE__))
35
+ else
36
+ puts "Credentials are not set. Please pass them as parameters or set them in the default credentials file"
37
+ exit 1
38
+ end
39
+ @client = JenkinsApi::Client.new(creds)
40
+ end
41
+
42
+ def create_job(params)
43
+ @client.job.create_freestyle(params) unless @client.job.exists?(params[:name])
44
+ end
45
+
46
+ def build_job(name)
47
+ @client.job.build(name) unless @client.job.get_current_build_status(name) == 'running'
48
+ end
49
+
50
+ def stop_job(name)
51
+ @client.job.stop_build(name)
52
+ end
53
+
54
+ def job_exists?(name)
55
+ @client.job.exists?(name)
56
+ end
57
+
58
+ def job_building?(name)
59
+ @client.job.get_current_build_status(name) == 'running'
60
+ end
61
+
62
+ def delete_job(name)
63
+ @client.job.delete(name)
64
+ end
65
+
66
+ def get_job_status(name)
67
+ @client.job.get_current_build_status(name)
68
+ end
69
+
70
+ def display_progressive_console_output(name, refresh_rate)
71
+ debug_changed = false
72
+ if @client.debug == true
73
+ @client.debug = false
74
+ debug_changed = true
75
+ end
76
+
77
+ response = @client.job.get_console_output(name)
78
+ puts response['output'] unless response['more']
79
+ while response['more']
80
+ size = response['size']
81
+ puts response['output'] unless response['output'].chomp.empty?
82
+ sleep refresh_rate
83
+ response = @client.job.get_console_output(name, 0, size)
84
+ end
85
+
86
+ @client.toggle_debug if debug_changed
87
+ end
88
+
89
+ end
90
+ end
@@ -0,0 +1,128 @@
1
+ #
2
+ # Copyright (c) 2013 Kannan Manickam <arangamani.kannan@gmail.com>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+
23
+ require File.expand_path('../config_loader', __FILE__)
24
+ require File.expand_path('../api_interface', __FILE__)
25
+ require 'thor'
26
+
27
+ module JenkinsLauncher
28
+ class CLI < Thor
29
+
30
+ class_option :username, :aliases => "-u", :desc => "Name of Jenkins user"
31
+ class_option :password, :aliases => "-p", :desc => "Password of Jenkins user"
32
+ class_option :password_base64, :aliases => "-b", :desc => "Base 64 encoded password of Jenkins user"
33
+ class_option :server_ip, :aliases => "-s", :desc => "Jenkins server IP address"
34
+ class_option :server_port, :aliases => "-o", :desc => "Jenkins server port"
35
+ class_option :creds_file, :aliases => "-c", :desc => "Credentials file for communicating with Jenkins server"
36
+
37
+ map "-v" => :version
38
+
39
+ def initialize(arg1, arg2, arg3)
40
+ super
41
+ @api = APIInterface.new(options)
42
+ @config = ConfigLoader.new
43
+ end
44
+
45
+ desc "version", "Shows current version"
46
+ def version
47
+ puts JenkinsLauncher::VERSION
48
+ end
49
+
50
+ desc "create CONFIG", "Load configuration and create a job on jenkins"
51
+ def create(config_file)
52
+ params = @config.load_config(config_file)
53
+ unless @api.job_exists?(params[:name])
54
+ @api.create_job(params)
55
+ else
56
+ puts "The job is already created. Please use 'start' command to build the job."
57
+ end
58
+ end
59
+
60
+ desc "start CONFIG", "Load configuration, create job on jenkins, and build"
61
+ method_option :quiet_period, :aliases => "-q", :desc => "Jenkins Quit period to wait before starting to get console output. Default is '5' seconds"
62
+ method_option :refresh_rate, :aliases => "-r", :desc => "Time to wait between getting console output from server. Default is '5' seconds"
63
+ method_option :delete_after, :type => :boolean, :aliases => "-d", :desc => "Delete the job from Jenkins after the build is finished"
64
+ def start(config_file)
65
+ params = @config.load_config(config_file)
66
+ @api.create_job(params) unless @api.job_exists?(params[:name])
67
+ unless @api.job_building?(params[:name])
68
+ @api.build_job(params[:name])
69
+ quiet_period = options[:quiet_period] ? options[:quiet_period] : 5
70
+ sleep quiet_period
71
+ refresh_rate = options[:refresh_rate] ? options[:refresh_rate].to_i : 5
72
+ @api.display_progressive_console_output(params[:name], refresh_rate)
73
+ puts "Build status: #{@api.get_job_status(params[:name])}"
74
+ @api.delete_job(params[:name]) if options[:delete_after]
75
+ else
76
+ puts "Build is already running. Run 'attach' command to attach to existing build and watch progress."
77
+ end
78
+ end
79
+
80
+ desc "stop CONFIG", "Stop already running build of the job"
81
+ def stop(config_file)
82
+ params = @config.load_config(config_file)
83
+ if !@api.job_exists?(params[:name])
84
+ puts "The job doesn't exist"
85
+ elsif !@api.job_building?(params[:name])
86
+ puts "The job is currently not building or it may have finished already."
87
+ else
88
+ @api.stop_job(params[:name])
89
+ end
90
+ end
91
+
92
+ desc "attach CONFIG", "Attach to already running build if any"
93
+ method_option :refresh_rate, :aliases => "-r", :desc => "Time to wait between getting console output from server. Default is '5' seconds"
94
+ method_option :delete_after, :type => :boolean, :aliases => "-d", :desc => "Delete the job from Jenkins after the build is finished"
95
+ def attach(config_file)
96
+ params = @config.load_config(config_file)
97
+ if !@api.job_exists?(params[:name])
98
+ puts "Job is not created. Please use the 'start' command to create and build the job."
99
+ elsif !@api.job_building?(params[:name])
100
+ puts "Job is not running. Please use the 'start' command to build the job."
101
+ else
102
+ refresh_rate = options[:refresh_rate] ? options[:refresh_rate].to_i : 5
103
+ @api.display_progressive_console_output(params[:name], refresh_rate)
104
+ puts "Build status: #{@api.get_job_status(params[:name])}"
105
+ @api.delete_job(params[:name]) if options[:delete_after]
106
+ end
107
+ end
108
+
109
+ desc "destroy CONFIG", "Destroy the job from Jenkins server"
110
+ method_option :force, :type => :boolean, :aliases => "-f", :desc => "Stop the job if it is already running"
111
+ def destroy(config_file)
112
+ params = @config.load_config(config_file)
113
+ if !@api.job_exists?(params[:name])
114
+ puts "The job doesn't exist or already destroyed."
115
+ elsif @api.job_building?(params[:name]) && !options[:force]
116
+ msg = ''
117
+ msg << "The job is currently building. Please use the 'stop' command or wait until the build is completed."
118
+ msg << " The --force option can be used to stop the build and destroy immediately."
119
+ msg << " If you would like to watch the progress, use the 'attach' command."
120
+ puts msg
121
+ else
122
+ @api.stop_job(params[:name]) if options[:force] && @api.job_building?(params[:name])
123
+ @api.delete_job(params[:name])
124
+ end
125
+ end
126
+
127
+ end
128
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Copyright (c) 2013 Kannan Manickam <arangamani.kannan@gmail.com>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+
23
+ require 'rubygems'
24
+ require 'json'
25
+ require 'fileutils'
26
+
27
+ module JenkinsLauncher
28
+ class ConfigLoader
29
+
30
+ def load_config(file)
31
+ puts "Loading configuration from: #{file}"
32
+ loaded_params = YAML.load_file(Dir.pwd + "/#{file}")
33
+ validate_config(loaded_params)
34
+ end
35
+
36
+ def validate_config(loaded_params)
37
+ valid_params = {}
38
+ raise "'name' is required and not set in the yml file." unless loaded_params['name']
39
+ valid_params[:name] = loaded_params['name']
40
+ if loaded_params['shell_command']
41
+ valid_params[:shell_command] = ''
42
+ loaded_params['shell_command'].each do |command|
43
+ valid_params[:shell_command] << command + "\n"
44
+ end
45
+ end
46
+ valid_params
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,29 @@
1
+ #
2
+ # Copyright (c) 2013 Kannan Manickam <arangamani.kannan@gmail.com>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+ #
22
+
23
+ module JenkinsLauncher
24
+ MAJOR = 0
25
+ MINOR = 0
26
+ TINY = 1
27
+ PRE = nil
28
+ VERSION = [MAJOR, MINOR, TINY, PRE].compact.join('.')
29
+ end
metadata ADDED
@@ -0,0 +1,191 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jenkins_launcher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kannan Manickam
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: jenkins_api_client
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.6.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.6.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: thor
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.16.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.16.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: bundler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '1.0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: jeweler
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.6.4
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.6.4
94
+ - !ruby/object:Gem::Dependency
95
+ name: builder
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 3.1.3
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 3.1.3
110
+ - !ruby/object:Gem::Dependency
111
+ name: simplecov
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: ! '
143
+
144
+ This is a simple easy-to-use Jenkins jobs launcher that uses jenkins_api_client.'
145
+ email:
146
+ - arangamani.kannan@gmail.com
147
+ executables:
148
+ - jlaunch
149
+ extensions: []
150
+ extra_rdoc_files:
151
+ - CHANGELOG.md
152
+ - README.md
153
+ files:
154
+ - .gitignore
155
+ - CHANGELOG.md
156
+ - Gemfile
157
+ - LICENCE
158
+ - README.md
159
+ - Rakefile
160
+ - bin/jlaunch
161
+ - config/sample.yml
162
+ - lib/jenkins_launcher.rb
163
+ - lib/jenkins_launcher/api_interface.rb
164
+ - lib/jenkins_launcher/cli.rb
165
+ - lib/jenkins_launcher/config_loader.rb
166
+ - lib/jenkins_launcher/version.rb
167
+ homepage: https://github.com/arangamani/jenkins_launcher
168
+ licenses: []
169
+ post_install_message:
170
+ rdoc_options: []
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ! '>='
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
185
+ requirements: []
186
+ rubyforge_project:
187
+ rubygems_version: 1.8.24
188
+ signing_key:
189
+ specification_version: 3
190
+ summary: Jenkins Jobs Launcher through Jenkins API Client
191
+ test_files: []