我已经在web开发行业工作了大约5年,一直在开源环境中工作。大部分是apache、mysql和php,带有一点红宝石,使用git进行版本控制。但是最近开始了一项工作,开发完全是C# ASP.NET MVC。
虽然我能够很容易地掌握语言等等,但我团队的其他成员(拥有比我更多的MS开发经验)在发布和部署最终站点时都有不同的思维方式,特别是将来的变化。
与其他开发商的心态是,一旦一个网站已经公布,它是最终的。不能再对网站做任何改动,当我问到背后的原因时,答案一直是太危险、费时或困难。
根据我过去的经验,更新站点只是上传更改后的文件的一种情况,如果稍加更改,通常会非常快速,或者在进行更新时将站点置于维护模式。
我们最近发布了一个MVC站点,业务联系我们更新了一些文本,并添加了一个新的pdf文档的链接。我的其他团队很快就说,这不应该做,因为网站现在是活的,不应该被修改。如果我没有成为微软的开发人员,我会错过什么吗?
在生产中,反对对一个活的web应用程序进行修改的理由是什么?对于.NET开发人员来说,这种心态是独一无二的吗?
我真的很想了解这种心态,以及它在微软开发环境中是否合理,或者这是否只是一种旧的思维方式。
注意:我们使用TFS进行版本控制,并使用发布配置文件来确定站点的部署位置(UAT或生产)。
发布于 2014-05-12 11:15:19
编译了ASP.NET MVC应用程序。这意味着你不能像PHP网站那样上传修改过的文件。这也意味着当您开始更新站点时,当前用户将被丢弃(例如,失去他们的会话)。
除了简单地更新文件之外,还有更多的工作要做:您必须处理:
/bin中保留旧DLL,同时添加具有不同名称的新DLL:应用程序可能仍然使用旧DLL,这会造成更改应用程序代码的疯狂情况,但应用程序的行为保持不变。处理应用程序的旧版本和新版本之间的转换是一项艰巨的任务。几年前,这是一个问题,一个新版本的应用程序已经准备就绪,但系统管理员需要几天或几周才能部署。DevOps解决了这个问题,但要求开发人员(通过代码或配置)描述将承载应用程序的系统。
应用程序越大,这项任务就越复杂。
编译后的应用程序只是强制/鼓励更早地自动化流程。
业务联系我们更新一些文本,并添加到一个新的pdf文件的链接。我团队的其他成员很快就说,这不应该做,因为这个网站现在是直播的。
海事组织,这种拒绝没有真正的技术原因;他们只是想避免这样做,因为如果自动化不好,这项任务就容易出错。
通常发生的情况是:
如果现在更新新版本,您将回到第一步,并且可能需要几天时间才能恢复正确的配置。由于该网站是实时的,因此应不惜一切代价避免这种情况。
发布于 2014-05-12 11:37:31
您有项目经理、开发经理或其他开发人员吗?
您无法在go live之后进行部署,这是毫无意义的。
当然,这些改变需要计划,费用和资源,但说“不”是胡说八道。
发布于 2014-05-13 03:38:03
您所看到的行为的主要原因是这些类型的更改容易出错。手动更新应用程序会导致忘记和失去同步。您仍然应该能够完成新的版本(而且应该很容易),而不是部分的补丁。
部分更新(如在活动站点上更改某些CSS或文本)可能导致跳过测试、测试或阶段环境不同步,甚至不将代码提交到源代码管理。如果这是代码更改,您甚至可以在没有恢复计划的情况下破坏活动站点。
在.NET中,由于代码是编译的,因此可能会出现其他问题,例如加载时间过长和用户会话丢失。这些问题可以减轻我的交换到一个温暖的环境和使用进程外的会话状态。但是,除非您希望每次执行部署时都考虑这些类型的问题和应用程序特有的其他问题。那么修补现场网站是个坏主意。
随着您的应用程序的大小和人员的来来去去,这可能从一个不便转移到一个严重的问题。因此,为了使事情更安全,我们遵循这样的规则:更新一个实时网站,它必须是一个完整的部署,而不是只是修补。
如果您还没有自动化您的部署(这使得遵循规则变得简单和快速)。新的部署通常是在现有版本的旁边进行的,然后您的网站只是指向您想要的版本的指针(使这一点更加复杂)。
1.0.0 // Old version you can roll back to
2.0.0 <-- IIS points here实际上,出于类似的原因,我认为所有的部署都应该是自动化的也包括非.NET部署。一旦您开始自动化部署,您就可以保证它们始终是快速可靠的。
https://softwareengineering.stackexchange.com/questions/238767
复制相似问题