jenkins-branching 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 44cd8a91d652c8c2df8ba75b0dad302115a653a2
4
- data.tar.gz: a22ff72fc7969b042a15c72852c9777898a3f71b
3
+ metadata.gz: 66cef882a986471a73654f2ef6f54a33493c883f
4
+ data.tar.gz: bc1c58c61537fe5246ea6657662d415e6e6cbc91
5
5
  SHA512:
6
- metadata.gz: d427e3e3cdd86a23c94d6035390556acffa6bc7b9f3ef0334ef1e7068cb87472c062cf9b97710ed99bdc0b00cee02e962e6ec5845f6a00b93f40d08c834c2b58
7
- data.tar.gz: 4373431fa6e0e032d66113d747a67ac2e009aa823f8a209088496d601d2675cf6e0bd753add211b04dcde23c0f168ba9fcf0b944dbab627c11ff539f3c160bf4
6
+ metadata.gz: 2869755d7a3a747e93022a42a42298b80952d8709a02bb034ff4decdc8fa07d92445047b6a2c17a2798cec28e2a13ad4034fffd3535e41c97add4b83c1d49d5b
7
+ data.tar.gz: b45d706aeb17bea4b4853796d6d564a6da10991dd13c250619c52f230e43151cfa699dd6a6d63a8c21505421dcbc00df19cae0de3d6899f54cea6cdbfbc89622
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile CHANGED
@@ -4,7 +4,8 @@ gem 'rake'
4
4
  gem 'jenkins_api_client', '0.15.4', :git => 'git@github.com:VodafoneAustralia/jenkins_api_client.git'
5
5
  gem 'highline'
6
6
 
7
- group :development do
7
+ group :development, :test do
8
8
  gem "bundler"
9
9
  gem "jeweler"
10
+ gem "rspec"
10
11
  end
@@ -14,6 +14,7 @@ GEM
14
14
  specs:
15
15
  addressable (2.3.5)
16
16
  builder (3.2.2)
17
+ diff-lcs (1.2.5)
17
18
  faraday (0.8.9)
18
19
  multipart-post (~> 1.2.0)
19
20
  git (1.2.6)
@@ -36,7 +37,7 @@ GEM
36
37
  rake
37
38
  rdoc
38
39
  json (1.8.1)
39
- jwt (0.1.10)
40
+ jwt (0.1.11)
40
41
  multi_json (>= 1.5)
41
42
  mixlib-shellout (1.3.0)
42
43
  multi_json (1.8.4)
@@ -53,6 +54,14 @@ GEM
53
54
  rake (10.1.1)
54
55
  rdoc (4.1.1)
55
56
  json (~> 1.4)
57
+ rspec (2.14.1)
58
+ rspec-core (~> 2.14.0)
59
+ rspec-expectations (~> 2.14.0)
60
+ rspec-mocks (~> 2.14.0)
61
+ rspec-core (2.14.7)
62
+ rspec-expectations (2.14.4)
63
+ diff-lcs (>= 1.1.3, < 2.0)
64
+ rspec-mocks (2.14.4)
56
65
  terminal-table (1.4.5)
57
66
  thor (0.18.1)
58
67
 
@@ -65,3 +74,4 @@ DEPENDENCIES
65
74
  jenkins_api_client (= 0.15.4)!
66
75
  jeweler
67
76
  rake
77
+ rspec
data/Rakefile CHANGED
@@ -18,4 +18,4 @@ Jeweler::Tasks.new do |gem|
18
18
  end
19
19
  Jeweler::RubygemsDotOrgTasks.new
20
20
 
21
- task :default => :test
21
+ task :default => :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -2,21 +2,22 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: jenkins-branching 0.1.5 ruby lib
5
+ # stub: jenkins-branching 0.1.6 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "jenkins-branching"
9
- s.version = "0.1.5"
9
+ s.version = "0.1.6"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Bruno Chauvet"]
13
- s.date = "2014-01-17"
13
+ s.date = "2014-01-19"
14
14
  s.extra_rdoc_files = [
15
15
  "README.md"
16
16
  ]
17
17
  s.files = [
18
18
  ".document",
19
19
  ".gemspec",
20
+ ".rspec",
20
21
  "Gemfile",
21
22
  "Gemfile.lock",
22
23
  "README.md",
@@ -24,9 +25,13 @@ Gem::Specification.new do |s|
24
25
  "VERSION",
25
26
  "jenkins-branching.gemspec",
26
27
  "lib/jenkins-branching.rb",
28
+ "lib/tasks/git_task.rb",
27
29
  "lib/tasks/jenkins_branching.rake",
28
- "test/helper.rb",
29
- "test/test_jenkins-branching.rb"
30
+ "lib/tasks/jenkins_task.rb",
31
+ "lib/tasks/jenkins_task_configure.rb",
32
+ "lib/tasks/jenkins_task_manage_jobs.rb",
33
+ "spec/lib/tasks/jenkins_task_configure_spec.rb",
34
+ "spec/spec_helper.rb"
30
35
  ]
31
36
  s.require_paths = ["lib"]
32
37
  s.rubygems_version = "2.1.10"
@@ -41,12 +46,14 @@ Gem::Specification.new do |s|
41
46
  s.add_runtime_dependency(%q<highline>, [">= 0"])
42
47
  s.add_development_dependency(%q<bundler>, [">= 0"])
43
48
  s.add_development_dependency(%q<jeweler>, [">= 0"])
49
+ s.add_development_dependency(%q<rspec>, [">= 0"])
44
50
  else
45
51
  s.add_dependency(%q<rake>, [">= 0"])
46
52
  s.add_dependency(%q<jenkins_api_client>, ["= 0.15.4"])
47
53
  s.add_dependency(%q<highline>, [">= 0"])
48
54
  s.add_dependency(%q<bundler>, [">= 0"])
49
55
  s.add_dependency(%q<jeweler>, [">= 0"])
56
+ s.add_dependency(%q<rspec>, [">= 0"])
50
57
  end
51
58
  else
52
59
  s.add_dependency(%q<rake>, [">= 0"])
@@ -54,6 +61,7 @@ Gem::Specification.new do |s|
54
61
  s.add_dependency(%q<highline>, [">= 0"])
55
62
  s.add_dependency(%q<bundler>, [">= 0"])
56
63
  s.add_dependency(%q<jeweler>, [">= 0"])
64
+ s.add_dependency(%q<rspec>, [">= 0"])
57
65
  end
58
66
  end
59
67
 
@@ -1,6 +1,6 @@
1
1
  require 'rake'
2
2
 
3
3
  module JenkinsBranching
4
- spec = Gem::Specification.find_by_name 'jenkins-branching'
4
+ spec = Gem::Specification.find_by_name 'jenkins-branching'
5
5
  Dir.glob("#{spec.gem_dir}/lib/tasks/*.rake").each { |r| load r }
6
6
  end
@@ -0,0 +1,9 @@
1
+ class GitTask
2
+ def self.get_user_email
3
+ `git config --get user.email`
4
+ end
5
+
6
+ def self.remote_branch_exists?(branch)
7
+ `git branch -r`.each_line.count {|l| l.include?(branch)} > 0
8
+ end
9
+ end
@@ -1,250 +1,32 @@
1
- require 'jenkins_api_client'
2
- require 'yaml'
3
- require 'highline/import'
1
+ require 'tasks/jenkins_task_configure'
2
+ require 'tasks/jenkins_task_manage_jobs'
3
+ require 'tasks/git_task'
4
4
 
5
5
  namespace :jenkins do
6
6
 
7
7
  desc 'Creates a new jenkins job for a specified branch'
8
8
  task :new_job, :branch do |t, args|
9
- Jenkins::Rake::Task.new.create_new_job args[:branch]
9
+ JenkinsTaskManageJobs.new.create_new_job args[:branch]
10
10
  end
11
11
 
12
12
  desc 'Removes a jenkins job for a specified branch'
13
13
  task :delete_job, :branch do |t, args|
