如何部署应用程序并包含IIS设置?

时间:2015-08-05 14:17:08

标签: asp.net iis tfs msbuild web-deployment

我正在寻找一种如何从DEVITGPRO部署应用程序,网站和网络服务的方法。我不是指项目中包含的文件,还包括IIS,文件/文件夹权限等设置。

例如,本周末我们必须将ITG的新应用程序部署到PRO,并将PRO AppPool设置为运行.NET 2.0(来自之前的版本)。我们花了一些时间才意识到发生了什么,当然导致停机时间比预期的要长。

目前,我们正在使用VS 2013C# 4.xIIS 8.xTFS 2013。 这里的问题是,如果有一种方法可以通过“单击”部署应用程序。 MSBuild是否适合此任务? (我没有MSBuild的经验,我在谷歌搜索时发现了一些东西,我想知道我是否需要更深入了解。 TFS可以从源计算机读取这些设置并以某种方式将它们复制到目标上吗?还有其他工具可以完成此任务吗?我们希望留在微软的圈子里,但是如果其他东西确实如此,我们可能会考虑它。

1 个答案:

答案 0 :(得分:1)

这可以通过PowerShell完成。我不是PowerShell专家,所以我的语法可能不遵循良好的做法等。但我有一个脚本,我用来创建生产和测试网站,并预先配置几个IIS设置。然后我从VS进行部署,但您可以扩展脚本以执行构建和部署。它利用WebAdministration模块配置IIS。

CreateIntranetSite.ps1

param([string]$SiteName, [string]$Hostname)

if($SiteName -eq '') {
Write-Error "You must provide a SiteName parameter."
}
elseif($HostName -eq ''){
Write-Error "You must provide a HostName parameter."
}
else {
Invoke-Command -ComputerName $HostName -credential DOMAIN\mason.sa -ArgumentList $SiteName -ScriptBlock {
param([string]$SiteName)
$IntranetRoot = "E:\Intranet"
$DefaultHtml = "<html><head><title>$SiteName</title></head><body><h1>$SiteName</h1><p>The $SiteName virtual application has been successfully configured.</p></body></html>"

#Import IIS tools
Import-Module "WebAdministration"

#Create Folder
New-Item $IntranetRoot\$SiteName -type Directory

#Create Default Page
Set-Content $IntranetRoot\$SiteName\index.html $DefaultHtml

#Create App Pool
New-WebAppPool $SiteName

#Create Virtual Application
New-WebApplication -Name $SiteName -Site "Intranet" -PhysicalPath $IntranetRoot\$SiteName -ApplicationPool $SiteName

#Configuration Virtual Application

#Disable AnonymousAuthentication
Set-WebConfigurationProperty -filter /system.WebServer/security/authentication/AnonymousAuthentication -name enabled -value false -location Intranet/$SiteName

#Enable Windows Authentication
Set-WebConfigurationProperty -filter /system.WebServer/security/authentication/WindowsAuthentication -name enabled -value true -location Intranet/$SiteName

}

#Launch Browser to verify
$SiteUrl=''
if($HostName -eq 'wr-test01'){
$SiteUrl='https://testnet.termana.net/'+$SiteName
}
elseif($HostName -eq 'wr-web01'){
$SiteUrl='https://intranet.termana.net/'+$SiteName
}
$ie = new-object -com InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate($SiteUrl);
}