jenkins_pipeline_builder 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +28 -43
  4. data/{spec/unit_tests/spec_helper.rb → .simplecov} +2 -15
  5. data/README.md +66 -11
  6. data/Rakefile +1 -25
  7. data/bin/generate +0 -1
  8. data/jenkins_pipeline_builder.gemspec +6 -6
  9. data/lib/jenkins_pipeline_builder.rb +14 -8
  10. data/lib/jenkins_pipeline_builder/builders.rb +207 -155
  11. data/lib/jenkins_pipeline_builder/cli/base.rb +1 -1
  12. data/lib/jenkins_pipeline_builder/cli/describe.rb +12 -8
  13. data/lib/jenkins_pipeline_builder/cli/list.rb +7 -7
  14. data/lib/jenkins_pipeline_builder/compiler.rb +62 -49
  15. data/lib/jenkins_pipeline_builder/extensions.rb +108 -0
  16. data/lib/jenkins_pipeline_builder/generator.rb +209 -160
  17. data/lib/jenkins_pipeline_builder/job_builder.rb +174 -105
  18. data/lib/jenkins_pipeline_builder/module_registry.rb +43 -59
  19. data/lib/jenkins_pipeline_builder/publishers.rb +166 -93
  20. data/lib/jenkins_pipeline_builder/pull_request.rb +7 -7
  21. data/lib/jenkins_pipeline_builder/triggers.rb +63 -40
  22. data/lib/jenkins_pipeline_builder/utils.rb +10 -10
  23. data/lib/jenkins_pipeline_builder/version.rb +1 -1
  24. data/lib/jenkins_pipeline_builder/view.rb +94 -123
  25. data/lib/jenkins_pipeline_builder/wrappers.rb +163 -96
  26. data/spec/lib/jenkins_pipeline_builder/compiler_spec.rb +31 -0
  27. data/spec/lib/jenkins_pipeline_builder/extensions_spec.rb +145 -0
  28. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/pullrequest_pipeline/PullRequest-10-SampleJob.yaml +2 -0
  29. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/pullrequest_pipeline/PullRequest-40-PullRequestGenerator.yaml +12 -0
  30. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/pullrequest_pipeline/project.yaml +12 -0
  31. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/SamplePipeline-10-Commit.yaml +3 -0
  32. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/SamplePipeline-20-Acceptance.yaml +3 -0
  33. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/SamplePipeline-30-Release.yaml +3 -0
  34. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/project.yaml +12 -0
  35. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/sample_pipeline/view.yaml +5 -0
  36. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline/jobs.tar.gz +0 -0
  37. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/template_pipeline/project.yaml +15 -0
  38. data/spec/lib/jenkins_pipeline_builder/fixtures/generator_tests/test_job.xml +48 -0
  39. data/spec/lib/jenkins_pipeline_builder/fixtures/view_test/duplicate_view.yaml +4 -0
  40. data/spec/lib/jenkins_pipeline_builder/fixtures/view_test/parent_view.yaml +9 -0
  41. data/spec/lib/jenkins_pipeline_builder/fixtures/view_test/regular_view.yaml +5 -0
  42. data/spec/lib/jenkins_pipeline_builder/generator_spec.rb +165 -0
  43. data/spec/lib/jenkins_pipeline_builder/module_registry_spec.rb +147 -0
  44. data/spec/lib/jenkins_pipeline_builder/pull_request_spec.rb +47 -0
  45. data/spec/lib/jenkins_pipeline_builder/spec_helper.rb +25 -0
  46. data/spec/lib/jenkins_pipeline_builder/utils_spec.rb +22 -0
  47. data/spec/lib/jenkins_pipeline_builder/view_spec.rb +54 -0
  48. metadata +54 -136
  49. data/lib/jenkins_pipeline_builder/extendable.rb +0 -42
  50. data/lib/jenkins_pipeline_builder/xml_helper.rb +0 -40
  51. data/spec/func_tests/spec_helper.rb +0 -18
  52. data/spec/func_tests/view_spec.rb +0 -90
  53. data/spec/unit_tests/compiler_spec.rb +0 -20
  54. data/spec/unit_tests/fixtures/files/Job-Build-Flow.xml +0 -57
  55. data/spec/unit_tests/fixtures/files/Job-Build-Flow.yaml +0 -22
  56. data/spec/unit_tests/fixtures/files/Job-Build-Maven.xml +0 -129
  57. data/spec/unit_tests/fixtures/files/Job-Build-Maven.yaml +0 -31
  58. data/spec/unit_tests/fixtures/files/Job-DSL.yaml +0 -14
  59. data/spec/unit_tests/fixtures/files/Job-DSL1.xml +0 -27
  60. data/spec/unit_tests/fixtures/files/Job-DSL2.xml +0 -25
  61. data/spec/unit_tests/fixtures/files/Job-Gem-Build.xml +0 -142
  62. data/spec/unit_tests/fixtures/files/Job-Gem-Build.yaml +0 -43
  63. data/spec/unit_tests/fixtures/files/Job-Generate-From-Template.xml +0 -32
  64. data/spec/unit_tests/fixtures/files/Job-Generate-From-Template.yaml +0 -8
  65. data/spec/unit_tests/fixtures/files/Job-Multi-Project.xml +0 -134
  66. data/spec/unit_tests/fixtures/files/Job-Multi-Project.yaml +0 -49
  67. data/spec/unit_tests/fixtures/files/archive_artifact.xml +0 -23
  68. data/spec/unit_tests/fixtures/files/archive_artifact.yaml +0 -5
  69. data/spec/unit_tests/fixtures/files/choice_parameter.xml +0 -39
  70. data/spec/unit_tests/fixtures/files/choice_parameter.yaml +0 -14
  71. data/spec/unit_tests/fixtures/files/concurrent_build.xml +0 -17
  72. data/spec/unit_tests/fixtures/files/concurrent_build.yaml +0 -4
  73. data/spec/unit_tests/fixtures/files/copy_artifact.xml +0 -30
  74. data/spec/unit_tests/fixtures/files/copy_artifact.yaml +0 -14
  75. data/spec/unit_tests/fixtures/files/discard_old.xml +0 -17
  76. data/spec/unit_tests/fixtures/files/discard_old.yaml +0 -8
  77. data/spec/unit_tests/fixtures/files/downstream.xml +0 -36
  78. data/spec/unit_tests/fixtures/files/downstream.yaml +0 -13
  79. data/spec/unit_tests/fixtures/files/downstream_blocking.xml +0 -19
  80. data/spec/unit_tests/fixtures/files/downstream_blocking.yaml +0 -15
  81. data/spec/unit_tests/fixtures/files/git_include_exclude.xml +0 -53
  82. data/spec/unit_tests/fixtures/files/git_include_exclude.yaml +0 -8
  83. data/spec/unit_tests/fixtures/files/groovy_postbuild.xml +0 -29
  84. data/spec/unit_tests/fixtures/files/groovy_postbuild.yaml +0 -9
  85. data/spec/unit_tests/fixtures/files/periodic_build.xml +0 -21
  86. data/spec/unit_tests/fixtures/files/periodic_build.yaml +0 -5
  87. data/spec/unit_tests/fixtures/files/post_build_script.xml +0 -28
  88. data/spec/unit_tests/fixtures/files/post_build_script.yaml +0 -11
  89. data/spec/unit_tests/fixtures/files/prepare_environment.xml +0 -17
  90. data/spec/unit_tests/fixtures/files/prepare_environment.yaml +0 -7
  91. data/spec/unit_tests/fixtures/files/project.yaml +0 -15
  92. data/spec/unit_tests/fixtures/files/properties_file.xml +0 -27
  93. data/spec/unit_tests/fixtures/files/properties_file.yaml +0 -8
  94. data/spec/unit_tests/fixtures/files/remote_job.xml +0 -18
  95. data/spec/unit_tests/fixtures/files/remote_job.yaml +0 -19
  96. data/spec/unit_tests/fixtures/files/rvm05.xml +0 -26
  97. data/spec/unit_tests/fixtures/files/rvm05.yaml +0 -5
  98. data/spec/unit_tests/fixtures/files/specific_priority.xml +0 -22
  99. data/spec/unit_tests/fixtures/files/specific_priority.yaml +0 -6
  100. data/spec/unit_tests/fixtures/files/throttle.xml +0 -17
  101. data/spec/unit_tests/fixtures/files/throttle.yaml +0 -8
  102. data/spec/unit_tests/fixtures/files/upstream.xml +0 -17
  103. data/spec/unit_tests/fixtures/files/upstream.yaml +0 -7
  104. data/spec/unit_tests/fixtures/pull_request/00.yaml +0 -14
  105. data/spec/unit_tests/fixtures/pull_request/10.yaml +0 -7
  106. data/spec/unit_tests/fixtures/pull_request/11.yaml +0 -4
  107. data/spec/unit_tests/fixtures/pull_request/project.yaml +0 -11
  108. data/spec/unit_tests/fixtures/templates/external_job.yaml +0 -4
  109. data/spec/unit_tests/fixtures/templates/project_with_jobs.yaml +0 -25
  110. data/spec/unit_tests/generator_spec.rb +0 -94
  111. data/spec/unit_tests/module_registry_spec.rb +0 -16
  112. data/spec/unit_tests/resolve_dependencies_spec.rb +0 -266
