jenkins_pipeline_builder 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +101 -13
  3. data/bin/generate +1 -1
  4. data/commit_build.sh +7 -0
  5. data/jenkins_pipeline_builder.gemspec +1 -1
  6. data/lib/{jenksin_pipeline_builder.rb → jenkins_pipeline_builder.rb} +16 -16
  7. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/builders.rb +0 -0
  8. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/cli/base.rb +0 -0
  9. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/cli/helper.rb +2 -1
  10. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/cli/pipeline.rb +0 -0
  11. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/cli/view.rb +0 -0
  12. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/compiler.rb +0 -0
  13. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/generator.rb +32 -16
  14. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/job_builder.rb +0 -0
  15. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/module_registry.rb +0 -0
  16. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/publishers.rb +0 -0
  17. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/triggers.rb +0 -0
  18. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/utils.rb +0 -0
  19. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/version.rb +1 -1
  20. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/view.rb +0 -0
  21. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/wrappers.rb +0 -0
  22. data/lib/{jenksin_pipeline_builder → jenkins_pipeline_builder}/xml_helper.rb +0 -0
  23. data/spec/func_tests/spec_helper.rb +1 -1
  24. data/spec/unit_tests/fixtures/files/project.yaml +1 -1
  25. data/spec/unit_tests/fixtures/templates/external_job.yaml +4 -0
  26. data/spec/unit_tests/fixtures/templates/project_with_jobs.yaml +25 -0
  27. data/spec/unit_tests/resolve_dependencies_spec.rb +1 -1
  28. data/spec/unit_tests/spec_helper.rb +2 -2
  29. metadata +24 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ca15662c8969eb3344f177fcb31ab60d00d6b22
4
- data.tar.gz: 8f65fdb0f74e18c8f301db3d7002fe842ca9f972
3
+ metadata.gz: 9cc9e61ea35987e7d0f6d0504fb55378c755df1b
4
+ data.tar.gz: c74fa0ad124aa3a4b41b941593836846cb608437
5
5
  SHA512:
6
- metadata.gz: 439d16077649cd6bcf6ab257c59ff1fe4703275a9eb25bbc43b4579ec867e579230761edbb30ef14420f32ab2bc4d0063e5c4e02555e000569242c83cb70dedd
7
- data.tar.gz: 8f8f450ac270775f331038742d3c7390ae521339a4ef846197c1c8110a124f5d7e14565c5b2d2f959b39e9881d104a2a563ea895ba74371b135613167d89066a
6
+ metadata.gz: 59cf44be2dff1d951273e2a026708cb354bfcb6581daa164b64c058593d7add78b8c7a6a34253272019c2886fbd664ce2545bf3bd2e371fd7c44c6769b4dcd7b
7
+ data.tar.gz: e86d64a7cae810430373278a39990c3046e2c247f2af2c5c8c887f51073c322974cb529f779643c30cf772d00024e1735bb57cdadfd940e282fc1891ff71d4e9
data/README.md CHANGED
@@ -4,15 +4,20 @@ jenkins-pipeline-builder
4
4
  YAML driven CI Jenkins Pipeline Builder enabling to version your artifact pipelines alongside with the artifact source itself.
5
5
 
6
6
 
