jenfig 0.1.0.pre → 0.1.1.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +22 -0
- data/bin/jenfig +15 -0
- data/jenfig.gemspec +1 -2
- data/lib/jenfig.rb +5 -1
- data/lib/jenfig/api.rb +9 -0
- data/lib/jenfig/api/crumb.rb +16 -0
- data/lib/jenfig/api/job.rb +42 -0
- data/lib/jenfig/cli.rb +5 -0
- data/lib/jenfig/cli/crumb.rb +4 -0
- data/lib/jenfig/cli/upload.rb +48 -0
- data/lib/jenfig/config.rb +7 -0
- data/lib/jenfig/config/config.rb +26 -0
- data/lib/jenfig/config/job.rb +10 -0
- data/lib/jenfig/version.rb +3 -1
- metadata +16 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2904cd8f21213cc70a522af31461cadb559fa770f27d2f95057806be87237ce0
|
4
|
+
data.tar.gz: df3d1ee50f19251064ce38468670fbbebd1180e28a2f9b16283cec28d95e4e46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2908dc0581f76aacdc2933d29cb2c53e878a3f6fc70b1f473bb6da76cf801931fdca0a0c8cc14518069411b0c0e4d27980668dae5198a2a38fd3120d1774f7f7
|
7
|
+
data.tar.gz: 9f903086a2bd90722752fd90294c611babff123d05908e5b73eab1c793707c1afd5d6f1e5beeb31fab77bdb000809b17e6a1dc422f50c49cd2ba4d88b760393b
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
jenfig (0.1.1.pre)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
minitest (5.11.3)
|
10
|
+
rake (10.5.0)
|
11
|
+
|
12
|
+
PLATFORMS
|
13
|
+
ruby
|
14
|
+
|
15
|
+
DEPENDENCIES
|
16
|
+
bundler (~> 2.0)
|
17
|
+
jenfig!
|
18
|
+
minitest (~> 5.0)
|
19
|
+
rake (~> 10.0)
|
20
|
+
|
21
|
+
BUNDLED WITH
|
22
|
+
2.0.2
|
data/bin/jenfig
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'jenfig'
|
5
|
+
require 'jenfig/cli'
|
6
|
+
case ARGV[0]
|
7
|
+
when 'crumb'
|
8
|
+
Jenfig::CLI::Crumb.init(ARGV).exec
|
9
|
+
when 'download'
|
10
|
+
when 'upload'
|
11
|
+
Jenfig::CLI::Upload.new.exec
|
12
|
+
else
|
13
|
+
puts "Usage: jenfig [command] [options]
|
14
|
+
commands: crumb, push, download, init"
|
15
|
+
end
|
data/jenfig.gemspec
CHANGED
@@ -24,8 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
25
25
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
26
|
end
|
27
|
-
spec.
|
28
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
|
+
spec.executables << 'jenfig'
|
29
28
|
spec.require_paths = ["lib"]
|
30
29
|
|
31
30
|
spec.add_development_dependency "bundler", "~> 2.0"
|
data/lib/jenfig.rb
CHANGED
data/lib/jenfig/api.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
class Jenfig::API::Crumb
|
8
|
+
def self.load(options)
|
9
|
+
uri = URI.parse(options[:url] + '/crumbIssuer/api/json')
|
10
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
11
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
12
|
+
request.basic_auth(options[:user], options[:password])
|
13
|
+
response = http.request(request)
|
14
|
+
JSON.parse(response.body)['crumb']
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jenfig
|
4
|
+
module API
|
5
|
+
class Job
|
6
|
+
def self.exists?(job, options)
|
7
|
+
uri = URI.parse(options[:url] + "/job/#{job.name}/api/json")
|
8
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
9
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
10
|
+
request.basic_auth(options[:user], options[:password])
|
11
|
+
request['Jenkins-Crumb'] = options[:crumb]
|
12
|
+
response = http.request(request)
|
13
|
+
response.is_a?(Net::HTTPOK)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.create_or_update(job, options)
|
17
|
+
if exists?(job, options)
|
18
|
+
update(job, options)
|
19
|
+
else
|
20
|
+
create(job, options)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.create(job, options)
|
25
|
+
uri = URI.parse(options[:url] + "/createItem?name=#{job.name}")
|
26
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
27
|
+
request = Net::HTTP::Post.new(uri.request_uri)
|
28
|
+
request.basic_auth(options[:user], options[:password])
|
29
|
+
request['Jenkins-Crumb'] = options[:crumb]
|
30
|
+
request['Content-Type'] = 'text/xml'
|
31
|
+
request.body = File.open(File.join(options[:directory], job.relative_path)).read
|
32
|
+
puts request.body
|
33
|
+
response = http.request(request)
|
34
|
+
puts response
|
35
|
+
puts response.body
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.update(job, options)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/jenfig/cli.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'jenfig/api'
|
5
|
+
require 'io/console'
|
6
|
+
|
7
|
+
class Jenfig::CLI::Upload
|
8
|
+
def initialize
|
9
|
+
@options = {}
|
10
|
+
|
11
|
+
option_parser = OptionParser.new do |opts|
|
12
|
+
opts.banner = 'Usage: example.rb [options]'
|
13
|
+
|
14
|
+
opts.on('-uUSER', '--user=USER', 'Jenkins Username') do |user|
|
15
|
+
@options[:user] = user
|
16
|
+
end
|
17
|
+
opts.on('-pPASSWORD', '--password=PASSWORD', 'Jenkins Username or API Key') do |password|
|
18
|
+
@options[:password] = password
|
19
|
+
end
|
20
|
+
opts.on('-jURL', '--url=URL', 'Jenkins URL including http/https and Port e.g. http://localhost:8080') do |url|
|
21
|
+
@options[:url] = url
|
22
|
+
end
|
23
|
+
opts.on('-fCONFIGURATION', '--file=fCONFIGURATION', 'jenfig Configuration') do |file|
|
24
|
+
@options[:file] = file
|
25
|
+
end
|
26
|
+
opts.on('-dDIRECTORY', '--directory=DIRECTORY', 'jenfig root directory') do |directory|
|
27
|
+
@options[:directory] = directory
|
28
|
+
end
|
29
|
+
end
|
30
|
+
option_parser.parse!
|
31
|
+
@options[:directory] = File.join(File.dirname(File.realpath(@options[:file]))) unless @options[:directory]
|
32
|
+
if @options[:password].nil?
|
33
|
+
unless ENV['JENKINS_API_KEY'].nil?
|
34
|
+
@options[:passworde] = ENV['JENKINS_API_KEY']
|
35
|
+
else
|
36
|
+
@options[:password] = IO::console.getpass "Enter Password or API Key: "
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def exec
|
42
|
+
config = Jenfig::Config::Config.load(@options[:file])
|
43
|
+
@options[:crumb] = Jenfig::API::Crumb.load(user: @options[:user], password: @options[:password], url: @options[:url])
|
44
|
+
puts @options[:crumb]
|
45
|
+
puts config.to_yaml
|
46
|
+
config.jobs.each { |job| Jenfig::API::Job.create_or_update(job, @options) }
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require 'jenfig/config/job'
|
5
|
+
|
6
|
+
|
7
|
+
module Jenfig
|
8
|
+
module Config
|
9
|
+
class Config
|
10
|
+
attr_reader :jobs
|
11
|
+
|
12
|
+
def self.load(file_path)
|
13
|
+
yaml = YAML.load_file(file_path)
|
14
|
+
puts yaml['jobs']
|
15
|
+
puts yaml['jobs'].first['name']
|
16
|
+
jobs = []
|
17
|
+
yaml['jobs'].each { |job| jobs << Jenfig::Config::Job.new(job['name'], job['relative_path']) }
|
18
|
+
new(jobs)
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(jobs)
|
22
|
+
@jobs = jobs
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/jenfig/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jenfig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Erler
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -55,20 +55,32 @@ dependencies:
|
|
55
55
|
description: Simple CLI Gem for Jenkins provisioning
|
56
56
|
email:
|
57
57
|
- daviderler1995@gmail.com
|
58
|
-
executables:
|
58
|
+
executables:
|
59
|
+
- jenfig
|
59
60
|
extensions: []
|
60
61
|
extra_rdoc_files: []
|
61
62
|
files:
|
62
63
|
- ".gitignore"
|
63
64
|
- ".travis.yml"
|
64
65
|
- Gemfile
|
66
|
+
- Gemfile.lock
|
65
67
|
- LICENSE.txt
|
66
68
|
- README.md
|
67
69
|
- Rakefile
|
68
70
|
- bin/console
|
71
|
+
- bin/jenfig
|
69
72
|
- bin/setup
|
70
73
|
- jenfig.gemspec
|
71
74
|
- lib/jenfig.rb
|
75
|
+
- lib/jenfig/api.rb
|
76
|
+
- lib/jenfig/api/crumb.rb
|
77
|
+
- lib/jenfig/api/job.rb
|
78
|
+
- lib/jenfig/cli.rb
|
79
|
+
- lib/jenfig/cli/crumb.rb
|
80
|
+
- lib/jenfig/cli/upload.rb
|
81
|
+
- lib/jenfig/config.rb
|
82
|
+
- lib/jenfig/config/config.rb
|
83
|
+
- lib/jenfig/config/job.rb
|
72
84
|
- lib/jenfig/version.rb
|
73
85
|
homepage: https://github.com/Dave1995/jenfig
|
74
86
|
licenses:
|