Sha256: c6a111205aae931f953e2f3594bef5a02d855f7730539a3b027cb24b9e06c23d

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

class JenkinsApi
  include HTTParty

  def initialize(options = {})
    if options[:port]
      self.class.base_uri "#{options[:host]}:#{options[:port]}"
    else
      self.class.base_uri  options[:host]
    end

    if(options[:username] && options[:password])
      self.class.basic_auth options[:username] , options[:password]
    end
  end

  def get_jobs(options = {})
    response = self.class.get("/api/json/", options)
    jobs = response["jobs"]

    jobs.map { |job| job["name"] }
  end

  def create_job(job, options = {})
    repo, branch_name = job.split('.', 2)
    job_config = create_job_configuration(repo, branch_name)
    options.merge!(
      :body => job_config,
      :format => :xml, :headers => { 'content-type' => 'application/xml' })

    self.class.post("/createItem/api/xml?name=#{CGI.escape(job)}", options)
  end

  def create_job_configuration(repo, branch)
    draft = get_job_configuration("#{repo}.master")
    doc = REXML::Document.new(draft)
    REXML::XPath.first(doc, '//branches//hudson.plugins.git.BranchSpec//name').text = branch

    doc.to_s
  end

  def get_job_configuration(job, options = {})
    response = self.class.get("/job/#{job}/config.xml", options)

    response.body
  end

  def remove_job(job_name, options={})
    self.class.post("/job/#{CGI.escape(job_name)}/doDelete")
  end

  def build_job(job_name, options={})
    self.class.get("/job/#{CGI.escape(job_name)}/build")
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kraken-build-0.0.3 lib/kraken-build/jenkins-api.rb