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

migration from Octopus to TFS 2017 - Publishing ASP.NET web sites

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

我们希望放弃 Octopus,改用本地 TFS 2017 的内置发布系统。我们有发布现成工件(网站二进制文件和内容)的构建定义。

有了章鱼,我们在所有服务器上都安装了触手。

Octopus中定义的遗留发布流程是这样的:

  1. 设置 IIS(为站点配置应用程序池的 Powershell 脚本,将虚拟目录映射到绝对路径)
  2. 部署 nuget 包(包包含网站二进制文件和脚本)- 将包含网站的包解包到相关虚拟目录的物理路径
  3. 启用Windows身份验证(调用 Set-WebConfigurationProperty 的单行 powershell 脚本)
  4. 禁用匿名身份验证(再次使用 powershell。)

我不喜欢我们的 Octopus 进程中使用的 Powershell 的数量,并且希望在 TFS 发布定义中最小化 Powershell。

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

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

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

TIA, 斯科特

使用 IIS WinRM tasks would probably the best and easiest way to do it. You can find some good 如何配置的指南。

您需要的基础知识是:

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

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

首先,通过 TFS 构建,您可以使用一些 msbuild 参数,例如 /p:DeployOnBuild=True /p:SkipInvalidConfigurations=true /p:WebPublishMethod=Package /p:PackageLocation=$(Build.ArtifactStagingDirectory) /p:PackageAsSingleFile=true 来生成一个包。

然后在发布定义中使用 Deploy: Windows Machine File Copy task - Copy the Web Deploy package to the IIS servers. Finally use Deploy: WinRM - IIS Web App Deployment - 部署包。此任务 运行 在构建和发布代理 上打开一个 WinRM 连接 到每个 IIS 服务器到远程 运行 Powershell 脚本,以便部署 Web 部署包。

更多detail/step步骤教程,您可以参考以下教程,甚至有些是网络应用程序的示例: