dolphindeploy 0.0.2-universal-dotnet
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +9 -0
- data/TODO +18 -0
- data/external/DolphinDeploy.IIS.IIS6.dll +0 -0
- data/external/Microsoft.Web.Administration.dll +0 -0
- data/external/TinySharpZip.dll +0 -0
- data/external/adsutil.vbs +2938 -0
- data/external/xunit/HTML.xslt +117 -0
- data/external/xunit/NUnitXml.xslt +121 -0
- data/external/xunit/xunit.console.exe +0 -0
- data/external/xunit/xunit.console.exe.config +21 -0
- data/external/xunit/xunit.console.x86.exe +0 -0
- data/external/xunit/xunit.console.x86.exe.config +21 -0
- data/external/xunit/xunit.dll +0 -0
- data/external/xunit/xunit.dll.tdnet +5 -0
- data/external/xunit/xunit.extensions.dll +0 -0
- data/external/xunit/xunit.extensions.xml +706 -0
- data/external/xunit/xunit.gui.exe +0 -0
- data/external/xunit/xunit.gui.x86.exe +0 -0
- data/external/xunit/xunit.installer.exe +0 -0
- data/external/xunit/xunit.runner.msbuild.dll +0 -0
- data/external/xunit/xunit.runner.tdnet.dll +0 -0
- data/external/xunit/xunit.runner.utility.dll +0 -0
- data/external/xunit/xunit.runner.utility.xml +1048 -0
- data/external/xunit/xunit.xml +2306 -0
- data/lib/IIS/IIS.rb +23 -0
- data/lib/IIS/IIS6.rb +165 -0
- data/lib/IIS/IIS7.rb +152 -0
- data/lib/IIS/IISVersion.rb +7 -0
- data/lib/configured_as/mvc_deployment.rb +174 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.5.1.ReSharper.user +45 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/AppPoolControllerTests.cs +39 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/DolphinDeploy.IIS.IIS6.Tests.csproj +69 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/DolphinDeploy.IIS.IIS6.Tests.csproj.user +6 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/Helper.cs +18 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/Properties/AssemblyInfo.cs +36 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/WebsiteControllerTests.cs +56 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/bin/Debug/DolphinDeploy.IIS.IIS6.Tests.dll +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/bin/Debug/DolphinDeploy.IIS.IIS6.Tests.pdb +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/bin/Debug/DolphinDeploy.IIS.IIS6.dll +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/bin/Debug/DolphinDeploy.IIS.IIS6.pdb +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/bin/Debug/test_site/index.htm +9 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/bin/Debug/xunit.dll +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/bin/Debug/xunit.xml +2306 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/obj/Debug/DolphinDeploy.IIS.IIS6.Tests.csproj.FileListAbsolute.txt +12 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/obj/Debug/DolphinDeploy.IIS.IIS6.Tests.dll +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/obj/Debug/DolphinDeploy.IIS.IIS6.Tests.pdb +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/obj/Debug/ResolveAssemblyReference.cache +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.Tests/test_site/index.htm +9 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.sln +26 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.suo +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/AppPoolController.cs +41 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6.csproj +56 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/IIS6Manager.cs +77 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/Properties/AssemblyInfo.cs +36 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/WebsiteController.cs +101 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/bin/Debug/DolphinDeploy.IIS.IIS6.dll +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/bin/Debug/DolphinDeploy.IIS.IIS6.pdb +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/obj/Debug/DolphinDeploy.IIS.IIS6.csproj.FileListAbsolute.txt +7 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/obj/Debug/DolphinDeploy.IIS.IIS6.dll +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/DolphinDeploy.IIS.IIS6/obj/Debug/DolphinDeploy.IIS.IIS6.pdb +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/_ReSharper.DolphinDeploy.IIS.IIS6/BuildScriptCache/1/78fc7364.dat +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/_ReSharper.DolphinDeploy.IIS.IIS6/ModuleIds.xml +4 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/_ReSharper.DolphinDeploy.IIS.IIS6/NamedArguments/5/4b9722ad.dat +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/_ReSharper.DolphinDeploy.IIS.IIS6/PdbInfo/61d4d5326252d9cd7476a391dfbbb2a47481ffa6 +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/_ReSharper.DolphinDeploy.IIS.IIS6/ProjectModel/ProjectModel.dat +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/_ReSharper.DolphinDeploy.IIS.IIS6/SymbolCache.bin +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/_ReSharper.DolphinDeploy.IIS.IIS6/TodoCache/1/78fc7364.dat +0 -0
- data/lib/csharp/DolphinDeploy.IIS.IIS6/_ReSharper.DolphinDeploy.IIS.IIS6/WordIndex/1/72ab4678.dat +0 -0
- data/lib/deploycommandcreator.rb +34 -0
- data/lib/deploymentconfig.rb +15 -0
- data/lib/directory_cleanup.rb +16 -0
- data/lib/dolphindeploy.rb +12 -0
- data/lib/dolphindeploy_rake.rb +36 -0
- data/lib/file_manager.rb +30 -0
- data/lib/unzip.rb +11 -0
- data/spec/IIS/IIS6_spec.rb +24 -0
- data/spec/IIS/IIS_spec.rb +18 -0
- data/spec/configured_as/mvc_deployment_spec.rb +108 -0
- data/spec/deploycommandcreator_spec.rb +169 -0
- data/spec/deploymentconfig_spec.rb +202 -0
- data/spec/dolphindeploy_spec.rb +13 -0
- data/spec/file_manager_spec.rb +22 -0
- data/spec/support/spec_helper.rb +17 -0
- metadata +222 -0
data/lib/IIS/IIS.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'IISVersion'
|
2
|
+
|
3
|
+
class IIS
|
4
|
+
def self.server
|
5
|
+
if(IISVersion.current_version =~ /^6/)
|
6
|
+
require 'IIS6'
|
7
|
+
version = IIS6.new
|
8
|
+
else
|
9
|
+
require 'IIS7'
|
10
|
+
version = IIS7.new
|
11
|
+
end
|
12
|
+
|
13
|
+
return version
|
14
|
+
end
|
15
|
+
### Will be executed on the local box, might be able to refactor 'server' out.
|
16
|
+
def deploy(server, location, deployment)
|
17
|
+
IIS.server.deploy(server, location, deployment)
|
18
|
+
end
|
19
|
+
|
20
|
+
def set_extra_header(header, deployment)
|
21
|
+
IIS.server.set_extra_header header,deployment
|
22
|
+
end
|
23
|
+
end
|
data/lib/IIS/IIS6.rb
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
$: << 'external'
|
2
|
+
load_assembly 'DolphinDeploy.IIS.IIS6'
|
3
|
+
load_assembly 'System.DirectoryServices'
|
4
|
+
include DolphinDeploy::IIS::IIS6
|
5
|
+
include System::DirectoryServices
|
6
|
+
|
7
|
+
class IIS6
|
8
|
+
def deploy(server, location, deployment)
|
9
|
+
unless apppool_exists?(server, deployment)
|
10
|
+
create_app_pool(server, deployment.site_name) #Server is only so we can pull out correct path to deploy too
|
11
|
+
end
|
12
|
+
|
13
|
+
if(website_exists?(server, deployment))
|
14
|
+
update_website_path(server, location, deployment)
|
15
|
+
else
|
16
|
+
create_website(server, location, deployment)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def website_exists?(server, deployment)
|
21
|
+
website = WebsiteController.new
|
22
|
+
website.server = server
|
23
|
+
website.name = deployment.site_name
|
24
|
+
|
25
|
+
return website.exists
|
26
|
+
end
|
27
|
+
|
28
|
+
def apppool_exists?(server, deployment)
|
29
|
+
app_pool = AppPoolController.new
|
30
|
+
app_pool.server = server
|
31
|
+
app_pool.name = get_app_pool_name(deployment.site_name)
|
32
|
+
|
33
|
+
return app_pool.exists
|
34
|
+
end
|
35
|
+
|
36
|
+
def set_extra_header(server, header, deployment)
|
37
|
+
site = get_website(server, deployment)
|
38
|
+
|
39
|
+
header.each do |h|
|
40
|
+
existing_headers = get_existing_headers(site)
|
41
|
+
header_arg = ""
|
42
|
+
|
43
|
+
existing_headers.each {|e| header_arg << "\"#{e}\" "}
|
44
|
+
|
45
|
+
ip = deployment.get_deploy_to_location(server)[0].ipaddress
|
46
|
+
|
47
|
+
cmd = "cscript /nologo external\\adsutil.vbs set w3svc/#{site.name}/ServerBindings \"#{ip}:#{h}\" #{header_arg}"
|
48
|
+
`#{cmd}`
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_virtual_directory(name, path, deployment)
|
53
|
+
site = get_website('localhost', deployment)
|
54
|
+
cmd = "cscript /nologo external\\adsutil.vbs CREATE w3svc/#{site.name}/root/#{name} \"IIsWebVirtualDir\""
|
55
|
+
`#{cmd}`
|
56
|
+
|
57
|
+
root_site = get_root_site(site)
|
58
|
+
full_path = File.join(root_site.Properties['Path'][0], path)
|
59
|
+
cmd = "cscript /nologo external\\adsutil.vbs SET w3svc/#{site.name}/root/#{name}/path #{convert_path_to_iis_format(full_path)}"
|
60
|
+
`#{cmd}`
|
61
|
+
|
62
|
+
cmd = "cscript /nologo external\\adsutil.vbs SET w3svc/#{site.name}/root/#{name}/AppFriendlyName #{name}"
|
63
|
+
`#{cmd}`
|
64
|
+
|
65
|
+
|
66
|
+
cmd = "cscript /nologo external\\adsutil.vbs SET w3svc/#{site.name}/root/#{name}/AppRoot /LM/W3SVC/#{site.name}/root/#{name}"
|
67
|
+
`#{cmd}`
|
68
|
+
|
69
|
+
cmd = "cscript /nologo external\\adsutil.vbs SET w3svc/#{site.name}/root/#{name}/AppIsolated 2"
|
70
|
+
`#{cmd}`
|
71
|
+
|
72
|
+
cmd = "cscript /nologo external\\adsutil.vbs SET w3svc/#{site.name}/root/#{name}/DirBrowseFlags 1073741886"
|
73
|
+
`#{cmd}`
|
74
|
+
|
75
|
+
cmd = "cscript /nologo external\\adsutil.vbs SET w3svc/#{site.name}/root/#{name}/AccessFlags 513"
|
76
|
+
`#{cmd}`
|
77
|
+
# root_site.Properties['AppRoot'][0] = "LM/W3SVC/#{site.name}/root/#{name}"
|
78
|
+
# root_site.Properties['AppIsolated'][0] = 2
|
79
|
+
# root_site.Properties['DirBrowseFlags'][0] = 1073741886
|
80
|
+
# root_site.Properties['AccessFlags'][0] = 513
|
81
|
+
end
|
82
|
+
|
83
|
+
def execute_admin(type, cmd, deployment)
|
84
|
+
site = get_website('localhost', deployment)
|
85
|
+
cmd = "cscript /nologo external\\adsutil.vbs #{type.to_s} w3svc/#{site.name}/#{cmd}"
|
86
|
+
`#{cmd}`
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def get_existing_headers(site)
|
92
|
+
cmd = "cscript /nologo external\\adsutil.vbs get w3svc/#{site.name}/ServerBindings"
|
93
|
+
result = `#{cmd}`
|
94
|
+
headers = result.to_a[1..-1].join
|
95
|
+
|
96
|
+
headers = clean_output(headers)
|
97
|
+
|
98
|
+
return headers
|
99
|
+
end
|
100
|
+
|
101
|
+
def create_app_pool(server, name)
|
102
|
+
app_pool = AppPoolController.new
|
103
|
+
app_pool.server = server # Always executed on the local box
|
104
|
+
app_pool.name = get_app_pool_name(name)
|
105
|
+
app_pool.create
|
106
|
+
end
|
107
|
+
|
108
|
+
def update_website_path(server, location, deployment)
|
109
|
+
site = get_website(server, deployment)
|
110
|
+
|
111
|
+
root_site = get_root_site(site)
|
112
|
+
root_site.Properties['Path'][0] = convert_path_to_iis_format(location)
|
113
|
+
root_site.commit_changes()
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_website(server, deployment)
|
117
|
+
website = WebsiteController.new
|
118
|
+
website.name = deployment.site_name
|
119
|
+
website.server = server
|
120
|
+
website.get_website()
|
121
|
+
end
|
122
|
+
|
123
|
+
def create_website(server, location, deployment)
|
124
|
+
website = WebsiteController.new
|
125
|
+
website.name = deployment.site_name
|
126
|
+
website.app_pool = get_app_pool_name(deployment.site_name)
|
127
|
+
website.home_directory = convert_path_to_iis_format(location)
|
128
|
+
website.port = deployment.port
|
129
|
+
website.IpAddress = deployment.get_deploy_to_location(server)[0].ipaddress
|
130
|
+
website.host_header = deployment.host
|
131
|
+
website.server = server
|
132
|
+
|
133
|
+
website.create
|
134
|
+
website.start
|
135
|
+
|
136
|
+
set_isapi_filter(deployment)
|
137
|
+
end
|
138
|
+
|
139
|
+
def set_isapi_filter(deployment)
|
140
|
+
execute_admin(:set, "ScriptMaps \"*,C:\\windows\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll,1\"", deployment)
|
141
|
+
end
|
142
|
+
|
143
|
+
def get_app_pool_name(name)
|
144
|
+
"#{name}_AppPool"
|
145
|
+
end
|
146
|
+
|
147
|
+
def convert_path_to_iis_format(path)
|
148
|
+
path.gsub('/','\\').to_clr_string
|
149
|
+
end
|
150
|
+
|
151
|
+
def get_root_site(site)
|
152
|
+
path = "IIS://localhost/w3svc/#{site.name}/ROOT"
|
153
|
+
DirectoryEntry.new(path.to_clr_string)
|
154
|
+
end
|
155
|
+
|
156
|
+
def clean_output(output)
|
157
|
+
result = []
|
158
|
+
|
159
|
+
output.each do |o|
|
160
|
+
result << o.strip.gsub("\n", "")
|
161
|
+
end
|
162
|
+
|
163
|
+
return result
|
164
|
+
end
|
165
|
+
end
|
data/lib/IIS/IIS7.rb
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
$: << 'external'
|
2
|
+
load_assembly 'Microsoft.Web.Administration'
|
3
|
+
include Microsoft::Web::Administration
|
4
|
+
|
5
|
+
class IIS7
|
6
|
+
def deploy(server, location, deployment)
|
7
|
+
unless apppool_exists?(server, deployment)
|
8
|
+
create_app_pool(server, deployment.site_name) #Server is only so we can pull out correct path to deploy too
|
9
|
+
end
|
10
|
+
|
11
|
+
if(website_exists?(server, deployment))
|
12
|
+
update_website_path(server, location, deployment)
|
13
|
+
else
|
14
|
+
create_website(server, location, deployment)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def website_exists?(server, deployment)
|
19
|
+
site = get_website(server, deployment)
|
20
|
+
|
21
|
+
return site.length > 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def apppool_exists?(server, deployment)
|
25
|
+
app = get_app_pool(server, deployment)
|
26
|
+
|
27
|
+
return app.length > 0
|
28
|
+
end
|
29
|
+
|
30
|
+
def set_extra_header(server, header, deployment)
|
31
|
+
iis = ServerManager.new
|
32
|
+
sites = iis.sites.select {|s| s.name == deployment.site_name }
|
33
|
+
|
34
|
+
header.each do |h|
|
35
|
+
ip = deployment.get_deploy_to_location(server)[0].ipaddress
|
36
|
+
|
37
|
+
header_broken_down = h.split(":")
|
38
|
+
port = header_broken_down[0]
|
39
|
+
host = header_broken_down[1]
|
40
|
+
add_binding(sites[0], ip, port, host)
|
41
|
+
end
|
42
|
+
|
43
|
+
iis.commit_changes
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_virtual_directory(name, path, deployment)
|
47
|
+
iis = ServerManager.new
|
48
|
+
sites = iis.sites.select {|s| s.name == deployment.site_name }
|
49
|
+
site = sites[0]
|
50
|
+
app = site.applications[0]
|
51
|
+
|
52
|
+
root = app.virtual_directories.select {|v| v.path == "/" }
|
53
|
+
vdir_requested_to_create = app.virtual_directories.select {|v| v.path == "/" + name}
|
54
|
+
|
55
|
+
if vdir_requested_to_create.empty?
|
56
|
+
vdir = app.virtual_directories.create_element()
|
57
|
+
vdir.path = "/" + name
|
58
|
+
vdir.physical_path = File.join(root[0].physical_path, path)
|
59
|
+
app.virtual_directories.add(vdir)
|
60
|
+
iis.commit_changes
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def execute_admin(type, cmd, deployment)
|
65
|
+
iis = ServerManager.new
|
66
|
+
sites = iis.sites.select {|s| s.name == deployment.site_name }
|
67
|
+
site = sites[0]
|
68
|
+
cmd = "cscript /nologo external\\adsutil.vbs #{type.to_s} w3svc/#{site.name}/#{cmd}"
|
69
|
+
`#{cmd}`
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def create_app_pool(server, name)
|
75
|
+
iis = ServerManager.new
|
76
|
+
iis.application_pools.Add(get_app_pool_name(name));
|
77
|
+
iis.commit_changes
|
78
|
+
end
|
79
|
+
|
80
|
+
def update_website_path(server, location, deployment)
|
81
|
+
iis = ServerManager.new
|
82
|
+
sites = iis.sites.select {|s| s.name == deployment.site_name }
|
83
|
+
site = sites[0]
|
84
|
+
app = site.applications[0]
|
85
|
+
|
86
|
+
vdir = app.virtual_directories.select {|v| v.Path == "/"}
|
87
|
+
vdir[0].physical_path = convert_path_to_iis_format(location)
|
88
|
+
iis.commit_changes
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_website(server, deployment)
|
92
|
+
iis = ServerManager.new
|
93
|
+
iis.sites.select {|s| s.name == deployment.site_name }
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_app_pool(server, deployment)
|
97
|
+
iis = ServerManager.new
|
98
|
+
app = iis.application_pools.select {|a| a.name == get_app_pool_name(deployment.site_name) }
|
99
|
+
end
|
100
|
+
|
101
|
+
def create_website(server, location, deployment)
|
102
|
+
name = deployment.site_name.to_clr_string
|
103
|
+
location = convert_path_to_iis_format(location)
|
104
|
+
iis = ServerManager.new
|
105
|
+
|
106
|
+
site = iis.sites.CreateElement();
|
107
|
+
site.id = get_highest_id(iis)
|
108
|
+
site.SetAttributeValue("name", name);
|
109
|
+
|
110
|
+
app = site.Applications.CreateElement();
|
111
|
+
app.path = "/".to_clr_string
|
112
|
+
app.ApplicationPoolName = get_app_pool_name(deployment.site_name)
|
113
|
+
|
114
|
+
vdir = app.virtual_directories.CreateElement()
|
115
|
+
vdir.path = "/"
|
116
|
+
vdir.physical_path = location
|
117
|
+
app.virtual_directories.add(vdir)
|
118
|
+
|
119
|
+
site.applications.add(app);
|
120
|
+
|
121
|
+
ip_address = deployment.get_deploy_to_location(server)[0].ipaddress
|
122
|
+
add_binding(site, ip_address, deployment.port, deployment.host)
|
123
|
+
|
124
|
+
iis.sites.add(site);
|
125
|
+
|
126
|
+
iis.commit_changes
|
127
|
+
end
|
128
|
+
|
129
|
+
def get_highest_id(iis)
|
130
|
+
highestId = 0
|
131
|
+
iis.sites.each do |s|
|
132
|
+
highestId = s.Id if(s.Id > highestId)
|
133
|
+
end
|
134
|
+
highestId + 1
|
135
|
+
end
|
136
|
+
|
137
|
+
def add_binding(site, ip_address, port, host)
|
138
|
+
binding = site.bindings.create_element();
|
139
|
+
binding.SetAttributeValue("protocol", "http".to_clr_string);
|
140
|
+
binding.SetAttributeValue("bindingInformation", "#{ip_address}:#{port}:#{host}".to_clr_string);
|
141
|
+
site.bindings.add(binding);
|
142
|
+
end
|
143
|
+
|
144
|
+
def get_app_pool_name(name)
|
145
|
+
"#{name}_AppPool"
|
146
|
+
end
|
147
|
+
|
148
|
+
def convert_path_to_iis_format(path)
|
149
|
+
path.gsub('/','\\').to_clr_string
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
class MvcDeployment
|
2
|
+
attr_accessor :environment
|
3
|
+
attr_accessor :host
|
4
|
+
attr_accessor :to
|
5
|
+
attr_accessor :port
|
6
|
+
attr_accessor :ipaddress
|
7
|
+
attr_accessor :description
|
8
|
+
attr_accessor :site_name
|
9
|
+
attr_accessor :deploy_zip_path
|
10
|
+
attr_accessor :before
|
11
|
+
attr_accessor :after
|
12
|
+
|
13
|
+
def initialize()
|
14
|
+
set_defaults
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_defaults()
|
18
|
+
self.port = 80
|
19
|
+
self.description = "MvcDeployment"
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_name(name)
|
23
|
+
self.site_name = name
|
24
|
+
end
|
25
|
+
|
26
|
+
def set_deploy(path)
|
27
|
+
self.deploy_zip_path = path
|
28
|
+
end
|
29
|
+
|
30
|
+
def set_description(desc)
|
31
|
+
self.description = desc
|
32
|
+
end
|
33
|
+
|
34
|
+
def set_host(header)
|
35
|
+
self.host = header
|
36
|
+
end
|
37
|
+
|
38
|
+
def set_ipaddress(address)
|
39
|
+
self.ipaddress = address
|
40
|
+
end
|
41
|
+
|
42
|
+
def set_port(num)
|
43
|
+
self.port = num
|
44
|
+
end
|
45
|
+
|
46
|
+
def set_environment(env)
|
47
|
+
self.environment = env
|
48
|
+
end
|
49
|
+
|
50
|
+
def set_to(locations)
|
51
|
+
self.to = []
|
52
|
+
|
53
|
+
i = 0
|
54
|
+
while i < locations.length
|
55
|
+
location = DeployTo.new
|
56
|
+
location.server = locations[i]
|
57
|
+
location.path = locations[i + 1]
|
58
|
+
location.ipaddress = locations[i + 2]
|
59
|
+
|
60
|
+
self.to << location
|
61
|
+
i = i + 3
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def set_before(block)
|
66
|
+
self.before = block
|
67
|
+
end
|
68
|
+
|
69
|
+
def set_after(block)
|
70
|
+
self.after = block
|
71
|
+
end
|
72
|
+
|
73
|
+
def add_machine_name_host_header(server, header)
|
74
|
+
hostname = `hostname`
|
75
|
+
updated_header = header.gsub("<machinename>", hostname.gsub("\n", ""))
|
76
|
+
|
77
|
+
iis = IIS.server
|
78
|
+
iis.set_extra_header(server, updated_header, self)
|
79
|
+
end
|
80
|
+
|
81
|
+
def extra_header(server, header) #Header will contain array of all the headers being added
|
82
|
+
iis = IIS.server
|
83
|
+
iis.set_extra_header(server, header, self)
|
84
|
+
end
|
85
|
+
|
86
|
+
def virtual_directory(server, vDirInfo) #Directories will contain array of all the virtual directories being added
|
87
|
+
iis = IIS.server
|
88
|
+
|
89
|
+
i = 0
|
90
|
+
while i < vDirInfo.length
|
91
|
+
name = vDirInfo[i]
|
92
|
+
path = vDirInfo[i + 1]
|
93
|
+
|
94
|
+
iis.create_virtual_directory(name, path, self)
|
95
|
+
i = i + 2
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def cmd(server, command)
|
100
|
+
`#{command}`
|
101
|
+
end
|
102
|
+
|
103
|
+
def iis(server, command)
|
104
|
+
iis = IIS.server
|
105
|
+
|
106
|
+
i = 0
|
107
|
+
while i < command.length
|
108
|
+
type = command[i]
|
109
|
+
cmd = command[i + 1]
|
110
|
+
|
111
|
+
iis.execute_admin(type, cmd, self)
|
112
|
+
i = i + 2
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
def get_deploy_to_location(server)
|
118
|
+
self.to.select{|t| t.server == server}
|
119
|
+
end
|
120
|
+
|
121
|
+
def get_location(server)
|
122
|
+
servers = get_deploy_to_location(server)
|
123
|
+
servers[0].path
|
124
|
+
end
|
125
|
+
|
126
|
+
def deploy(server)
|
127
|
+
execute_before_methods(server)
|
128
|
+
|
129
|
+
location = get_location(server)
|
130
|
+
|
131
|
+
fm = FileManager.new
|
132
|
+
latest_version_location = fm.get_latest_version(location, self.site_name)
|
133
|
+
|
134
|
+
fm.extract(latest_version_location, self.deploy_zip_path, self.environment)
|
135
|
+
|
136
|
+
iis = IIS.new
|
137
|
+
iis.deploy(server, latest_version_location, self)
|
138
|
+
|
139
|
+
execute_after_methods(server)
|
140
|
+
end
|
141
|
+
|
142
|
+
def execute_before_methods(server)
|
143
|
+
unless self.before.nil?
|
144
|
+
self.before.each do |k, v|
|
145
|
+
call_method(k, server, v)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def execute_after_methods(server)
|
151
|
+
unless self.after.nil?
|
152
|
+
self.after.each do |k, v|
|
153
|
+
call_method(k, server, v)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def call_method(method_name, server, param)
|
159
|
+
if self.respond_to?(method_name)
|
160
|
+
if self.method(method_name).arity == 2
|
161
|
+
self.send(method_name, server, param)
|
162
|
+
else
|
163
|
+
self.send(method_name, param)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
class DeployTo
|
171
|
+
attr_accessor :server
|
172
|
+
attr_accessor :path
|
173
|
+
attr_accessor :ipaddress
|
174
|
+
end
|