14
- Jenkins::Rake::Task.new.delete_job args[:branch]
14
+ JenkinsTaskManageJobs.new.delete_job args[:branch]
15
15
  end
16
16
 
17
17
  desc 'Fetch the current config of a job for the specified branch'
18
18
  task :job_config, :branch do |t, args|
19
- Jenkins::Rake::Task.new.get_job_config args[:branch]
19
+ JenkinsTaskManageJobs.new.get_job_config args[:branch]
20
20
  end
21
21
 
22
22
  desc 'Display config required by jenkins tasks'
23
23
  task :show_config do
24
- Jenkins::Rake::Task.new.show_config
24
+ JenkinsTaskConfigure.new.show_config
25
25
  end
26
26
 
27
27
  desc 'Configure settings required by jenkins tasks'
28
28
  task :configure do
29
- Jenkins::Rake::Task.new.configure
29
+ JenkinsTaskConfigure.new.configure
30
30
  end
31
31
 
32
32
  end
33
-
34
- module Jenkins
35
- module Rake
36
-
37
- class Task
38
-
39
- def show_config
40
- puts "Using configuration file: #{config_file}\n#{config}"
41
- end
42
-
43
- def configure
44
- puts "Jenkins configuration for #{project}"
45
-
46
- config['git'] = {} unless config['git']
47
- config['git']['email'] = add_configuration(config['git']['email'], "Git email", Git::Rake::Task.get_user_email.strip)
48
-
49
- config['jenkins'] = {} unless config['jenkins']
50
- config['jenkins']['url'] = add_configuration(config['jenkins']['url'], "Jenkins URL", "https://10.48.0.91")
51
- config['jenkins']['ssl'] = add_configuration(config['jenkins']['ssl'], "Use SSL", "true")
52
- config['jenkins']['proxy_ip'] = add_configuration(config['jenkins']['proxy_ip'], "Proxy IP", "localhost")
53
- config['jenkins']['proxy_port'] = add_configuration(config['jenkins']['proxy_port'], "Proxy port", "3128")
54
- config['jenkins']['username'] = add_configuration(config['jenkins']['username'], "Jenkins Username", "")
55
- config['jenkins']['password'] = add_configuration(config['jenkins']['password'], "Jenkins Password", "", false)
56
- config['jenkins']['restricted_node'] = add_configuration(config['jenkins']['restricted_node'], "Jenkins node", "PaaS-Jenkins-Slave")
57
- config['jenkins']['job_prefix'] = add_configuration(config['jenkins']['job_prefix'], "Jonb prefix", "search-test")
58
-
59
- config['s3_options'] = {} unless config['s3_options']
60
- config['s3_options']['profile'] = add_configuration(config['s3_options']['profile'], "S3 Profile", "JenkinsUser")
61
- config['s3_options']['bucket'] = add_configuration(config['s3_options']['bucket'], "S3 Bucket", "vha-repository")
62
- config['s3_options']['region'] = add_configuration(config['s3_options']['region'], "S3 Region", "AP_SOUTHEAST_2")
63
-
64
- File.open("#{config_file}", "w") do |file|
65
- file.write config.to_yaml
66
- end
67
-
68
- end
69
-
70
- def create_new_job(branch)
71
- configure unless config
72
-
73
- job_name = job(branch)
74
- puts "Creating new job #{job_name}"
75
-
76
- fail_on_args_error(branch)
77
- fail_on_missing_remote_branch(branch)
78
- fail_on_existing_job(job_name)
79
-
80
- rake_spec = "\nbundle exec rake spec"
81
- rake_jasmine = " && bundle exec rake jasmine"
82
- rake_cukes = " && bundle exec rake cukes"
83
- tar_file_name = "#{project}-#{branch}-${BUILD_NUMBER}.tar.gz"
84
- tar_file = "&& tar cvfz #{tar_file_name} --exclude-from=tarignore * .[a-zA-Z0-9]*"
85
- job_hash = {
86
- :name => job_name,
87
- :restricted_node => "#{config['jenkins']['restricted_node']}",
88
- :scm_provider => "git",
89
- :scm_url => "git@github.com:VodafoneAustralia/#{project}.git",
90
- :scm_branch => branch,
91
- :shell_command => "
92
- #!/bin/bash -e
93
- export TERM=xterm
94
- [[ -s \"$HOME/.rvm/scripts/rvm\" ]] && source \"$HOME/.rvm/scripts/rvm\"
95
- bundle package --all
96
- RAILS_ENV=test bundle exec rake
97
-
98
- bash script/createManifest
99
- cd ${WORKSPACE}/../
100
- rm -f ${JOB_NAME}.tar.gz
101
- tar --exclude=.git --exclude=lib/load_test --exclude=feature --exclude=coverage --exclude=log --exclude=build --exclude=spec -zcf ${JOB_NAME}.tar.gz ${JOB_NAME}
102
- aws s3api put-object --bucket vha-repository --key releases/paas/search-app/${JOB_NAME}-${BUILD_NUMBER}.tar.gz --region ap-southeast-2 --body ${JOB_NAME}.tar.gz",
103
- :scm_branch => branch,
104
- :scm_trigger => '*/5 * * * *',
105
- :build_wrappers_xvfb => true,
106
- :build_wrappers_ansicolor => true,
107
- :build_wrappers_mask_password => true,
108
- :log_rotator => true
109
- }
110
-
111
- s3_options = config['s3_options'].merge({tar_file: tar_file_name})
112
- git_options = { fast_remote_polling: true }
113
- job_hash.merge!(s3_artifact_publisher: s3_options, git: git_options)
114
- client.job.create_freestyle job_hash
115
-
116
- add_email_notification(job_name)
117
-
118
- puts "Done. New job #{job_name} created with SUCCESS"
119
- end
120
-
121
- def delete_job(branch)
122
- job_name = job(branch)
123
- puts "Deleting job #{job_name}"
124
-
125
- fail_on_args_error(branch)
126
- fail_on_missing_remote_branch(branch)
127
- fail_on_non_existing_job(job_name)
128
-
129
- client.job.delete job_name
130
-
131
- puts "Done. Job #{job_name} has been deleted"
132
- end
133
-
134
- def get_job_config(branch)
135
- job_name = job(branch)
136
- puts "Fetching configuration of job: #{job_name}"
137
-
138
- fail_on_args_error(branch)
139
- fail_on_missing_remote_branch(branch)
140
- fail_on_non_existing_job(job_name)
141
-
142
- puts "Done.\n#{client.job.get_config(job_name)}"
143
- end
144
-
145
- private
146
-
147
- def client
148
- @client ||= begin
149
- server_url = config['jenkins']['url']
150
- proxy_ip = config['jenkins']['proxy_ip']
151
- proxy_port = config['jenkins']['proxy_port']
152
-
153
- if proxy_ip.to_s == ''
154
- puts "Connecting to Jenkins server #{server_url}"
155
- JenkinsApi::Client.new(
156
- :server_url => server_url,
157
- :username => config['jenkins']['username'],
158
- :password => config['jenkins']['password'],
159
- :ssl => config['jenkins']['ssl'],
160
- :timeout => 300,
161
- :log_level => Logger::WARN
162
- )
163
- else
164
- puts "Connecting to Jenkins server #{server_url} via proxy #{proxy_ip}:#{proxy_port}"
165
- JenkinsApi::Client.new(
166
- :server_url => server_url,
167
- :username => config['jenkins']['username'],
168
- :password => config['jenkins']['password'],
169
- :ssl => config['jenkins']['ssl'],
170
- :timeout => 300,
171
- :proxy_ip => proxy_ip,
172
- :proxy_port => proxy_port,
173
- :log_level => Logger::WARN
174
- )
175
- end
176
-
177
- end
178
- end
179
-
180
- def add_email_notification(job_name)
181
- user_email_address = config['git']['email']
182
- unless user_email_address.empty?
183
- client.job.add_email_notification(:name => job_name, :notification_email => user_email_address)
184
- puts "Build failures will be emailed to #{user_email_address}"
185
- end
186
- end
187
-
188
- def config
189
- @config ||= (File.exists?(config_file) ? YAML::load(File.open(config_file)) : {})
190
- end
191
-
192
- def config_file
193
- dirname = File.dirname("#{ENV['HOME']}/.#{project}/#{project}.yml")
194
- Dir.mkdir(dirname) unless Dir.exist?(dirname)
195
- @config_file ||= "#{dirname}/#{project}.yml"
196
- end
197
-
198
- def add_configuration(current_value, label, default, echo=true)
199
- current_value = default if current_value.to_s == ''
200
- value = (ask("#{label} (#{echo ? current_value : '******'}): ") { |q| q.echo = echo }).to_s
201
- return value.empty? ? current_value : value
202
- end
203
-
204
- def fail_on_args_error(branch)
205
- fail 'Please specify a branch name, e.g. rake jenkins:new_job[SS-123]' if branch.to_s == ''
206
- end
207
-
208
- def fail_on_missing_remote_branch(branch)
209
- fail "No remote branch found named #{branch}, please create one first" unless Git::Rake::Task.remote_branch_exists?(branch)
210
- end
211
-
212
- def fail_on_existing_job(job)
213
- fail "Job #{job} already exists, please provide a unique job name" if client.job.exists?(job)
214
- end
215
-
216
- def fail_on_non_existing_job(job)
217
- fail "Job #{job} does not exist" unless client.job.exists?(job)
218
- end
219
-
220
- def project
221
- @project ||= File.basename(Dir.getwd)
222
- end
223
-
224
- def job(branch)
225
- @job ||= "#{config['jenkins']['job_prefix']}-#{project}-#{branch}"
226
- end
227
-
228
- end
229
-
230
- end
231
- end
232
-
233
-
234
- module Git
235
- module Rake
236
-
237
- class Task
238
-
239
- def self.get_user_email
240
- `git config --get user.email`
241
- end
242
-
243
- def self.remote_branch_exists?(branch)
244
- `git branch -r`.each_line.count {|l| l.include?(branch)} > 0
245
- end
246
-
247
- end
248
-
249
- end
250
- end
@@ -0,0 +1,41 @@
1
+ require 'yaml'
2
+ require 'jenkins_api_client'
3
+ require 'highline/import'
4
+
5
+ require 'tasks/git_task'
6
+
7
+ class JenkinsTask
8
+ def fail_on_args_error(branch)
9
+ fail 'Please specify a branch name, e.g. rake jenkins:new_job[SS-123]' if branch.to_s == ''
10
+ end
11
+
12
+ def fail_on_missing_remote_branch(branch)
13
+ fail "No remote branch found named #{branch}, please create one first" unless GitTask.remote_branch_exists?(branch)
14
+ end
15
+
16
+ def fail_on_existing_job(job)
17
+ fail "Job #{job} already exists, please provide a unique job name" if client.job.exists?(job)
18
+ end
19
+
20
+ def fail_on_non_existing_job(job)
21
+ fail "Job #{job} does not exist" unless client.job.exists?(job)
22
+ end
23
+
24
+ def project
25
+ @project ||= File.basename(Dir.getwd)
26
+ end
27
+
28
+ def job(branch)
29
+ @job ||= "#{config['jenkins']['job_prefix']}-#{project}-#{branch}"
30
+ end
31
+
32
+ def config
33
+ @config ||= (File.exists?(config_file) ? YAML::load(File.open(config_file)) : {})
34
+ end
35
+
36
+ def config_file
37
+ dirname = File.dirname("#{ENV['HOME']}/.#{project}/#{project}.yml")
38
+ Dir.mkdir(dirname) unless Dir.exist?(dirname)
39
+ @config_file ||= "#{dirname}/#{project}.yml"
40
+ end
41
+ end
@@ -0,0 +1,41 @@
1
+ require 'tasks/jenkins_task'
2
+
3
+ class JenkinsTaskConfigure < JenkinsTask
4
+ def show_config
5
+ puts "Using configuration file: #{config_file}\n#{config.to_yaml}"
6
+ end
7
+
8
+ def configure
9
+ puts "Jenkins configuration for #{project}"
10
+
11
+ config['git'] = {} unless config['git']
12
+ config['git']['email'] = add_configuration(config['git']['email'], "Git email", GitTask.get_user_email.strip)
13
+
14
+ config['jenkins'] = {} unless config['jenkins']
15
+ config['jenkins']['url'] = add_configuration(config['jenkins']['url'], "Jenkins URL", "https://10.48.0.91")
16
+ config['jenkins']['ssl'] = add_configuration(config['jenkins']['ssl'], "Use SSL", "true")
17
+ config['jenkins']['proxy_ip'] = add_configuration(config['jenkins']['proxy_ip'], "Proxy IP", "localhost")
18
+ config['jenkins']['proxy_port'] = add_configuration(config['jenkins']['proxy_port'], "Proxy port", "3128")
19
+ config['jenkins']['username'] = add_configuration(config['jenkins']['username'], "Jenkins Username", "")
20
+ config['jenkins']['password'] = add_configuration(config['jenkins']['password'], "Jenkins Password", "", false)
21
+ config['jenkins']['restricted_node'] = add_configuration(config['jenkins']['restricted_node'], "Jenkins node", "PaaS-Jenkins-Slave")
22
+ config['jenkins']['job_prefix'] = add_configuration(config['jenkins']['job_prefix'], "Jonb prefix", "search-test")
23
+
24
+ config['s3_options'] = {} unless config['s3_options']
25
+ config['s3_options']['profile'] = add_configuration(config['s3_options']['profile'], "S3 Profile", "Devops-Prod-Build")
26
+ config['s3_options']['bucket'] = add_configuration(config['s3_options']['bucket'], "S3 Bucket", "vha-repository")
27
+ config['s3_options']['region'] = add_configuration(config['s3_options']['region'], "S3 Region", "AP_SOUTHEAST_2")
28
+
29
+ File.open("#{config_file}", "w") do |file|
30
+ file.write config.to_yaml
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def add_configuration(current_value, label, default, echo=true)
37
+ current_value = default if current_value.to_s == ''
38
+ value = (HighLine.ask("#{label} (#{echo ? current_value : '******'}): ") { |q| q.echo = echo }).to_s
39
+ return value.empty? ? current_value : value
40
+ end
41
+ end
@@ -0,0 +1,121 @@
1
+ require 'tasks/jenkins_task'
2
+
3
+ class JenkinsTaskManageJobs < JenkinsTask
4
+ def create_new_job(branch)
5
+ configure unless config
6
+
7
+ job_name = job(branch)
8
+ puts "Creating new job #{job_name}"
9
+
10
+ fail_on_args_error(branch)
11
+ fail_on_missing_remote_branch(branch)
12
+ fail_on_existing_job(job_name)
13
+
14
+ rake_spec = "\nbundle exec rake spec"
15
+ rake_jasmine = " && bundle exec rake jasmine"
16
+ rake_cukes = " && bundle exec rake cukes"
17
+ tar_file_name = "#{project}-#{branch}-${BUILD_NUMBER}.tar.gz"
18
+ tar_file = "&& tar cvfz #{tar_file_name} --exclude-from=tarignore * .[a-zA-Z0-9]*"
19
+ job_hash = {
20
+ :name => job_name,
21
+ :restricted_node => "#{config['jenkins']['restricted_node']}",
22
+ :scm_provider => "git",
23
+ :scm_url => "git@github.com:VodafoneAustralia/#{project}.git",
24
+ :scm_branch => branch,
25
+ :shell_command => "
26
+ #!/bin/bash -e
27
+ export TERM=xterm
28
+ [[ -s \"$HOME/.rvm/scripts/rvm\" ]] && source \"$HOME/.rvm/scripts/rvm\"
29
+ bundle package --all
30
+ RAILS_ENV=test bundle exec rake
31
+
32
+ bash script/createManifest
33
+ cd ${WORKSPACE}/../
34
+ rm -f ${JOB_NAME}.tar.gz
35
+ tar --exclude=.git --exclude=lib/load_test --exclude=feature --exclude=coverage --exclude=log --exclude=build --exclude=spec -zcf ${JOB_NAME}.tar.gz ${JOB_NAME}
36
+ aws s3api put-object --bucket vha-repository --key releases/paas/search-app/${JOB_NAME}-${BUILD_NUMBER}.tar.gz --region ap-southeast-2 --body ${JOB_NAME}.tar.gz",
37
+ :scm_branch => branch,
38
+ :scm_trigger => '*/5 * * * *',
39
+ :build_wrappers_xvfb => true,
40
+ :build_wrappers_ansicolor => true,
41
+ :build_wrappers_mask_password => true,
42
+ :log_rotator => true
43
+ }
44
+
45
+ s3_options = config['s3_options'].merge({tar_file: tar_file_name})
46
+ git_options = { fast_remote_polling: true }
47
+ job_hash.merge!(s3_artifact_publisher: s3_options, git: git_options)
48
+ client.job.create_freestyle job_hash
49
+
50
+ add_email_notification(job_name)
51
+
52
+ puts "Done. New job #{job_name} created with SUCCESS"
53
+ end
54
+
55
+ def delete_job(branch)
56
+ job_name = job(branch)
57
+ puts "Deleting job #{job_name}"
58
+
59
+ fail_on_args_error(branch)
60
+ fail_on_missing_remote_branch(branch)
61
+ fail_on_non_existing_job(job_name)
62
+
63
+ client.job.delete job_name
64
+
65
+ puts "Done. Job #{job_name} has been deleted"
66
+ end
67
+
68
+ def get_job_config(branch)
69
+ job_name = job(branch)
70
+ puts "Fetching configuration of job: #{job_name}"
71
+
72
+ fail_on_args_error(branch)
73
+ fail_on_missing_remote_branch(branch)
74
+ fail_on_non_existing_job(job_name)
75
+
76
+ puts "Done.\n#{client.job.get_config(job_name)}"
77
+ end
78
+
79
+ private
80
+
81
+ def client
82
+ @client ||= begin
83
+ server_url = config['jenkins']['url']
84
+ proxy_ip = config['jenkins']['proxy_ip']
85
+ proxy_port = config['jenkins']['proxy_port']
86
+
87
+ if proxy_ip.to_s == ''
88
+ puts "Connecting to Jenkins server #{server_url}"
89
+ JenkinsApi::Client.new(
90
+ :server_url => server_url,
91
+ :username => config['jenkins']['username'],
92
+ :password => config['jenkins']['password'],
93
+ :ssl => config['jenkins']['ssl'],
94
+ :timeout => 300,
95
+ :log_level => Logger::WARN
96
+ )
97
+ else
98
+ puts "Connecting to Jenkins server #{server_url} via proxy #{proxy_ip}:#{proxy_port}"
99
+ JenkinsApi::Client.new(
100
+ :server_url => server_url,
101
+ :username => config['jenkins']['username'],
102
+ :password => config['jenkins']['password'],
103
+ :ssl => config['jenkins']['ssl'],
104
+ :timeout => 300,
105
+ :proxy_ip => proxy_ip,
106
+ :proxy_port => proxy_port,
107
+ :log_level => Logger::WARN
108
+ )
109
+ end
110
+
111
+ end
112
+ end
113
+
114
+ def add_email_notification(job_name)
115
+ user_email_address = config['git']['email']
116
+ unless user_email_address.empty?
117
+ client.job.add_email_notification(:name => job_name, :notification_email => user_email_address)
118
+ puts "Build failures will be emailed to #{user_email_address}"
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+ require 'tasks/jenkins_task_configure'
3
+
4
+ describe JenkinsTaskConfigure do
5
+ describe :configure do
6
+ let(:task) { JenkinsTaskConfigure.new }
7
+ let(:email) { 'myemail@vodafone.com.au' }
8
+ let(:jenkins_url) { 'http://myjenkins.com' }
9
+ let(:jenkins_ssl) { 'true' }
10
+ let(:proxy_ip) { 'myproxy.com' }
11
+ let(:proxy_port) { '1234' }
12
+ let(:jenkins_username) { 'jenkins' }
13
+ let(:jenkins_password) { 'password' }
14
+ let(:jenkins_node) { 'jenkins-slave' }
15
+ let(:jenkins_job_prefix) { 'myproject' }
16
+ let(:s3_profile) { 'MyS3Profile' }
17
+ let(:s3_bucket) { 'my-s3-bucket' }
18
+ let(:s3_region) { 'apac-northwest-12' }
19
+ let(:file) { mock('file') }
20
+
21
+ before {
22
+ HighLine.stub(:ask).and_return(
23
+ email,
24
+ jenkins_url,
25
+ jenkins_ssl,
26
+ proxy_ip,
27
+ proxy_port,
28
+ jenkins_username,
29
+ jenkins_password,
30
+ jenkins_node,
31
+ jenkins_job_prefix,
32
+ s3_profile,
33
+ s3_bucket,
34
+ s3_region
35
+ )
36
+
37
+ task.stub(:config_file).and_return('my_file.yml')
38
+ File.stub(:open).and_yield(file)
39
+ allow(file).to receive(:write)
40
+ }
41
+
42
+ it 'updates the configuration based on user input' do
43
+ task.configure
44
+
45
+ expect(task.config['git']['email']).to eql email
46
+ expect(task.config['jenkins']['url']).to eql jenkins_url
47
+ expect(task.config['jenkins']['ssl']).to eql jenkins_ssl
48
+ expect(task.config['jenkins']['proxy_ip']).to eql proxy_ip
49
+ expect(task.config['jenkins']['proxy_port']).to eql proxy_port
50
+ expect(task.config['jenkins']['username']).to eql jenkins_username
51
+ expect(task.config['jenkins']['password']).to eql jenkins_password
52
+ expect(task.config['jenkins']['restricted_node']).to eql jenkins_node
53
+ expect(task.config['jenkins']['job_prefix']).to eql jenkins_job_prefix
54
+
55
+ expect(task.config['s3_options']['profile']).to eql s3_profile
56
+ expect(task.config['s3_options']['bucket']).to eql s3_bucket
57
+ expect(task.config['s3_options']['region']).to eql s3_region
58
+ end
59
+
60
+ it 'writes the configuration to file' do
61
+ file.should_receive(:write)
62
+
63
+ task.configure
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins-branching
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Chauvet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-17 00:00:00.000000000 Z
11
+ date: 2014-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description:
84
98
  email:
85
99
  executables: []
@@ -89,6 +103,7 @@ extra_rdoc_files:
89
103
  files:
90
104
  - .document
91
105
  - .gemspec
106
+ - .rspec
92
107
  - Gemfile
93
108
  - Gemfile.lock
94
109
  - README.md
@@ -96,9 +111,13 @@ files:
96
111
  - VERSION
97
112
  - jenkins-branching.gemspec
98
113
  - lib/jenkins-branching.rb
114
+ - lib/tasks/git_task.rb
99
115
  - lib/tasks/jenkins_branching.rake
100
- - test/helper.rb
101
- - test/test_jenkins-branching.rb
116
+ - lib/tasks/jenkins_task.rb
117
+ - lib/tasks/jenkins_task_configure.rb
118
+ - lib/tasks/jenkins_task_manage_jobs.rb
119
+ - spec/lib/tasks/jenkins_task_configure_spec.rb
120
+ - spec/spec_helper.rb
102
121
  homepage:
103
122
  licenses: []
104
123
  metadata: {}
@@ -1,18 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'test/unit'
11
- require 'shoulda'
12
-
13
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
- $LOAD_PATH.unshift(File.dirname(__FILE__))
15
- require 'jenkins-branching'
16
-
17
- class Test::Unit::TestCase
18
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestJenkinsBranching < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end