从Octopus迁移到2017年TFS - 发布ASP.NET网站

时间:2017-10-03 09:57:19

标签: asp.net iis tfs visual-studio-2017 octopus-deploy

我们目前使用Octopus Deploy将网站推送到Window Server 2012上托管的IIS服务器。

我们希望抛弃八达通并使用我们的本地TFS 2017内置发布系统。我们已经构建了可以发布工件(网站二进制文件和内容)的定义。

使用Octopus,我们在所有服务器上安装了触角。

Octopus中定义的遗留发布流程如下:

  1. 设置IIS(Powershell脚本为站点配置应用程序池,将虚拟目录映射到绝对路径)
  2. 部署nuget包(包含网站二进制文件和脚本) - 将包含网站的包解包到关联虚拟目录的物理路径
  3. 启用Windows身份验证(调用Set-WebConfigurationProperty的单行PowerShell脚本)
  4. 禁用Anon Auth(再次使用powershell。)
  5. 我并不热衷于八爪鱼过程中使用的Powershell数量,并且希望在TFS版本定义中最小化Powershell。

    我的问题是:Microsoft推荐的将ASP.NET网站(vanilla MVC项目,而不是.NET核心)部署到CI环境中的服务器的方式是什么?是否可以同时配置站点身份验证?

    NB: 我看了一下OOB IIS发布WinRM部署任务,我担心他们可能需要比我们的基础架构团队更多的时间(配置防火墙等)。

    我们在构建服务器上安装了Visual Studio 2017。

    TIA, 斯科特

2 个答案:

答案 0 :(得分:0)

使用IIS WinRM任务可能是最好和最简单的方法。您可以找到有关如何配置内容的一些good指南。

您需要的基础是:

  • 确保在目标服务器上配置了WinRM,并且您的代理可以连接到它们
  • 在编译项目时通过添加这些msbuild参数来打包您的网站 /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.ArtifactStagingDirectory)

答案 1 :(得分:0)

根据您的描述,您正在IIS上托管的网站上进行部署。

首先通过TFS构建,您可以使用一些msbuild参数(例如import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { SignInComponent } from '../components/sign-in/sign-in.component'; import { HomeComponent } from '../components/home/home.component'; const appRoutes: Routes = [ { path: '', component: HomeComponent, canActivate: [AuthGuard]}, { path: '', component: SignInComponent} ]; @NgModule({ imports: [ RouterModule.forRoot( appRoutes, { enableTracing: false } ) ], exports: [ RouterModule ] }) export class AppRoutingModule {} )来生成包。

然后在发布定义中使用Deploy: Windows Machine File Copy任务 - 将Web Deploy包复制到IIS服务器。最后使用Deploy: WinRM - IIS Web App Deployment - 部署包。在Build and Release代理上运行的此任务为每个IIS服务器打开一个WinRM连接,以便远程运行Powershell脚本,以便部署Web Deploy包。

有关更多详细信息/步骤教程,您可以参考下面的教程,甚至一些是Web应用程序的示例: