jenkins_api_client 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f4bc7855c7d74b4542c7a98175b2319f92c5b667
4
- data.tar.gz: 6ab8636c67ef0e24a747ebcc413547138ba0b3e1
3
+ metadata.gz: ae6ba9e0eccf49a825c6adc02e7d6d3a6200ac9d
4
+ data.tar.gz: eeb2d4cfb1d2858e157c74aa6b146ba572bf7246
5
5
  SHA512:
6
- metadata.gz: 83a8e6835f8ba2c6de4b151b95a8ccc3f798abe0a808d4b448fd7e1ef16239f6b2ee7eedc0a89eeeba9e6866b7c92aac007e98e7599fb4f1417188948b4cf83a
7
- data.tar.gz: c1e08e48ad162f2d7e9ae1d647cb96b24655d2f7bbe7f77527416e6eb8d4095d3199e3589cc214af7016c8f869a378e6b6f45cbd1d11ea502a23b9284563aa75
6
+ metadata.gz: 7e6088e2b7231336b556fca98788f58be9abb0d68a739ecc73789adf22f23532519cd7f08b7b4e7ed9d5f5a96db24de9ef3f303752e14784aae91e9a129d9acc
7
+ data.tar.gz: 148deba58cb95bb445af9b232613c740648590def0e96cfdb4bc5c7cb6687a68e17682cf8c3f9408e5ae086ecec5bb69240017547c0872a71a5376e071b77aa8
data/.gitignore CHANGED
@@ -1,4 +1,7 @@
1
1
 
2
+ # rbenv
3
+ .ruby-version
4
+
2
5
  # bundler
3
6
  .bundle
4
7
 
@@ -4,6 +4,12 @@ CHANGELOG
4
4
  upcoming
5
5
  --------
6
6
 
7
+ v1.2.0 [12-NOV-2014]
8
+ ----------------------
9
+ * [#156][] Added workspace cleanup plugin. Credit [@hubert][]
10
+ * [#157][] Added ability to configure SCM trigger via job creation. Credit: [@hubert][]
11
+ * [#158][] Add ability to configure post build artifact archiver step. Credit: [@hubert][]
12
+
7
13
  v1.1.0 [05-NOV-2014]
8
14
  ----------------------
9
15
  * [#145][] Fix `BuildQueue#get_details` to compare against task_name. Credit: [@notruthless][]
@@ -285,6 +291,9 @@ v0.0.1 [15-OCT-2012]
285
291
  [#149]: https://github.com/arangamani/jenkins_api_client/issues/149
286
292
  [#151]: https://github.com/arangamani/jenkins_api_client/issues/151
287
293
  [#153]: https://github.com/arangamani/jenkins_api_client/issues/153
294
+ [#156]: https://github.com/arangamani/jenkins_api_client/issues/156
295
+ [#157]: https://github.com/arangamani/jenkins_api_client/issues/157
296
+ [#158]: https://github.com/arangamani/jenkins_api_client/issues/158
288
297
  [@Loa]: https://github.com/Loa
289
298
  [@Niarfe]: https://github.com/Niarfe
290
299
  [@bobbrez]: https://github.com/bobbrez
@@ -2,16 +2,16 @@
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_api_client 1.1.0 ruby lib
5
+ # stub: jenkins_api_client 1.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "jenkins_api_client"
9
- s.version = "1.1.0"
9
+ s.version = "1.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Kannan Manickam"]
14
- s.date = "2014-11-05"
14
+ s.date = "2014-11-13"
15
15
  s.description = "\nThis is a simple and easy-to-use Jenkins Api client with features focused on\nautomating Job configuration programaticaly and so forth"
16
16
  s.email = ["arangamani.kannan@gmail.com"]
17
17
  s.executables = ["jenkinscli"]
@@ -46,6 +46,7 @@ Gem::Specification.new do |s|
46
46
  "lib/jenkins_api_client/plugin_settings/base.rb",
47
47
  "lib/jenkins_api_client/plugin_settings/collection.rb",
48
48
  "lib/jenkins_api_client/plugin_settings/hipchat.rb",
49
+ "lib/jenkins_api_client/plugin_settings/workspace_cleanup.rb",
49
50
  "lib/jenkins_api_client/system.rb",
50
51
  "lib/jenkins_api_client/urihelper.rb",
51
52
  "lib/jenkins_api_client/user.rb",
@@ -73,6 +74,7 @@ Gem::Specification.new do |s|
73
74
  "spec/unit_tests/node_spec.rb",
74
75
  "spec/unit_tests/plugin_settings/colllection_spec.rb",
75
76
  "spec/unit_tests/plugin_settings/hipchat_spec.rb",
77
+ "spec/unit_tests/plugin_settings/workspace_cleanup_spec.rb",
76
78
  "spec/unit_tests/plugin_spec.rb",
77
79
  "spec/unit_tests/spec_helper.rb",
78
80
  "spec/unit_tests/system_spec.rb",
@@ -44,6 +44,7 @@ module JenkinsApi
44
44
 
45
45
  autoload :Base, 'jenkins_api_client/plugin_settings/base'
46
46
  autoload :Hipchat, 'jenkins_api_client/plugin_settings/hipchat'
47
+ autoload :WorkspaceCleanup, 'jenkins_api_client/plugin_settings/workspace_cleanup'
47
48
  autoload :Collection, 'jenkins_api_client/plugin_settings/collection'
48
49
  end
49
50
  end
@@ -74,7 +74,8 @@ module JenkinsApi
74
74
  #
75
75
  # @option args [String] :server_ip the IP address of the Jenkins CI server
76
76
  # @option args [String] :server_port the port on which the Jenkins listens
77
- # @option args [String] :server_url the full URL address of the Jenkins CI server (http/https). This can include username/password. :username/:password options will override any user/pass value in the URL
77
+ # @option args [String] :server_url the full URL address of the Jenkins CI server (http/https). This can include
78
+ # username/password. :username/:password options will override any user/pass value in the URL
78
79
  # @option args [String] :username the username used for connecting to the server (optional)
79
80
  # @option args [String] :password the password or API Key for connecting to the CI server (optional)
80
81
  # @option args [String] :password_base64 the password with base64 encoded format for connecting to the CI
@@ -263,9 +264,11 @@ module JenkinsApi
263
264
  request = Net::HTTP::Get.new(uri.request_uri)
264
265
  request.basic_auth(@username, @password)
265
266
  response = http.request(request)
266
- File.write(File.expand_path(filename), response.body) if response.code == "200"
267
- rescue
268
- raise "Response was not 200"
267
+ if response.code == "200"
268
+ File.write(File.expand_path(filename), response.body)
269
+ else
270
+ raise "Couldn't get the artifact"
271
+ end
269
272
  end
270
273
 
271
274
  # Connects to the Jenkins server, sends the specified request and returns
@@ -322,14 +322,19 @@ module JenkinsApi
322
322
  "#{params[:block_build_when_downstream_building]}")
323
323
  xml.blockBuildWhenUpstreamBuilding(
324
324
  "#{params[:block_build_when_upstream_building]}")
325
- if params[:timer]
326
- xml.triggers.vector do
325
+ xml.triggers.vector do
326
+ if params[:timer]
327
327
  xml.send("hudson.triggers.TimerTrigger") do
328
328
  xml.spec params[:timer]
329
329
  end
330
330
  end
331
- else
332
- xml.triggers.vector
331
+
332
+ if params[:scm_trigger]
333
+ xml.send("hudson.triggers.SCMTrigger") do
334
+ xml.spec params[:scm_trigger]
335
+ xml.ignorePostCommitHooks params.fetch(:ignore_post_commit_hooks) { false }
336
+ end
337
+ end
333
338
  end
334
339
  xml.concurrentBuild "#{params[:concurrent_build]}"
335
340
  # Shell command stuff
@@ -348,6 +353,7 @@ module JenkinsApi
348
353
  notification_email(params, xml) if params[:notification_email]
349
354
  # Build portion of XML that adds skype notification
350
355
  skype_notification(params, xml) if params[:skype_targets]
356
+ artifact_archiver(params[:artifact_archiver], xml)
351
357
  end
352
358
  xml.buildWrappers
353
359
  end
@@ -424,6 +430,40 @@ module JenkinsApi
424
430
  end
425
431
  end
426
432
 
433
+ # Configure post-build step to archive artifacts
434
+ #
435
+ # @param artifact_params [Hash] parameters controlling how artifacts are archived
436
+ #
437
+ # @option artifact_params [String] :artifact_files
438
+ # pattern or names of files to archive
439
+ # @option artifact_params [String] :excludes
440
+ # pattern or names of files to exclude
441
+ # @option artifact_params [Boolean] :fingerprint (false)
442
+ # fingerprint the archives
443
+ # @option artifact_params [Boolean] :allow_empty_archive (false)
444
+ # whether to allow empty archives
445
+ # @option artifact_params [Boolean] :only_if_successful (false)
446
+ # only archive if successful
447
+ # @option artifact_params [Boolean] :default_excludes (false)
448
+ # exclude defaults automatically
449
+ #
450
+ # @return [Nokogiri::XML::Builder]
451
+ #
452
+ def artifact_archiver(artifact_params, xml)
453
+ return xml if artifact_params.nil?
454
+
455
+ xml.send('hudson.tasks.ArtifactArchiver') do |x|
456
+ x.artifacts artifact_params.fetch(:artifact_files) { '' }
457
+ x.excludes artifact_params.fetch(:excludes) { '' }
458
+ x.fingerprint artifact_params.fetch(:fingerprint) { false }
459
+ x.allowEmptyArchive artifact_params.fetch(:allow_empty_archive) { false }
460
+ x.onlyIfSuccessful artifact_params.fetch(:only_if_successful) { false }
461
+ x.defaultExcludes artifact_params.fetch(:default_excludes) { false }
462
+ end
463
+
464
+ xml
465
+ end
466
+
427
467
  # Rename a job given the old name and new name
428
468
  #
429
469
  # @param [String] old_job Name of the old job
@@ -26,7 +26,7 @@ module JenkinsApi
26
26
  # installed plugins, installing new plgins through hacks, and performing a
27
27
  # lot of operations on installed plugins. It also gives the ability to
28
28
  # obtain the details about available plugins in Jenkins update center by
29
- # commmunicating with /updateCenter API.
29
+ # communicating with /updateCenter API.
30
30
  #
31
31
  class PluginManager
32
32
 
@@ -28,7 +28,7 @@ module JenkinsApi
28
28
  # This gives some flexibility for creating/updating simple jobs so the
29
29
  # user doesn't have to learn about handling xml.
30
30
  #
31
- # @param params [Hash] parameters to create a freestyle project
31
+ # @param xml_doc [Nokogiri::XML::Document] xml document to be updated with the plugin configuration
32
32
  #
33
33
  # @return [Nokogiri::XML::Document]
34
34
  def configure(xml_doc)
@@ -0,0 +1,35 @@
1
+ module JenkinsApi
2
+ class Client
3
+ module PluginSettings
4
+ class WorkspaceCleanup < Base
5
+
6
+ # @option params [Boolean] :delete_dirs (false)
7
+ # whether to also apply pattern on directories
8
+ # @option params [String] :cleanup_parameters
9
+ # @option params [String] :external_delete
10
+ def initialize(params={})
11
+ @params = params
12
+ end
13
+
14
+ # Create or Update a job with params given as a hash instead of the xml
15
+ # This gives some flexibility for creating/updating simple jobs so the
16
+ # user doesn't have to learn about handling xml.
17
+ #
18
+ # @param xml_doc [Nokogiri::XML::Document] xml document to be updated with the plugin configuration
19
+ #
20
+ # @return [Nokogiri::XML::Document]
21
+ def configure(xml_doc)
22
+ xml_doc.tap do |doc|
23
+ Nokogiri::XML::Builder.with(doc.at('buildWrappers')) do |build_wrappers|
24
+ build_wrappers.send('hudson.plugins.ws__cleanup.PreBuildCleanup') do |x|
25
+ x.deleteDirs @params.fetch(:delete_dirs) { false }
26
+ x.cleanupParameter @params.fetch(:cleanup_parameter) { '' }
27
+ x.externalDelete @params.fetch(:external_delete) { '' }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -25,7 +25,7 @@ module JenkinsApi
25
25
  # Major version of the gem
26
26
  MAJOR = 1
27
27
  # Minor version of the gem
28
- MINOR = 1
28
+ MINOR = 2
29
29
  # Tiny version of the gem used for patches
30
30
  TINY = 0
31
31
  # Used for pre-releases
@@ -641,6 +641,80 @@ describe JenkinsApi::Client::Job do
641
641
  expect(@job.plugin_collection).to receive(:configure).and_return(Nokogiri::XML::Document.new(''))
642
642
  @job.build_freestyle_config(name: 'foobar')
643
643
  end
644
+
645
+ context 'scm_trigger and ignore_post_commit_hooks params' do
646
+ it 'configures triggers with a hudson.triggers.SCMTrigger' do
647
+ xml = @job.build_freestyle_config(
648
+ name: 'foobar',
649
+ scm_trigger: 'H 0 29 2 0',
650
+ ignore_post_commit_hooks: true
651
+ )
652
+
653
+ xml_config = Nokogiri::XML(xml)
654
+ expect(xml_config.at_css('triggers spec').content).to eql('H 0 29 2 0')
655
+ expect(xml_config.at_css('triggers ignorePostCommitHooks').content).to eql('true')
656
+ end
657
+
658
+ it 'does not add a tag to triggers if not passed scm_trigger param' do
659
+ xml = @job.build_freestyle_config(
660
+ name: 'foobar'
661
+ )
662
+
663
+ xml_config = Nokogiri::XML(xml)
664
+ expect(xml_config.at_css('triggers').children).to be_empty
665
+ end
666
+ end
667
+
668
+ context 'artifact archiver build step' do
669
+ context 'given artifact_archiver params' do
670
+ it 'configures with given params' do
671
+ artifact_archiver_params = {
672
+ artifact_files: '**',
673
+ excludes: 'foo',
674
+ fingerprint: true,
675
+ allow_empty_archive: true,
676
+ only_if_successful: true,
677
+ default_excludes: true,
678
+ }
679
+ xml = @job.build_freestyle_config(
680
+ name: 'foobar',
681
+ artifact_archiver: artifact_archiver_params,
682
+ )
683
+ xml_config = Nokogiri::XML(xml)
684
+
685
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/artifacts').content).to eql('**')
686
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/excludes').content).to eql('foo')
687
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/fingerprint').content).to eql('true')
688
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/allowEmptyArchive').content).to eql('true')
689
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/onlyIfSuccessful').content).to eql('true')
690
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/defaultExcludes').content).to eql('true')
691
+ end
692
+
693
+ it 'configures with defaults for non-specified options' do
694
+ xml = @job.build_freestyle_config(
695
+ name: 'foobar',
696
+ artifact_archiver: {},
697
+ )
698
+ xml_config = Nokogiri::XML(xml)
699
+
700
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/artifacts').content).to eql('')
701
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/excludes').content).to eql('')
702
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/fingerprint').content).to eql('false')
703
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/allowEmptyArchive').content).to eql('false')
704
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/onlyIfSuccessful').content).to eql('false')
705
+ expect(xml_config.at_xpath('//publishers/hudson.tasks.ArtifactArchiver/defaultExcludes').content).to eql('false')
706
+ end
707
+ end
708
+
709
+ context 'not given artifact_archiver params' do
710
+ it 'omits hudson.tasks.ArtifactArchiver tag' do
711
+ xml = @job.build_freestyle_config(name: 'foobar')
712
+ xml_config = Nokogiri::XML(xml)
713
+
714
+ expect(xml_config.xpath('//publishers/hudson.tasks.ArtifactArchiver')).to be_empty
715
+ end
716
+ end
717
+ end
644
718
  end
645
719
 
646
720
  context 'plugin settings' do
@@ -0,0 +1,31 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe JenkinsApi::Client::PluginSettings::WorkspaceCleanup do
4
+ describe '#configure' do
5
+ context 'given a Nokogiri::XML::Builder object' do
6
+ let(:xml_doc) { Nokogiri::XML("<?xml version=\"1.0\"?>\n<buildWrappers>\n</buildWrappers>\n") }
7
+
8
+ it 'adds workspace cleanup configuration to the buildWrappers' do
9
+ workspace_cleanup_settings = JenkinsApi::Client::PluginSettings::WorkspaceCleanup.new
10
+ workspace_cleanup_settings.configure(xml_doc)
11
+
12
+ expect(xml_doc.at_css('buildWrappers deleteDirs').content).to eql('false')
13
+ expect(xml_doc.at_css('buildWrappers cleanupParameter').content).to eql('')
14
+ expect(xml_doc.at_css('buildWrappers externalDelete').content).to eql('')
15
+ end
16
+
17
+ it 'uses params if given' do
18
+ workspace_cleanup_settings = JenkinsApi::Client::PluginSettings::WorkspaceCleanup.new({
19
+ :delete_dirs => true,
20
+ :cleanup_parameter => 'foo',
21
+ :external_delete => 'bar',
22
+ })
23
+ workspace_cleanup_settings.configure(xml_doc)
24
+
25
+ expect(xml_doc.at_css('buildWrappers deleteDirs').content).to eql('true')
26
+ expect(xml_doc.at_css('buildWrappers cleanupParameter').content).to eql('foo')
27
+ expect(xml_doc.at_css('buildWrappers externalDelete').content).to eql('bar')
28
+ end
29
+ end
30
+ end
31
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kannan Manickam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-05 00:00:00.000000000 Z
11
+ date: 2014-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -219,6 +219,7 @@ files:
219
219
  - lib/jenkins_api_client/plugin_settings/base.rb
220
220
  - lib/jenkins_api_client/plugin_settings/collection.rb
221
221
  - lib/jenkins_api_client/plugin_settings/hipchat.rb
222
+ - lib/jenkins_api_client/plugin_settings/workspace_cleanup.rb
222
223
  - lib/jenkins_api_client/system.rb
223
224
  - lib/jenkins_api_client/urihelper.rb
224
225
  - lib/jenkins_api_client/user.rb
@@ -246,6 +247,7 @@ files:
246
247
  - spec/unit_tests/node_spec.rb
247
248
  - spec/unit_tests/plugin_settings/colllection_spec.rb
248
249
  - spec/unit_tests/plugin_settings/hipchat_spec.rb
250
+ - spec/unit_tests/plugin_settings/workspace_cleanup_spec.rb
249
251
  - spec/unit_tests/plugin_spec.rb
250
252
  - spec/unit_tests/spec_helper.rb
251
253
  - spec/unit_tests/system_spec.rb