class JenkinsPipelineBuilder::Promotion

Public Class Methods

new(generator) click to toggle source
# File lib/jenkins_pipeline_builder/promotion.rb, line 25
def initialize(generator)
  @generator = generator
  @client = generator.client
  @logger = @client.logger
end

Public Instance Methods

create(params, job_name) click to toggle source
# File lib/jenkins_pipeline_builder/promotion.rb, line 31
def create(params, job_name)
  success, payload = prom_to_xml(params)
  return success, payload unless success

  xml = payload
  return local_output(xml) if JenkinsPipelineBuilder.debug || JenkinsPipelineBuilder.file_mode

  @client.get_config(get_process_path(job_name, params[:name]))
  @client.post_config(set_process_path(job_name, params[:name]), xml)
rescue JenkinsApi::Exceptions::NotFound
  @client.post_config(init_process_path(job_name, params[:name]), xml)
end
local_output(xml) click to toggle source
# File lib/jenkins_pipeline_builder/promotion.rb, line 56
def local_output(xml)
  JenkinsPipelineBuilder.logger.info 'Will create promotion'
  JenkinsPipelineBuilder.logger.info xml.to_s if @debug
  xml.to_s if @debug
  FileUtils.mkdir_p(out_dir) unless File.exist?(out_dir)
  File.open("#{out_dir}/promotion_debug.xml", 'w') { |f| f.write xml }
  xml
end
out_dir() click to toggle source
# File lib/jenkins_pipeline_builder/promotion.rb, line 65
def out_dir
  'out/xml'
end
prom_to_xml(params) click to toggle source
# File lib/jenkins_pipeline_builder/promotion.rb, line 44
def prom_to_xml(params)
  builder = Nokogiri::XML::Builder.new do |xml|
    xml.send('hudson.plugins.promoted__builds.PromotionProcess', 'plugin' => 'promoted-builds@2.27') do
      xml.buildSteps
      xml.conditions
    end
  end
  @n_xml = builder.doc
  JenkinsPipelineBuilder.registry.traverse_registry_path('job', params, @n_xml)
  [true, @n_xml.to_xml]
end

Private Instance Methods

get_process_path(job_name, process_name) click to toggle source
# File lib/jenkins_pipeline_builder/promotion.rb, line 79
def get_process_path(job_name, process_name)
  "/job/#{URI.encode job_name}/promotion/process/#{URI.encode process_name}"
end
init_process_path(job_name, process_name) click to toggle source
# File lib/jenkins_pipeline_builder/promotion.rb, line 71
def init_process_path(job_name, process_name)
  "/job/#{URI.encode job_name}/promotion/createProcess?name=#{URI.encode process_name}"
end
set_process_path(job_name, process_name) click to toggle source
# File lib/jenkins_pipeline_builder/promotion.rb, line 75
def set_process_path(job_name, process_name)
  "/job/#{URI.encode job_name}/promotion/process/#{URI.encode process_name}/config.xml"
end