jenkins_shell 0.0.6 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/jsh +33 -10
- data/lib/jenkins_shell.rb +56 -18
- data/lib/jenkins_shell/os.rb +9 -0
- data/lib/jenkins_shell/wish/cd_wish.rb +12 -1
- data/lib/jenkins_shell/wish/cmd_wish.rb +7 -1
- data/lib/jenkins_shell/wish/ls_wish.rb +9 -2
- data/lib/jenkins_shell/wish/pwd_wish.rb +7 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc19a7e7ac0de4a5dac9e02f534850b0229fdf1e064983d666f25c9b50d6c263
|
4
|
+
data.tar.gz: ef12b53b7d2a6bc2fbecffd3fc3a9d394458ebe2861c9f30d775c8be3f14f8c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1a25c31edc94c4569e53853951dc2b2c7d4bcb647ef1e20965cf727b7e7a182202e40c0b0c11b9d31ebfdb474654afdef2703b56e957b6a5515bf9f3ae2fb58
|
7
|
+
data.tar.gz: e8e141572b92e44d76c73474e44829f25518f15f7bf32571c543db519e1e7acb2ecd2649fb17479b301de6d8c1bdb22c196217dd83905f072408bd0ab54d410c
|
data/bin/jsh
CHANGED
@@ -26,12 +26,17 @@ end
|
|
26
26
|
def parse(args)
|
27
27
|
options = Hash.new
|
28
28
|
options["password"] = nil
|
29
|
+
options["path"] = ""
|
29
30
|
options["port"] = "8080"
|
31
|
+
options["os"] = JenkinsShell::OS.WINDOWS
|
30
32
|
options["ssl"] = false
|
31
33
|
options["username"] = nil
|
32
34
|
options["verbose"] = false
|
33
35
|
|
34
|
-
info =
|
36
|
+
info = [
|
37
|
+
"Simulate a Linux/Windows prompt using Jenkins script",
|
38
|
+
"functionality"
|
39
|
+
].join(" ")
|
35
40
|
|
36
41
|
parser = OptionParser.new do |opts|
|
37
42
|
opts.summary_width = 26
|
@@ -51,17 +56,26 @@ def parse(args)
|
|
51
56
|
exit JShExit::GOOD
|
52
57
|
end
|
53
58
|
|
59
|
+
opts.on("-l", "--linux", "Remote OS is Linux") do
|
60
|
+
options["os"] = JenkinsShell::OS.LINUX
|
61
|
+
end
|
62
|
+
|
54
63
|
opts.on("--nocolor", "Disable colorized output") do
|
55
64
|
Hilighter.disable
|
56
65
|
end
|
57
66
|
|
58
67
|
opts.on(
|
59
68
|
"--password=PASSWORD",
|
60
|
-
"Use specified password (will prompt
|
69
|
+
"Use specified password (will prompt",
|
70
|
+
"if not provided)"
|
61
71
|
) do |password|
|
62
72
|
options["password"] = password
|
63
73
|
end
|
64
74
|
|
75
|
+
opts.on("--path=PATH", "Path from root of host") do |path|
|
76
|
+
options["path"] = path.gsub(/^\//, "")
|
77
|
+
end
|
78
|
+
|
65
79
|
opts.on(
|
66
80
|
"-p",
|
67
81
|
"--port=PORT",
|
@@ -85,6 +99,14 @@ def parse(args)
|
|
85
99
|
) do
|
86
100
|
options["verbose"] = true
|
87
101
|
end
|
102
|
+
|
103
|
+
opts.on(
|
104
|
+
"-w",
|
105
|
+
"--windows",
|
106
|
+
"Remote OS is Windows (default)"
|
107
|
+
) do
|
108
|
+
options["os"] = JenkinsShell::OS.WINDOWS
|
109
|
+
end
|
88
110
|
end
|
89
111
|
|
90
112
|
begin
|
@@ -125,20 +147,21 @@ options = parse(ARGV)
|
|
125
147
|
begin
|
126
148
|
passwd = options["password"]
|
127
149
|
passwd = get_password if (options["username"] && passwd.nil?)
|
128
|
-
|
129
|
-
|
130
|
-
options["port"],
|
131
|
-
options["ssl"],
|
132
|
-
options["username"],
|
133
|
-
passwd
|
134
|
-
)
|
150
|
+
options["password"] = passwd
|
151
|
+
jsh = JenkinsShell.new(options)
|
135
152
|
|
136
153
|
djinni = Djinni.new
|
137
154
|
djinni.fallback = "cmd"
|
138
155
|
djinni.load_wishes(
|
139
156
|
"#{File.dirname(__FILE__)}/../lib/jenkins_shell/wish"
|
140
157
|
)
|
141
|
-
|
158
|
+
case options["os"]
|
159
|
+
when JenkinsShell::OS.LINUX
|
160
|
+
prompt = "#{jsh.pwd}$ ".light_white
|
161
|
+
when JenkinsShell::OS.WINDOWS
|
162
|
+
prompt = "#{jsh.pwd}> ".light_white
|
163
|
+
end
|
164
|
+
djinni.prompt({"jsh" => jsh, "os" => options["os"]}, prompt)
|
142
165
|
rescue SystemExit
|
143
166
|
# Quite from djinni
|
144
167
|
# Exit gracefully
|
data/lib/jenkins_shell.rb
CHANGED
@@ -31,8 +31,21 @@ class JenkinsShell
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# Create Groovy script
|
34
|
-
|
35
|
-
|
34
|
+
gs = [
|
35
|
+
"println(\"",
|
36
|
+
"#{
|
37
|
+
case @os
|
38
|
+
when JenkinsShell::OS.LINUX
|
39
|
+
# FIXME
|
40
|
+
# "cd #{dir} && #{cmd}"
|
41
|
+
cmd
|
42
|
+
when JenkinsShell::OS.WINDOWS
|
43
|
+
"cmd /c cd #{dir.gsub(/\\/, "\\\\\\")} && #{cmd}"
|
44
|
+
end
|
45
|
+
}",
|
46
|
+
"\".execute().text",
|
47
|
+
")"
|
48
|
+
].join
|
36
49
|
|
37
50
|
# Make POST request and return command output
|
38
51
|
xml = post("/script", "script=#{encode(gs)}")[1]
|
@@ -54,7 +67,7 @@ class JenkinsShell
|
|
54
67
|
http.use_ssl = @ssl
|
55
68
|
|
56
69
|
# Create request
|
57
|
-
req = Net::HTTP::Get.new(path)
|
70
|
+
req = Net::HTTP::Get.new("#{@path}#{path}")
|
58
71
|
req["Cookie"] = @cookie if (@cookie)
|
59
72
|
|
60
73
|
# Send request and get response
|
@@ -79,21 +92,40 @@ class JenkinsShell
|
|
79
92
|
end
|
80
93
|
private :get
|
81
94
|
|
82
|
-
def initialize(
|
83
|
-
host,
|
84
|
-
port = 8080,
|
85
|
-
ssl = false,
|
86
|
-
username = nil,
|
87
|
-
password = nil
|
88
|
-
)
|
95
|
+
def initialize(params)
|
89
96
|
@cookie = nil
|
90
97
|
@crumb = nil
|
91
98
|
@int_cwd = "."
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
99
|
+
|
100
|
+
creds = "(([^:]+)(:(.+))?@)?"
|
101
|
+
host = "([^:/]+)"
|
102
|
+
path = "(/(.+))?"
|
103
|
+
port = "(:([0-9]+))?"
|
104
|
+
prot = "(https?)://"
|
105
|
+
|
106
|
+
params["host"].match(
|
107
|
+
/^#{prot}#{creds}#{host}#{port}#{path}/
|
108
|
+
) do |m|
|
109
|
+
@host = m[6]
|
110
|
+
@password = m[5]
|
111
|
+
@path = m[10]
|
112
|
+
@port = m[8]
|
113
|
+
case m[1]
|
114
|
+
when "http"
|
115
|
+
@ssl = false
|
116
|
+
when "https"
|
117
|
+
@ssl = true
|
118
|
+
end
|
119
|
+
@username = m[3]
|
120
|
+
end
|
121
|
+
|
122
|
+
@os = params["os"]
|
123
|
+
@password ||= params["password"]
|
124
|
+
@path ||= params["path"]
|
125
|
+
@path = "/#{@path}" if (@path)
|
126
|
+
@port ||= params["port"] || 8080
|
127
|
+
@ssl ||= params["ssl"] || false
|
128
|
+
@username ||= params["username"]
|
97
129
|
|
98
130
|
# Initialize @cwd
|
99
131
|
@cwd = pwd
|
@@ -123,7 +155,7 @@ class JenkinsShell
|
|
123
155
|
http.use_ssl = @ssl
|
124
156
|
|
125
157
|
# Create request
|
126
|
-
req = Net::HTTP::Post.new(path)
|
158
|
+
req = Net::HTTP::Post.new("#{@path}#{path}")
|
127
159
|
req.body = body.join("&")
|
128
160
|
req["Cookie"] = @cookie if (@cookie)
|
129
161
|
|
@@ -150,8 +182,13 @@ class JenkinsShell
|
|
150
182
|
private :post
|
151
183
|
|
152
184
|
def pwd(dir = @int_cwd)
|
153
|
-
|
154
|
-
|
185
|
+
case @os
|
186
|
+
when JenkinsShell::OS.LINUX
|
187
|
+
return command("pwd", dir)
|
188
|
+
when JenkinsShell::OS.WINDOWS
|
189
|
+
command("dir", dir).match(/^\s+Directory of (.+)/) do |m|
|
190
|
+
return m[1]
|
191
|
+
end
|
155
192
|
end
|
156
193
|
return ""
|
157
194
|
end
|
@@ -171,3 +208,4 @@ class JenkinsShell
|
|
171
208
|
end
|
172
209
|
|
173
210
|
require "jenkins_shell/error"
|
211
|
+
require "jenkins_shell/os"
|
@@ -11,6 +11,12 @@ class CDWish < Djinni::Wish
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def execute(args, djinni_env = Hash.new)
|
14
|
+
case djinni_env["os"]
|
15
|
+
when JenkinsShell::OS.LINUX
|
16
|
+
puts "Currently unsupported for Linux"
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
14
20
|
usage if (args.empty?)
|
15
21
|
|
16
22
|
jsh = djinni_env["jsh"]
|
@@ -19,7 +25,12 @@ class CDWish < Djinni::Wish
|
|
19
25
|
return
|
20
26
|
end
|
21
27
|
|
22
|
-
djinni_env["
|
28
|
+
case djinni_env["os"]
|
29
|
+
when JenkinsShell::OS.LINUX
|
30
|
+
djinni_env["djinni_prompt"] = "#{jsh.cwd}$ ".light_white
|
31
|
+
when JenkinsShell::OS.WINDOWS
|
32
|
+
djinni_env["djinni_prompt"] = "#{jsh.cwd}> ".light_white
|
33
|
+
end
|
23
34
|
end
|
24
35
|
|
25
36
|
def usage
|
@@ -14,7 +14,13 @@ class CmdWish < Djinni::Wish
|
|
14
14
|
|
15
15
|
jsh = djinni_env["jsh"]
|
16
16
|
puts jsh.command(args)
|
17
|
-
|
17
|
+
|
18
|
+
case djinni_env["os"]
|
19
|
+
when JenkinsShell::OS.LINUX
|
20
|
+
djinni_env["djinni_prompt"] = "#{jsh.cwd}$ ".light_white
|
21
|
+
when JenkinsShell::OS.WINDOWS
|
22
|
+
djinni_env["djinni_prompt"] = "#{jsh.cwd}> ".light_white
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
26
|
def usage
|
@@ -11,8 +11,15 @@ class LSWish < Djinni::Wish
|
|
11
11
|
|
12
12
|
def execute(args, djinni_env = Hash.new)
|
13
13
|
jsh = djinni_env["jsh"]
|
14
|
-
|
15
|
-
djinni_env["
|
14
|
+
|
15
|
+
case djinni_env["os"]
|
16
|
+
when JenkinsShell::OS.LINUX
|
17
|
+
puts jsh.command("ls #{args}")
|
18
|
+
djinni_env["djinni_prompt"] = "#{jsh.cwd}$ ".light_white
|
19
|
+
when JenkinsShell::OS.WINDOWS
|
20
|
+
puts jsh.command("dir #{args}")
|
21
|
+
djinni_env["djinni_prompt"] = "#{jsh.cwd}> ".light_white
|
22
|
+
end
|
16
23
|
end
|
17
24
|
|
18
25
|
def usage
|
@@ -14,7 +14,13 @@ class PwdWish < Djinni::Wish
|
|
14
14
|
|
15
15
|
jsh = djinni_env["jsh"]
|
16
16
|
puts jsh.pwd if (args.empty?)
|
17
|
-
|
17
|
+
|
18
|
+
case djinni_env["os"]
|
19
|
+
when JenkinsShell::OS.LINUX
|
20
|
+
djinni_env["djinni_prompt"] = "#{jsh.cwd}$ ".light_white
|
21
|
+
when JenkinsShell::OS.WINDOWS
|
22
|
+
djinni_env["djinni_prompt"] = "#{jsh.cwd}> ".light_white
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
26
|
def usage
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jenkins_shell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miles Whittaker
|
@@ -71,7 +71,7 @@ dependencies:
|
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: 1.2.3
|
73
73
|
description: This gem will use the scripting functionality of Jenkins to simulate
|
74
|
-
a Windows cmd prompt.
|
74
|
+
a Linux shell or Windows cmd prompt.
|
75
75
|
email: mjwhitta@gmail.com
|
76
76
|
executables:
|
77
77
|
- jsh
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/jenkins_shell/error/connection_refused.rb
|
85
85
|
- lib/jenkins_shell/error/invalid_html_received.rb
|
86
86
|
- lib/jenkins_shell/error/login_failure.rb
|
87
|
+
- lib/jenkins_shell/os.rb
|
87
88
|
- lib/jenkins_shell/wish/cd_wish.rb
|
88
89
|
- lib/jenkins_shell/wish/cmd_wish.rb
|
89
90
|
- lib/jenkins_shell/wish/ls_wish.rb
|
@@ -111,5 +112,5 @@ rubyforge_project:
|
|
111
112
|
rubygems_version: 2.7.7
|
112
113
|
signing_key:
|
113
114
|
specification_version: 4
|
114
|
-
summary: Simulate a
|
115
|
+
summary: Simulate a Linux/Windows prompt using Jenkins.
|
115
116
|
test_files: []
|