@@ -1,7 +0,0 @@
1
- ---
2
- - job:
3
- name: prepare_environment_test
4
- prepare_environment :
5
- properties_content: 'test'
6
- keep_build: true
7
- keep_environment: true
@@ -1,15 +0,0 @@
1
- - defaults:
2
- name: global
3
- description: 'Do not edit this job through the web!'
4
- hipchat_room: HipChat Room Name
5
- os_username: admin
6
- os_priv_key: /home/user/key.priv
7
- os_password: some_encrypted_password
8
-
9
- - project:
10
- name: Generate
11
- jobs:
12
- - Job-{{name}}-From-Template:
13
- command: run.sh
14
- - Job-DSL1
15
- - Job-DSL2
@@ -1,27 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project>
3
- <actions/>
4
- <description/>
5
- <keepDependencies>false</keepDependencies>
6
- <properties/>
7
- <scm class="hudson.scm.NullSCM"/>
8
- <canRoam>true</canRoam>
9
- <disabled>false</disabled>
10
- <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
- <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
- <triggers class="vector"/>
13
- <concurrentBuild>false</concurrentBuild>
14
- <builders/>
15
- <publishers/>
16
- <buildWrappers>
17
- <EnvInjectBuildWrapper>
18
- <info>
19
- <propertiesFilePath>foo.prop</propertiesFilePath>
20
- <propertiesContent>
21
- foo=bar
22
- </propertiesContent>
23
- <loadFilesFromMaster>false</loadFilesFromMaster>
24
- </info>
25
- </EnvInjectBuildWrapper>
26
- </buildWrappers>
27
- </project>
@@ -1,8 +0,0 @@
1
- ---
2
- - job:
3
- name: properties_file
4
- wrappers:
5
- - inject_env_var:
6
- file: 'foo.prop'
7
- content: |
8
- foo=bar
@@ -1,18 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project>
3
- <actions/>
4
- <description/>
5
- <keepDependencies>false</keepDependencies>
6
- <properties/>
7
- <scm class="hudson.scm.NullSCM"/>
8
- <canRoam>true</canRoam>
9
- <disabled>false</disabled>
10
- <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
- <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
- <triggers class="vector"/>
13
- <concurrentBuild>false</concurrentBuild>
14
- <builders><org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration plugin="Parameterized-Remote-Trigger"><remoteJenkinsName>Server2</remoteJenkinsName><job>name_of_remote_build</job><pollInterval>10</pollInterval><blockBuildUntilComplete>true</blockBuildUntilComplete><token/><parameters>VAR1 = value_1
15
- VAR2 = value_2</parameters><parameterList><string>VAR1 = value_1</string><string>VAR2 = value_2</string></parameterList><overrideAuth>true</overrideAuth><auth><org.jenkinsci.plugins.ParameterizedRemoteTrigger.Auth><authType>apiToken</authType><username>user_name_here</username><API__TOKEN>RAWR123ROVING</API__TOKEN></org.jenkinsci.plugins.ParameterizedRemoteTrigger.Auth></auth></org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration></builders>
16
- <publishers/>
17
- <buildWrappers/>
18
- </project>
@@ -1,19 +0,0 @@
1
- - job_template:
2
- name: remote-job
3
- job_type: free_style
4
- builders:
5
- - remote_job:
6
- server: 'Server2'
7
- job_name: name_of_remote_build
8
- blocking: true
9
- polling_interval: 10
10
- continue_on_remote_failure: false
11
- parameters:
12
- file: 'foo.prop'
13
- content: |
14
- VAR1 = value_1
15
- VAR2 = value_2
16
- credentials:
17
- type: api_token
18
- username: user_name_here
19
- api_token: RAWR123ROVING
@@ -1,26 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project>
3
- <actions/>
4
- <description/>
5
- <keepDependencies>false</keepDependencies>
6
- <properties/>
7
- <scm class="hudson.scm.NullSCM"/>
8
- <canRoam>true</canRoam>
9
- <disabled>false</disabled>
10
- <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
- <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
- <triggers class="vector"/>
13
- <concurrentBuild>false</concurrentBuild>
14
- <builders/>
15
- <publishers/>
16
- <buildWrappers>
17
- <ruby-proxy-object>
18
- <ruby-object pluginid="rvm" ruby-class="Jenkins::Tasks::BuildWrapperProxy">
19
- <object pluginid="rvm" ruby-class="RvmWrapper">
20
- <impl pluginid="rvm" ruby-class="String">foo@bar</impl>
21
- </object>
22
- <pluginid pluginid="rvm" ruby-class="String">rvm</pluginid>
23
- </ruby-object>
24
- </ruby-proxy-object>
25
- </buildWrappers>
26
- </project>
@@ -1,5 +0,0 @@
1
- ---
2
- - job:
3
- name: rvm05
4
- wrappers:
5
- - rvm05: 'foo@bar'
@@ -1,22 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project>
3
- <actions/>
4
- <description/>
5
- <keepDependencies>false</keepDependencies>
6
- <properties>
7
- <jenkins.advancedqueue.AdvancedQueueSorterJobProperty plugin="PrioritySorter">
8
- <useJobPriority>true</useJobPriority>
9
- <priority>1</priority>
10
- </jenkins.advancedqueue.AdvancedQueueSorterJobProperty>
11
- </properties>
12
- <scm class="hudson.scm.NullSCM"/>
13
- <canRoam>true</canRoam>
14
- <disabled>false</disabled>
15
- <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
16
- <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
17
- <triggers class="vector"/>
18
- <concurrentBuild>false</concurrentBuild>
19
- <builders/>
20
- <publishers/>
21
- <buildWrappers/>
22
- </project>
@@ -1,6 +0,0 @@
1
- ---
2
- - job:
3
- name: specific_priority
4
- priority:
5
- use_priority: true
6
- job_priority: 1
@@ -1,17 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project>
3
- <actions/>
4
- <description/>
5
- <keepDependencies>false</keepDependencies>
6
- <properties><hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents"><maxConcurrentPerNode>10</maxConcurrentPerNode><maxConcurrentTotal>30</maxConcurrentTotal><throttleEnabled>true</throttleEnabled><throttleOption>category</throttleOption><categories><string>test</string></categories></hudson.plugins.throttleconcurrents.ThrottleJobProperty></properties>
7
- <scm class="hudson.scm.NullSCM"/>
8
- <canRoam>true</canRoam>
9
- <disabled>false</disabled>
10
- <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
- <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
- <triggers class="vector"/>
13
- <concurrentBuild>false</concurrentBuild>
14
- <builders/>
15
- <publishers/>
16
- <buildWrappers/>
17
- </project>
@@ -1,8 +0,0 @@
1
- ---
2
- - job:
3
- name: throttle
4
- throttle:
5
- max_per_node: 10
6
- max_total: 30
7
- option: category
8
- category: test
@@ -1,17 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project>
3
- <actions/>
4
- <description/>
5
- <keepDependencies>false</keepDependencies>
6
- <properties/>
7
- <scm class="hudson.scm.NullSCM"/>
8
- <canRoam>true</canRoam>
9
- <disabled>false</disabled>
10
- <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
11
- <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
12
- <triggers class="vector"><jenkins.triggers.ReverseBuildTrigger><spec/><upstreamProjects>UpstreamProject</upstreamProjects><threshold><name>FAILURE</name><ordinal>2</ordinal><color>RED</color><completeBuild>true</completeBuild></threshold></jenkins.triggers.ReverseBuildTrigger></triggers>
13
- <concurrentBuild>false</concurrentBuild>
14
- <builders/>
15
- <publishers/>
16
- <buildWrappers/>
17
- </project>
@@ -1,7 +0,0 @@
1
- ---
2
- - job:
3
- name: upstream
4
- triggers:
5
- - upstream:
6
- projects: UpstreamProject
7
- status: failed
@@ -1,14 +0,0 @@
1
- ---
2
- - job:
3
- name: '{{name}}-00'
4
- job_type: pull_request_generator
5
- git_url: 'https://www.github.com/'
6
- git_repo: 'constantcontact'
7
- git_org: 'jenkins_pipeline_builder'
8
- jobs:
9
- - '{{name}}-10'
10
- - '{{name}}-11'
11
- builders:
12
- - shell_command: |
13
- generate -v || gem install jenkins_pipeline_builder
14
- generate pipeline -c config/{{login_config}} pull_request pipeline/ {{name}}
@@ -1,7 +0,0 @@
1
- ---
2
- - job-template:
3
- name: '{{name}}-10'
4
- description: '{{description}}'
5
- publishers:
6
- - downstream:
7
- project: '{{job@{{name}}-15-Provision}}'
@@ -1,4 +0,0 @@
1
- ---
2
- - job-template:
3
- name: '{{name}}-11'
4
- description: '{{description}}'
@@ -1,11 +0,0 @@
1
- - defaults:
2
- name: global
3
- description: 'Do not edit this job through the web!'
4
- discard_days: '14'
5
-
6
- - project:
7
- name: pull_req_test
8
- jobs:
9
- - '{{name}}-00'
10
- - '{{name}}-10'
11
- - '{{name}}-11'
@@ -1,4 +0,0 @@
1
- - job:
2
- name: foo-test
3
- builders:
4
- - shell: 'make test'
@@ -1,25 +0,0 @@
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
@@ -1,94 +0,0 @@
1
- require 'unit_tests/spec_helper'
2
-
3
- describe 'Test YAML jobs conversion to XML' do
4
- context 'Loading YAML files' do
5
- before do
6
- JenkinsPipelineBuilder.credentials = {
7
- server_ip: '127.0.0.1',
8
- server_port: 8080,
9
- username: 'username',
10
- password: 'password',
11
- log_location: '/dev/null'
12
- }
13
- @generator = JenkinsPipelineBuilder.generator
14
- @generator.debug = true
15
- @generator.no_files = true
16
- end
17
-
18
- after :each do
19
- JenkinsPipelineBuilder.generator.instance_variable_set(:@job_collection, {})
20
- end
21
-
22
- def compare_jobs(job, path)
23
- success, xml = @generator.compile_job_to_xml(job)
24
- expect(success).to be_true
25
- doc1 = Nokogiri::XML(xml)
26
-
27
- sample_job_xml = File.read(path + '.xml')
28
-
29
- doc2 = Nokogiri::XML(sample_job_xml)
30
-
31
- doc1.should be_equivalent_to(doc2)
32
- end
33
-
34
- files = %w(
35
- Job-Multi-Project
36
- Job-Build-Maven
37
- Job-Build-Flow
38
- Job-Gem-Build
39
- post_build_script
40
- properties_file
41
- downstream
42
- upstream
43
- rvm05
44
- prepare_environment
45
- remote_job
46
- throttle
47
- specific_priority
48
- periodic_build
49
- discard_old
50
- concurrent_build
51
- choice_parameter
52
- downstream_blocking
53
- groovy_postbuild
54
- archive_artifact
55
- copy_artifact
56
- git_include_exclude
57
- )
58
-
59
- files.each do |file|
60
- it "should create expected XML from YAML '#{file}'" do
61
- path = File.expand_path('../fixtures/files/' + file, __FILE__)
62
-
63
- @generator.load_collection_from_path path + '.yaml'
64
- job_name = @generator.job_collection.keys.first
65
- success, job = @generator.resolve_job_by_name(job_name)
66
-
67
- expect(success).to be_true
68
- compare_jobs job, path
69
- end
70
- end
71
-
72
- it 'should create expected XML from YAML collection' do
73
- path = File.expand_path('../fixtures/files/', __FILE__)
74
-
75
- @generator.load_collection_from_path(path)
76
-
77
- project_name = @generator.projects.first[:name]
78
-
79
- success, project = @generator.resolve_project(@generator.get_item(project_name))
80
-
81
- expect(success).to be_true
82
-
83
- project[:value][:jobs].should_not be_nil
84
-
85
- project[:value][:jobs].each do |i|
86
- job = i[:result]
87
- job.should_not be_nil
88
-
89
- file_name = File.join(path, job[:name])
90
- compare_jobs job, file_name
91
- end
92
- end
93
- end
94
- end
@@ -1,16 +0,0 @@
1
- require File.expand_path('../spec_helper', __FILE__)
2
-
3
- describe 'ModuleRegistry' do
4
-
5
- it 'needs more tests'
6
- it 'should return item by a specified path' do
7
-
8
- registry = JenkinsPipelineBuilder::ModuleRegistry.new
9
- registry.register_job_attribute(:foo, 'jenkins name', 'desc') do
10
- true
11
- end
12
-
13
- puts registry.registry.inspect
14
- registry.get('job/foo').call.should be_true
15
- end
16
- end
@@ -1,266 +0,0 @@
1
- require File.expand_path('../spec_helper', __FILE__)
2
-
3
- describe 'Templates resolver' do
4
- before(:each) do
5
- JenkinsPipelineBuilder.credentials = {
6
- server_ip: '127.0.0.1',
7
- server_port: 8080,
8
- username: 'username',
9
- password: 'password',
10
- log_location: '/dev/null'
11
- }
12
- @generator = JenkinsPipelineBuilder.generator
13
- @generator.debug = true
14
- @generator.no_files = true
15
- end
16
-
17
- after :each do
18
- JenkinsPipelineBuilder.generator.instance_variable_set(:@job_collection, {})
19
- end
20
-
21
- describe 'resolving settings bags' do
22
- it 'gives a bag when all the variables can be resolved' do
23
- str = %(
24
- - project:
25
- name: project-name
26
- db: my_own_db_{{else}}
27
- )
28
- project = YAML.load(str)
29
- @generator.load_job_collection project
30
-
31
- # @generator.resolve_item('project-name')
32
- settings = JenkinsPipelineBuilder::Compiler.get_settings_bag(@generator.get_item('project-name'), db: 'blah', else: 'bum')
33
- settings.should == { name: 'project-name', db: 'my_own_db_bum', else: 'bum' }
34
- end
35
-
36
- it 'returns nil when all the variables cant be resolved' do
37
- str = %(
38
- - project:
39
- name: project-name
40
- db: my_own_db_{{else}}_{{blah}}
41
- )
42
- project = YAML.load(str)
43
- @generator.load_job_collection project
44
-
45
- # @generator.resolve_item('project-name')
46
- settings = JenkinsPipelineBuilder::Compiler.get_settings_bag(@generator.get_item('project-name'), db: 'blah', else: 'bum')
47
- settings.should be_nil
48
- end
49
- end
50
-
51
- it 'starts with the defaults section for settings bag' do
52
- str = %(
53
- - defaults:
54
- name: global
55
- description: 'Do not edit this job through the web!'
56
- - job-template:
57
- name: 'foo-bar'
58
- description: '{{description}}'
59
- builders:
60
- - shell: perftest
61
- - project:
62
- name: project-name
63
- db: my_own_db
64
- jobs:
65
- - 'foo-bar'
66
- )
67
- project = YAML.load(str)
68
- @generator.load_job_collection project
69
-
70
- success, project = @generator.resolve_project(@generator.get_item('project-name'))
71
-
72
- expect(success).to be_true
73
- expect(project).to eq(
74
- name: 'project-name',
75
- type: :project,
76
- value: {
77
- name: 'project-name',
78
- db: 'my_own_db',
79
- jobs: [{
80
- :"foo-bar" => {},
81
- result: {
82
- name: 'foo-bar',
83
- description: 'Do not edit this job through the web!',
84
- builders: [{
85
- shell: 'perftest' }]
86
- }
87
- }]
88
- },
89
- settings: {
90
- name: 'project-name',
91
- description: 'Do not edit this job through the web!',
92
- db: 'my_own_db'
93
- }
94
- )
95
- end
96
-
97
- it 'should build project collection from jobs templates' do
98
- str = %(
99
- - job-template:
100
- name: '{{name}}-unit-tests'
101
- builders:
102
- - shell: unittest
103
- publishers:
104
- - email:
105
- recipients: '{{mail-to}}'
106
-
107
- - job-template:
108
- name: '{{name}}-perf-tests'
109
- builders:
110
- - shell: perftest
111
- publishers:
112
- - email:
113
- recipients: '{{mail-to}}'
114
-
115
- - project:
116
- name: project-name
117
- db: my_own_db
118
- jobs:
119
- - '{{name}}-unit-tests':
120
- mail-to: developer@nowhere.net
121
- - '{{name}}-perf-tests':
122
- mail-to: projmanager@nowhere.net
123
- )
124
-
125
- project = YAML.load(str)
126
- @generator.load_job_collection project
127
-
128
- success, project = @generator.resolve_project(@generator.get_item('project-name'))
129
- expect(success).to be_true
130
- expect(project).to eq(
131
- name: 'project-name',
132
- type: :project,
133
- value: {
134
- name: 'project-name',
135
- db: 'my_own_db',
136
- jobs: [{
137
- :"{{name}}-unit-tests" => { :"mail-to" => 'developer@nowhere.net' },
138
- result: {
139
- name: 'project-name-unit-tests',
140
- builders: [{ shell: 'unittest' }],
141
- publishers: [{ email: { recipients: 'developer@nowhere.net' } }]
142
- }
143
- }, {
144
- :"{{name}}-perf-tests" => { :"mail-to" => 'projmanager@nowhere.net' },
145
- result: {
146
- name: 'project-name-perf-tests',
147
- builders: [{ shell: 'perftest' }],
148
- publishers: [{ email: { recipients: 'projmanager@nowhere.net' } }]
149
- }
150
- }]
151
- },
152
- settings: { name: 'project-name', db: 'my_own_db' }
153
- )
154
- end
155
-
156
- it 'should build project collection from jobs and jobs templates' do
157
- str = %(
158
- - job-template:
159
- name: '{{name}}-unit-tests'
160
- builders:
161
- - shell: unittest
162
- publishers:
163
- - email:
164
- recipients: '{{mail-to}}'
165
-
166
- - job:
167
- name: 'foo-bar'
168
- builders:
169
- - shell: perftest
170
-
171
- - project:
172
- name: project-name
173
- db: my_own_db
174
- jobs:
175
- - 'foo-bar'
176
- - '{{name}}-unit-tests':
177
- mail-to: projmanager@nowhere.net
178
- )
179
-
180
- project = YAML.load(str)
181
- @generator.load_job_collection project
182
-
183
- success, project = @generator.resolve_project(@generator.get_item('project-name'))
184
- expect(success).to be_true
185
- expect(project).to eq(
186
- name: 'project-name',
187
- type: :project,
188
- value: {
189
- name: 'project-name',
190
- db: 'my_own_db',
191
- jobs: [{
192
- :"foo-bar" => {},
193
- result: {
194
- name: 'foo-bar',
195
- builders: [{ shell: 'perftest' }]
196
- }
197
- }, {
198
- :"{{name}}-unit-tests" => { :"mail-to" => 'projmanager@nowhere.net' },
199
- result: {
200
- name: 'project-name-unit-tests',
201
- builders: [{ shell: 'unittest' }],
202
- publishers: [{ email: { recipients: 'projmanager@nowhere.net' } }]
203
- }
204
- }]
205
- },
206
- settings: { name: 'project-name', db: 'my_own_db' }
207
- )
208
- end
209
-
210
- describe 'compilation of templates' do
211
- it 'compiles String' do
212
- success, string = JenkinsPipelineBuilder::Compiler.compile('blah', item1: 'data1')
213
- expect(success).to be_true
214
- expect(string).to eq 'blah'
215
- end
216
-
217
- it 'compiles simple Hash' do
218
- success, hash = JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: 'item1-data' }, item1: 'data1')
219
- expect(success).to be_true
220
- expect(hash).to eq(name: 'item-data1', value: 'item1-data')
221
- end
222
-
223
- it 'compiles nested Hash' do
224
- success, hash = JenkinsPipelineBuilder::Compiler.compile({ name: 'item-{{item1}}', value: { house: 'house-{{item1}}' } }, item1: 'data1')
225
- expect(success).to be_true
226
- expect(hash).to eq(name: 'item-data1', value: { house: 'house-data1' })
227
- end
228
-
229
- it 'compiles complex Hash' do
230
- template = { name: '{{name}}-unit-tests',
231
- builders: [{ shell: 'unittest' }],
232
- publishers: [{ email: { recipients: '{{mail-to}}' } }] }
233
- settings = { name: 'project-name', db: 'my_own_db', :'mail-to' => 'developer@nowhere.net' }
234
-
235
- success, hash = JenkinsPipelineBuilder::Compiler.compile(template, settings)
236
- expect(success).to be_true
237
- expect(hash).to eq(
238
- name: 'project-name-unit-tests',
239
- builders: [{ shell: 'unittest' }],
240
- publishers: [{ email: { recipients: 'developer@nowhere.net' } }])
241
- end
242
- end
243
-
244
- it 'shoult resolve job template into a job' do
245
- file = 'project_with_jobs'
246
- path = File.expand_path('../fixtures/templates/' + file, __FILE__)
247
- project = YAML.load_file(path + '.yaml')
248
-
249
- @generator.load_job_collection project
250
-
251
- success, job = @generator.resolve_job_by_name('{{name}}-unit-tests', name: 'project-name', db: 'my_own_db', :'mail-to' => 'developer@nowhere.net')
252
- expect(success).to be_true
253
- expect(job).to eq(
254
- name: 'project-name-unit-tests',
255
- builders: [{ shell: 'unittest' }],
256
- publishers: [{ email: { recipients: 'developer@nowhere.net' } }])
257
- end
258
-
259
- it 'should load from folder' do
260
- path = File.expand_path('../fixtures/templates/', __FILE__)
261
- @generator.load_collection_from_path(path)
262
-
263
- @generator.job_collection.count.should eq 4
264
- @generator.projects.count.should eq 1
265
- end
266
- end