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 +4 -4
- data/.gitignore +3 -0
- data/CHANGELOG.md +9 -0
- data/jenkins_api_client.gemspec +5 -3
- data/lib/jenkins_api_client.rb +1 -0
- data/lib/jenkins_api_client/client.rb +7 -4
- data/lib/jenkins_api_client/job.rb +44 -4
- data/lib/jenkins_api_client/plugin_manager.rb +1 -1
- data/lib/jenkins_api_client/plugin_settings/hipchat.rb +1 -1
- data/lib/jenkins_api_client/plugin_settings/workspace_cleanup.rb +35 -0
- data/lib/jenkins_api_client/version.rb +1 -1
- data/spec/unit_tests/job_spec.rb +74 -0
- data/spec/unit_tests/plugin_settings/workspace_cleanup_spec.rb +31 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae6ba9e0eccf49a825c6adc02e7d6d3a6200ac9d
|
4
|
+
data.tar.gz: eeb2d4cfb1d2858e157c74aa6b146ba572bf7246
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e6088e2b7231336b556fca98788f58be9abb0d68a739ecc73789adf22f23532519cd7f08b7b4e7ed9d5f5a96db24de9ef3f303752e14784aae91e9a129d9acc
|
7
|
+
data.tar.gz: 148deba58cb95bb445af9b232613c740648590def0e96cfdb4bc5c7cb6687a68e17682cf8c3f9408e5ae086ecec5bb69240017547c0872a71a5376e071b77aa8
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -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
|
data/jenkins_api_client.gemspec
CHANGED
@@ -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.
|
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.
|
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-
|
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",
|
data/lib/jenkins_api_client.rb
CHANGED
@@ -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
|
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
|
-
|
267
|
-
|
268
|
-
|
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
|
-
|
326
|
-
|
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
|
-
|
332
|
-
|
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
|
-
#
|
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
|
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
|
data/spec/unit_tests/job_spec.rb
CHANGED
@@ -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.
|
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-
|
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
|