Class: JenkinsPipelineBuilder::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/jenkins_pipeline_builder/generator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGenerator

Returns a new instance of Generator.



29
30
31
32
33
34
# File 'lib/jenkins_pipeline_builder/generator.rb', line 29

def initialize
  @job_templates = {}
  @extensions = {}
  @module_registry = ModuleRegistry.new
  @job_collection = JobCollection.new
end

Instance Attribute Details

#job_collectionObject

Returns the value of attribute job_collection.



27
28
29
# File 'lib/jenkins_pipeline_builder/generator.rb', line 27

def job_collection
  @job_collection
end

#job_templatesObject

Returns the value of attribute job_templates.



27
28
29
# File 'lib/jenkins_pipeline_builder/generator.rb', line 27

def job_templates
  @job_templates
end

#module_registryObject

Returns the value of attribute module_registry.



27
28
29
# File 'lib/jenkins_pipeline_builder/generator.rb', line 27

def module_registry
  @module_registry
end

#no_filesObject

Returns the value of attribute no_files.



27
28
29
# File 'lib/jenkins_pipeline_builder/generator.rb', line 27

def no_files
  @no_files
end

Instance Method Details

#bootstrap(path, project_name = nil) ⇒ Object



53
54
55
56
57
# File 'lib/jenkins_pipeline_builder/generator.rb', line 53

def bootstrap(path, project_name = nil)
  logger.info "Bootstrapping pipeline from path #{path}"
  load_job_collection path unless job_collection.loaded?
  publish(project_name || job_collection.projects.first[:name])
end

#clientObject



40
41
42
# File 'lib/jenkins_pipeline_builder/generator.rb', line 40

def client
  JenkinsPipelineBuilder.client
end

#dump(job_name) ⇒ Object



84
85
86
87
88
89
# File 'lib/jenkins_pipeline_builder/generator.rb', line 84

def dump(job_name)
  logger.info "Debug #{JenkinsPipelineBuilder.debug}"
  logger.info "Dumping #{job_name} into #{job_name}.xml"
  xml = client.job.get_config(job_name)
  File.open(job_name + '.xml', 'w') { |f| f.write xml }
end

#file(path, project_name) ⇒ Object

rubocop:enable Metrics/AbcSize



78
79
80
81
82
# File 'lib/jenkins_pipeline_builder/generator.rb', line 78

def file(path, project_name)
  logger.info "Generating files from path #{path}"
  JenkinsPipelineBuilder.file_mode!
  bootstrap(path, project_name)
end

#loggerObject



36
37
38
# File 'lib/jenkins_pipeline_builder/generator.rb', line 36

def logger
  JenkinsPipelineBuilder.logger
end

#projects(path) ⇒ Object



48
49
50
51
# File 'lib/jenkins_pipeline_builder/generator.rb', line 48

def projects(path)
  load_job_collection path unless job_collection.loaded?
  job_collection.projects.map { |p| p[:name] }
end

#pull_request(path, project_name, base_branch_only = false) ⇒ Object

rubocop:disable Metrics/AbcSize



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/jenkins_pipeline_builder/generator.rb', line 60

def pull_request(path, project_name, base_branch_only = false)
  logger.info "Pull Request Generator Running from path #{path}"
  load_job_collection path unless job_collection.loaded?
  defaults = job_collection.defaults[:value]
  pr_generator = PullRequestGenerator.new defaults
  pr_generator.delete_closed_prs
  errors = []
  pr_generator.open_prs.each do |pr|
    next if base_branch_only && defaults[:git_branch] != pr[:base]

    pr_generator.convert! job_collection, pr[:number]
    error = publish(project_name)
    errors << error unless error.empty?
  end
  errors.empty?
end

#resolve_job_by_name(name, settings = {}) ⇒ Object Also known as: resolve_section_by_name

Works for jobs, views, and promotions



106
107
108
109
110
111
112
113
114
115
# File 'lib/jenkins_pipeline_builder/generator.rb', line 106

def resolve_job_by_name(name, settings = {})
  job = job_collection.get_item(name)
  raise "Failed to locate job by name '#{name}'" if job.nil?

  job_value = job[:value]
  logger.debug "Compiling job #{name}"
  compiler = JenkinsPipelineBuilder::Compiler.new self
  success, payload = compiler.compile_job(job_value, settings)
  [success, payload]
end

#resolve_project(project) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/jenkins_pipeline_builder/generator.rb', line 91

def resolve_project(project)
  defaults = job_collection.defaults
  settings = defaults.nil? ? {} : defaults[:value] || {}
  compiler = JenkinsPipelineBuilder::Compiler.new self
  project[:settings] = compiler.get_settings_bag(project, settings)

  errors = process_project project

  print_project_errors errors
  return false, 'Encountered errors exiting' unless errors.empty?

  [true, project]
end

#viewObject



44
45
46
# File 'lib/jenkins_pipeline_builder/generator.rb', line 44

def view
  JenkinsPipelineBuilder::View.new(self)
end