我正在寻找一种如何从DEV
到ITG
和PRO
部署应用程序,网站和网络服务的方法。我不是指项目中包含的文件,还包括IIS
,文件/文件夹权限等设置。
例如,本周末我们必须将ITG
的新应用程序部署到PRO
,并将PRO AppPool
设置为运行.NET 2.0
(来自之前的版本)。我们花了一些时间才意识到发生了什么,当然导致停机时间比预期的要长。
目前,我们正在使用VS 2013
,C# 4.x
,IIS 8.x
和TFS 2013
。
这里的问题是,如果有一种方法可以通过“单击”部署应用程序。 MSBuild
是否适合此任务? (我没有MSBuild
的经验,我在谷歌搜索时发现了一些东西,我想知道我是否需要更深入了解。 TFS可以从源计算机读取这些设置并以某种方式将它们复制到目标上吗?还有其他工具可以完成此任务吗?我们希望留在微软的圈子里,但是如果其他东西确实如此,我们可能会考虑它。
答案 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);
}