如何允许多种类型的部署?

l--*_*''' 17 .net c# visual-studio visual-studio-2015 visual-studio-2017

在我寻找生命意义时,我偶然发现了一篇博文,其中提到您的部署策略不是您的架构,它只是一个实现细节,因此我们需要设计允许不同的部署模式,无论您是否想要将系统部署到1节点或多节点或其他类型的结构.

最新版本的Visual Studio是否提供某种灵活性(除了azure)以便能够以各种策略部署服务?

例如,假设我有一个解决方案

    Acme Solution
    --Acme Startup Proj
    --Acme Service A.csproj
    --Acme Service B.csproj
    --Acme Service C.csproj
Run Code Online (Sandbox Code Playgroud)

我希望能够将整个解决方案部署为1个解决方案,或者我希望能够部署3个单独的二进制文件,每个服务一个.

AcmeServiceA.exe
AcmeServiceb.exe
AcmeServicec.exe
Run Code Online (Sandbox Code Playgroud)

Visual Studio在部署配置的灵活性方面为您提供了什么?

Jim*_*mmy 7

部署技术会因应用程序的构建技术而异.为了举个例子,我假设我们正在处理Web服务或站点.

您已指定了两个部署方案:部署单个项目(例如微服务)和部署所有项目(完全部署).我们从小开始......

部署单个项目

计划的主要是每个可部署的原子(这可能是一个项目或服务+数据库后端......一些小到你不希望将它分成较小的部署的东西).

对于Web项目(可以是Web API项目或其他类型),Visual Studio的内置选项通常可以概括为:WebDeploy,Azure,现在使用.NET Core,Docker镜像.我不打算详细介绍每个细节,因为这些是不同的问题.但是我可以参考一些细节供你研究它们听起来是否有趣(我在WebDeploy概念上比较熟悉,所以我会参考很多;但我并不是在鼓吹或反对它).

例如,如果您使用WebDeploy,则可以让每个项目生成WebDeploy包.(再次,看看这个有关如何做的更多细节).可以精心设计此程序包以包含文件有效内容(站点/服务文件)以及数据库有效内容或使用WebDeploy提供程序模型的其他子主题.Visual Studio对这种情况有相当不错的支持,并且有相关文档.

或者您可以生成Docker镜像.根据我的理解(以及缺乏Docker的经验),如果您想部署Web服务和数据库,它们应该位于不同的容器中.你很快就会发现自己在VS之外建造这些.这不是一件坏事,一旦你掌握了它,Docker听起来就非常灵活; 但是你要离开IDE了.

无论哪种方式,现在您可以部署原子包.这很容易.

部署解决方案

所以,你有很多这些原子部署包.你怎么把它们全部卷起来?

那么,在这一点上VS并没有为你提供很多东西.并且很难证明VS应该在这里做些什么.几乎每个组织都会提出略有不同的规则.您是从CI部署的吗?您是否创建了包并将它们部署到发布管道中的不同环境中?或者您是在云和热交换环境(如Azure部署插槽)中执行此操作?

VS原生解决方案必须是极其可配置的(因此非常复杂),或者它太简单,无法满足大多数客户的需求.(顺便说一句,在VS2010中对WebDeploy的初始支持在第一个方面存在错误.它非常易于配置,对于客户甚至产品团队来说都非常难以绕过所有可能的场景.来源:我是曾几次对该功能进行质量保证.)

实际上,您需要确定部署的方式和时间.您需要一些东西来协调每个部署.

VS通常使用MSBuild编排内容.同样,我并不是在提倡这个作为你的编排平台(我实际上不喜欢它......你的项目配置没问题,但IMO不适合任务管理),如果这是你想要使用的,它可以工作.如果您将它用于Web项目场景,那实际上非常简单.您可以构建解决方案并使用参数/p:PublishOnBuild=true.如果您使用WebDeploy直接发布,那么您已经完成了!如果你正在创建WebDeploy包,那么你仍然需要推送它们,但至少你已经一次创建了它们.

如果您使用的是WebDeploy Packages,则它们将生成用于发布的脚本.有一些传递不同WebDeploy参数的方法,因此您可以重用相同的包(构建输出)来发布到不同的环境.但是,您必须编写自己的脚本以将所有这些组合成一个巨型部署.

同样适用于Docker.您可能会获得一组图像,但您仍然需要一些东西来协调发布所有图像.像Kubernetes这样的工具可以帮助您推出,或者在出现问题时回滚.

还有更多通用的编排平台,如Octopus Deploy.

多么不满意!

是的,对于大规模部署没有开箱即用的解决方案,这很糟糕.但如果有的话,95%的团队都无法工作.VS提供的大部分内容足以让个人或非常小的开发团队将他们的代码提供给他们的服务器.任何规模较大的团队,您都可以在构建适合团队运营方式的系统中获得更好的成绩.有很多工具,在所有情况下都没有完美的工作.找一个适合你的,你会没事的.最后,这一切都归结为推送文件和运行脚本.如果您不喜欢一个系统或工具,可以尝试另一个系统或工具.


Jer*_*son 4

如果您正在寻求 Visual Studio 中改进的部署体验,请查看 Flexera 的 InstallShield Limited Edition 内置解决方案(ISLE,http: //blogs.msdn.com/b/visualstudio/archive/2013/8/15/what- s-new-in-visual-studio-2013-and-installshield-limited-edition.aspx)。对于那些寻求 Visual Studio 安装程序项目中未找到的附加功能的客户来说,ISLE 是一个很好的解决方案,例如 TFS 和 MSBuild 集成、创建新网站的支持和 ISO 19770-2 标记支持等。

VS2015:https://marketplace.visualstudio.com/items? itemName=VisualStudioProductTeam.MicrosoftVisualStudio2015InstallerProjects

VS2017:https://marketplace.visualstudio.com/items? itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects

通过安装和部署项目模板,您可以选择使用安装、Web、CAB 或合并模块项目将解决方案中的所有程序集打包,或者将每个程序集单独打包为微服务:

在此输入图像描述

然后选择包含哪些程序集:

在此输入图像描述