7
- # JenkinsPipeline::Generator
7
+ # Background
8
+
9
+ This project is inspired by a great work done by Arangamani with [jenkins_api_client](https://github.com/arangamani/jenkins_api_client) and
10
+ amazing progress done by the Open Stack community with their [jenkins-job-builder](http://ci.openstack.org/jenkins-job-builder/)
8
11
 
9
- TODO: Write a gem description
12
+ The YAML structure very closely resembles the OpenStack Job Builder, but, in comparison to Python version, is 100%
13
+ pure Ruby and uses Jenkins API Client and has additional functionlity of building different types of Jenkins views.
10
14
 
11
- This is how you can bootstrap a pipeline:
15
+ # JenkinsPipeline::Generator
12
16
 
13
- generate pipeline -d -c config/login.yml bootstrap ./pipeline-archetype
17
+ USAGE:
18
+ ------
14
19
 
15
- ## Installation
20
+ ### Installation
16
21
 
17
22
  Add this line to your application's Gemfile:
18
23
 
@@ -30,17 +35,43 @@ Or install it yourself as:
30
35
  [optional] brew link libxml2 libxslt
31
36
  gem install nokogiri
32
37
 
33
- ## Usage
38
+ ### Authentication
39
+
40
+ For more info see [jenkins_api_client](https://github.com/arangamani/jenkins_api_client).
41
+ Supplying credentials to the client is optional, as not all Jenkins instances
42
+ require authentication. This project supports two types of password-based
43
+ authentication. You can just you the plain password by using <tt>password</tt>
44
+ parameter. If you don't prefer leaving plain passwords in the credentials file,
45
+ you can encode your password in base64 format and use <tt>password_base64</tt>
46
+ parameter to specify the password either in the arguments or in the credentials
47
+ file. To use the client without credentials, just leave out the
48
+ <tt>username</tt> and <tt>password</tt> parameters. The <tt>password</tt>
49
+ parameter is only required if <tt>username</tt> is specified.
50
+
51
+ #### Using with Open ID
52
+
53
+ For more info see [jenkins_api_client](https://github.com/arangamani/jenkins_api_client).
54
+ It is very simple to authenticate with your Jenkins server that has Open ID
55
+ authentication enabled. You will have to obtain your API token and use the API
56
+ token as the password. For obtaining the API token, go to your user configuration
57
+ page and click 'Show API Token'. Use this token for the `password` parameter when
58
+ initializing the client.
59
+
60
+ ### Basic usage
61
+
62
+ Create all your Job description files in a folder (Ex.: ./pipeline). Follow the Job/View/Project DSL.
63
+ Try to extract the reusable values out of jobs into the project.
34
64
 
35
- TODO: Write usage instructions here
65
+ Put the right information about the location of your Jenkins server and the appropriate credentials
66
+ in a config file (ex: config.login.yml)
36
67
 
37
- ## Contributing
68
+ Now you ready to bootstrap a pipeline:
38
69
 
39
- 1. Fork it
40
- 2. Create your feature branch (`git checkout -b my-new-feature`)
41
- 3. Commit your changes (`git commit -am 'Add some feature'`)
42
- 4. Push to the branch (`git push origin my-new-feature`)
43
- 5. Create new Pull Request
70
+ generate pipeline -d -c config/login.yml bootstrap ./pipeline
71
+
72
+
73
+ DSL:
74
+ ----
44
75
 
45
76
  ## Job DSL
46
77
  Here's a high level overview of what's available:
@@ -134,3 +165,60 @@ Here's a high level overview of what's available:
134
165
  build("job_name2", param1: build21.environment.get("some_var"))
135
166
  }
136
167
  ```
168
+
169
+ ### View DSL
170
+ ```yaml
171
+ - view:
172
+ name: 'view name'
173
+ type: 'listview' # Optional: listview [default], myview, nestedView, categorizedView, dashboardView, multijobView
174
+ description: 'description'
175
+ regex: '.*'
176
+ groupingRules:
177
+ - groupRegex: "1.*"
178
+ namingRule: "sub view"
179
+ ```
180
+
181
+ ### Project DSL
182
+ ```yaml
183
+ - project:
184
+ name: Your project name
185
+ jobs:
186
+ - Job1
187
+ - Job2
188
+ param1: value1
189
+ - JobTemplate1
190
+ ```
191
+
192
+ ### Default Settings Section
193
+
194
+ The defaults section mimics behavior of [jenkins-job-builder Defaults](http://ci.openstack.org/jenkins-job-builder/configuration.html#defaults)
195
+ If a set of Defaults is specified with the name global, that will be used by all Job (and Job Template) definitions.
196
+
197
+ ```yaml
198
+ - defaults:
199
+ name: global
200
+ param1: 'value 1'
201
+ ```
202
+
203
+
204
+ CONTRIBUTING:
205
+ ----------------
206
+
207
+ If you would like to contribute to this project, just do the following:
208
+
209
+ 1. Fork the repo on Github.
210
+ 2. Add your features and make commits to your forked repo.
211
+ 3. Make a pull request to this repo.
212
+ 4. Review will be done and changes will be requested.
213
+ 5. Once changes are done or no changes are required, pull request will be merged.
214
+ 6. The next release will have your changes in it.
215
+
216
+ Please take a look at the issues page if you want to get started.
217
+
218
+ FEATURE REQUEST:
219
+ ----------------
220
+
221
+ If you use this gem for your project and you think it would be nice to have a
222
+ particular feature that is presently not implemented, I would love to hear that
223
+ and consider working on it. Just open an issue in Github as a feature request.
224
+
data/bin/generate CHANGED
@@ -23,6 +23,6 @@
23
23
  #!/usr/bin/env ruby
24
24
 
25
25
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
26
- require 'jenksin_pipeline_builder'
26
+ require 'jenkins_pipeline_builder'
27
27
  JenkinsPipelineBuilder::CLI::Base.start
28
28
 
data/commit_build.sh ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ bundle --version || gem install bundler --no-ri --no-rdoc
3
+ bundle install
4
+ rm -f *.gem
5
+ bundle exec rake spec || exit $?
6
+ bundle exec gem build jenkins_pipeline_builder.gemspec || exit $?
7
+ bundle exec gem bump
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'jenksin_pipeline_builder/version'
4
+ require 'jenkins_pipeline_builder/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'jenkins_pipeline_builder'
@@ -20,20 +20,20 @@
20
20
  # THE SOFTWARE.
21
21
  #
22
22
 
23
- require 'jenksin_pipeline_builder/version'
24
- require 'jenksin_pipeline_builder/utils'
25
- require 'jenksin_pipeline_builder/xml_helper'
26
- require 'jenksin_pipeline_builder/compiler'
27
- require 'jenksin_pipeline_builder/job_builder'
28
- require 'jenksin_pipeline_builder/module_registry'
29
- require 'jenksin_pipeline_builder/builders'
30
- require 'jenksin_pipeline_builder/wrappers'
31
- require 'jenksin_pipeline_builder/triggers'
32
- require 'jenksin_pipeline_builder/publishers'
33
- require 'jenksin_pipeline_builder/view'
34
- require 'jenksin_pipeline_builder/generator'
23
+ require 'jenkins_pipeline_builder/version'
24
+ require 'jenkins_pipeline_builder/utils'
25
+ require 'jenkins_pipeline_builder/xml_helper'
26
+ require 'jenkins_pipeline_builder/compiler'
27
+ require 'jenkins_pipeline_builder/job_builder'
28
+ require 'jenkins_pipeline_builder/module_registry'
29
+ require 'jenkins_pipeline_builder/builders'
30
+ require 'jenkins_pipeline_builder/wrappers'
31
+ require 'jenkins_pipeline_builder/triggers'
32
+ require 'jenkins_pipeline_builder/publishers'
33
+ require 'jenkins_pipeline_builder/view'
34
+ require 'jenkins_pipeline_builder/generator'
35
35
 
36
- require 'jenksin_pipeline_builder/cli/helper'
37
- require 'jenksin_pipeline_builder/cli/view'
38
- require 'jenksin_pipeline_builder/cli/pipeline'
39
- require 'jenksin_pipeline_builder/cli/base'
36
+ require 'jenkins_pipeline_builder/cli/helper'
37
+ require 'jenkins_pipeline_builder/cli/view'
38
+ require 'jenkins_pipeline_builder/cli/pipeline'
39
+ require 'jenkins_pipeline_builder/cli/base'
@@ -41,8 +41,9 @@ module JenkinsPipelineBuilder
41
41
  creds = options
42
42
  elsif options[:creds_file]
43
43
  creds = YAML.load_file(
44
+ File.expand_path(options[:creds_file])
44
45
  #File.expand_path(options[:creds_file], __FILE__)
45
- options[:creds_file]
46
+ #options[:creds_file]
46
47
  )
47
48
  elsif File.exist?("#{ENV['HOME']}/.jenkins_api_client/login.yml")
48
49
  creds = YAML.load_file(
@@ -110,7 +110,7 @@ module JenkinsPipelineBuilder
110
110
  def load_collection_from_path(path, recursively = false)
111
111
  if File.directory?(path)
112
112
  @logger.info "Generating from folder #{path}"
113
- Dir.glob(File.join(path, '/*.yaml')).each do |file|
113
+ Dir[File.join(path, '/*.yaml'), File.join(path, '/*.yml')].each do |file|
114
114
  if File.directory?(file)
115
115
  if recursively
116
116
  load_collection_from_path(File.join(path, file), recursively)
@@ -194,30 +194,46 @@ module JenkinsPipelineBuilder
194
194
  return result
195
195
  end
196
196
 
197
+ def jobs
198
+ result = []
199
+ @job_collection.values.each do |item|
200
+ result << item if item[:type] == :job
201
+ end
202
+ return result
203
+ end
204
+
197
205
  def bootstrap(path)
198
206
  @logger.info "Bootstrapping pipeline from path #{path}"
199
207
  load_collection_from_path(path)
200
208
 
201
- projects.each do |project|
202
- compiled_project = resolve_project(project)
203
- pp compiled_project
204
-
205
- if compiled_project[:value][:jobs]
206
- compiled_project[:value][:jobs].each do |i|
207
- job = i[:result]
208
- xml = compile_job_to_xml(job)
209
- create_or_update(job, xml)
210
- end
209
+ # Publish all the jobs if the projects are not found
210
+ if projects.count == 0
211
+ jobs.each do |i|
212
+ job = i[:value]
213
+ xml = compile_job_to_xml(job)
214
+ create_or_update(job, xml)
211
215
  end
216
+ else
217
+ projects.each do |project|
218
+ compiled_project = resolve_project(project)
219
+ #pp compiled_project
220
+
221
+ if compiled_project[:value][:jobs]
222
+ compiled_project[:value][:jobs].each do |i|
223
+ job = i[:result]
224
+ xml = compile_job_to_xml(job)
225
+ create_or_update(job, xml)
226
+ end
227
+ end
212
228
 
213
- if compiled_project[:value][:views]
214
- compiled_project[:value][:views].each do |v|
215
- _view = v[:result]
216
- view.create(_view)
229
+ if compiled_project[:value][:views]
230
+ compiled_project[:value][:views].each do |v|
231
+ _view = v[:result]
232
+ view.create(_view)
233
+ end
217
234
  end
218
235
  end
219
236
  end
220
-
221
237
  end
222
238
 
223
239
  def dump(job_name)
@@ -21,5 +21,5 @@
21
21
  #
22
22
 
23
23
  module JenkinsPipelineBuilder
24
- VERSION = "0.1.3"
24
+ VERSION = "0.1.5"
25
25
  end
@@ -6,7 +6,7 @@ require 'simplecov-rcov'
6
6
 
7
7
  SimpleCov.start if ENV["COVERAGE"]
8
8
 
9
- require File.expand_path('../../../lib/jenksin_pipeline_builder', __FILE__)
9
+ require File.expand_path('../../../lib/jenkins_pipeline_builder', __FILE__)
10
10
 
11
11
  RSpec.configure do |config|
12
12
  config.treat_symbols_as_metadata_keys_with_true_values = true
@@ -3,7 +3,7 @@
3
3
  description: 'Do not edit this job through the web!'
4
4
  hipchat_room: HipChat Room Name
5
5
  os_username: admin
6
- os_priv_key: /home/user/qa-oskey.priv
6
+ os_priv_key: /home/user/key.priv
7
7
  os_password: some_encrypted_password
8
8
 
9
9
  - project:
@@ -0,0 +1,4 @@
1
+ - job:
2
+ name: foo-test
3
+ builders:
4
+ - shell: 'make test'
@@ -0,0 +1,25 @@
1
+ - job-template:
2
+ name: '{{name}}-unit-tests'
3
+ builders:
4
+ - shell: unittest
5
+ publishers:
6
+ - email:
7
+ recipients: '{{mail-to}}'
8
+
9
+ - job-template:
10
+ name: '{{name}}-perf-tests'
11
+ builders:
12
+ - shell: perftest
13
+ publishers:
14
+ - email:
15
+ recipients: '{{mail-to}}'
16
+
17
+ - project:
18
+ name: project-name
19
+ db: my_own_db
20
+ jobs:
21
+ - '{{name}}-unit-tests':
22
+ mail-to: developer@nowhere.net
23
+ - '{{name}}-perf-tests':
24
+ mail-to: projmanager@nowhere.net
25
+ - foo-test
@@ -208,7 +208,7 @@ describe 'Templates resolver' do
208
208
  end
209
209
 
210
210
  it 'shoult resolve job template into a job' do
211
- file = 'project_simple'
211
+ file = 'project_with_jobs'
212
212
  path = File.expand_path('../fixtures/templates/' + file, __FILE__)
213
213
  project = YAML.load_file(path + '.yaml')
214
214
 
@@ -5,7 +5,7 @@ require 'simplecov'
5
5
  require 'simplecov-rcov'
6
6
 
7
7
  SimpleCov.profiles.define 'spec' do
8
- add_group 'jenksin_pipeline_builder', '/lib/'
8
+ add_group 'jenkins_pipeline_builder', '/lib/'
9
9
  coverage_dir 'out/coverage'
10
10
  formatter SimpleCov::Formatter::MultiFormatter[
11
11
  SimpleCov::Formatter::Console,
@@ -21,7 +21,7 @@ end
21
21
 
22
22
  SimpleCov.start 'spec' #if ENV["COVERAGE"]
23
23
 
24
- require File.expand_path('../../../lib/jenksin_pipeline_builder', __FILE__)
24
+ require File.expand_path('../../../lib/jenkins_pipeline_builder', __FILE__)
25
25
 
26
26
  RSpec.configure do |config|
27
27
  config.before(:each) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins_pipeline_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Moochnick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-05 00:00:00.000000000 Z
11
+ date: 2014-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -265,25 +265,26 @@ files:
265
265
  - README.md
266
266
  - Rakefile
267
267
  - bin/generate
268
+ - commit_build.sh
268
269
  - config/login.yml
269
270
  - jenkins_pipeline_builder.gemspec
270
- - lib/jenksin_pipeline_builder.rb
271
- - lib/jenksin_pipeline_builder/builders.rb
272
- - lib/jenksin_pipeline_builder/cli/base.rb
273
- - lib/jenksin_pipeline_builder/cli/helper.rb
274
- - lib/jenksin_pipeline_builder/cli/pipeline.rb
275
- - lib/jenksin_pipeline_builder/cli/view.rb
276
- - lib/jenksin_pipeline_builder/compiler.rb
277
- - lib/jenksin_pipeline_builder/generator.rb
278
- - lib/jenksin_pipeline_builder/job_builder.rb
279
- - lib/jenksin_pipeline_builder/module_registry.rb
280
- - lib/jenksin_pipeline_builder/publishers.rb
281
- - lib/jenksin_pipeline_builder/triggers.rb
282
- - lib/jenksin_pipeline_builder/utils.rb
283
- - lib/jenksin_pipeline_builder/version.rb
284
- - lib/jenksin_pipeline_builder/view.rb
285
- - lib/jenksin_pipeline_builder/wrappers.rb
286
- - lib/jenksin_pipeline_builder/xml_helper.rb
271
+ - lib/jenkins_pipeline_builder.rb
272
+ - lib/jenkins_pipeline_builder/builders.rb
273
+ - lib/jenkins_pipeline_builder/cli/base.rb
274
+ - lib/jenkins_pipeline_builder/cli/helper.rb
275
+ - lib/jenkins_pipeline_builder/cli/pipeline.rb
276
+ - lib/jenkins_pipeline_builder/cli/view.rb
277
+ - lib/jenkins_pipeline_builder/compiler.rb
278
+ - lib/jenkins_pipeline_builder/generator.rb
279
+ - lib/jenkins_pipeline_builder/job_builder.rb
280
+ - lib/jenkins_pipeline_builder/module_registry.rb
281
+ - lib/jenkins_pipeline_builder/publishers.rb
282
+ - lib/jenkins_pipeline_builder/triggers.rb
283
+ - lib/jenkins_pipeline_builder/utils.rb
284
+ - lib/jenkins_pipeline_builder/version.rb
285
+ - lib/jenkins_pipeline_builder/view.rb
286
+ - lib/jenkins_pipeline_builder/wrappers.rb
287
+ - lib/jenkins_pipeline_builder/xml_helper.rb
287
288
  - spec/func_tests/spec_helper.rb
288
289
  - spec/func_tests/view_spec.rb
289
290
  - spec/unit_tests/compiler_spec.rb
@@ -301,6 +302,8 @@ files:
301
302
  - spec/unit_tests/fixtures/files/Job-Multi-Project.xml
302
303
  - spec/unit_tests/fixtures/files/Job-Multi-Project.yaml
303
304
  - spec/unit_tests/fixtures/files/project.yaml
305
+ - spec/unit_tests/fixtures/templates/external_job.yaml
306
+ - spec/unit_tests/fixtures/templates/project_with_jobs.yaml
304
307
  - spec/unit_tests/generator_spec.rb
305
308
  - spec/unit_tests/module_registry_spec.rb
306
309
  - spec/unit_tests/resolve_dependencies_spec.rb
@@ -347,6 +350,8 @@ test_files:
347
350
  - spec/unit_tests/fixtures/files/Job-Multi-Project.xml
348
351
  - spec/unit_tests/fixtures/files/Job-Multi-Project.yaml
349
352
  - spec/unit_tests/fixtures/files/project.yaml
353
+ - spec/unit_tests/fixtures/templates/external_job.yaml
354
+ - spec/unit_tests/fixtures/templates/project_with_jobs.yaml
350
355
  - spec/unit_tests/generator_spec.rb
351
356
  - spec/unit_tests/module_registry_spec.rb
352
357
  - spec/unit_tests/resolve_dependencies_spec.rb