博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安全的发布 .NET 应用的改动到产品服务器环境
阅读量:6982 次
发布时间:2019-06-27

本文共 2772 字,大约阅读时间需要 9 分钟。

  当你往生产环境的服务器上布署增量式的变化时,服务器正在运行且一直都是可用的,你有时会看到这样的错误消息“编译错误消息:类型'XXX'同时存在 于……” 有时,你会发现Application_start事件没有启动,虽然你已经装载了类、动态链接库或者web.config配置文件。有时,你会发现静态 变量没有初始化,等等。当你增量式的布署变化到服务器时,有许多奇怪的事情会在网络服务器上发生,这些服务器已经启动并运行了许多周了。因此我想出了简便 的步骤,这些步骤是我们在向在服务器布署增量式的变化时总要做的事情。这些步骤可以确保网站可以被恰当的回收,缓存可以被清理,所有存储在应用层的数据都 被初始化。

  首先,在负载均衡器后面你部署了多个Web服务器。这样,你就可以让其中一台服务器脱离生产环 境,然后对其进行部署和一些脱离生产环境后才能执行的任务,比如重新启动IIS,然后再把这台服务器放回到生产环境。接着你就可以对第二台服务器做同样的 操作,以此类推。这样给客户提供的服务就不会中断。如果你做这一切速度相当快,那么幸运的话客户将不会意识到服务器之间有一些不一致:一些已经是新代码, 一些还是旧代码。只有更改的内容不是很多时,你才可以做到这些。例如,你没有发布完成经过完全修改的UI。这种情况下,一些正好访问已经是最新UI的server1的用户突然看到完全不同的界面,然后刷新下一个页面,它们可能正好访问的是还是旧代码的server2,那么看到的是完全不同于前一次的界面。因此,只有非大量的增加型更改才能这么做。

image

部署的时候,请遵循以下步骤:

  • 把服务器X从负载均衡器组中脱离出来,这样这台服务器就不会有任何服务交互了

  • 停止这台服务器上运行的所有.NET Windows 服务

  • 停止IIS

  • 如果你运行了多个版本的.NET,那么请删除所有.NET版本的临时ASP.NET文件夹。如果你不清楚怎么删除,那么请看。

  • 部署更改的内容

  • 生成你用到的分布式缓冲,比如,Velocity 或者Memcached。

  • 启动IIS

  • 启动这台服务器上的的.NET Windows服务。

  • 点击主要的URL激活这些Web站点。你应当编写一些自动执行的脚本做这些事情。你可以使用tinyget实现点击一些主要的URL,尤其是访问那些需要很长时间才能编译的页面。要实现零代码访问,请阅读我的博文: 。

  • 把这台服务器放回到负载均衡器组里,这样它就可以接收访问了。

以上就是整个操作步骤。此时你应该非常清楚如何部署了,这样也就不会出现意向不到的错误了。你应当把这些步骤打印出来,并把它悬挂在哪些部署人员的桌面上方,这样在部署紧张的时候部署人员就不会忘记该怎么做了。

  手动完成所有这些步骤很冒险。在部署时间紧张的时候,生产环境的部署人员就可能操作失误,从而把服务器搞得一团糟。因此我总是提前编写一个批处理文 件,用它来实现服务器脱离生产环境并为部署代码做一些准备工作,然后再部署完成,服务器激活之后,使用另一个批处理文件把服务器放回到负载均衡交互式轮询 组里。

  通常负载均衡器都被配置为访问web站点的某个网页,如果这个网页返回的是HTTP 200,那么这个服务器就是存活的。如果没有返回HTTP 200,那么负载均衡器就认为这台服务器已经挂死,然后就把这台服务器剔除出轮询组了。例如,假设web站点上存在文件alive.txt,这个文件是负 载均衡器密切关注的文件。如果这个文件被删除,那么这台服务器就会脱离轮询组了。遇到这种情况,你就可以创建批处理文件来完成服务器脱离负载均衡轮询组的 工作,然后等待几秒以确保完成正在运行的请求,接着停止IIS,删除临时性的ASP.NET文件,准备在这台服务器上部署。要做的这些工作如下批处理:

serverout.bat=====================Ren alive.txt dead.txttypeperf "\ASP.NET Applications(__Total__)\Requests Executing" -sc 30iisreset /stoprmdir /q /s "C:\WINDOWS\Microsoft.NET\Framework64\v1.1.4322\Temporary ASP.NET Files"rmdir /q /s "C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files"md "C:\WINDOWS\Microsoft.NET\Framework64\v1.1.4322\Temporary ASP.NET Files"md "C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files"xcacls "C:\WINDOWS\Microsoft.NET\Framework64\v1.1.4322\Temporary ASP.NET Files" /E /G MYMACHINE\IIS_WPG:F /Qxcacls "C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files" /E /G MYMACHINE\IIS_WPG:F /Q

 与上面所做的工作类似,你还应该创建一个批处理文件,用它来启动IIS,激活某些网页,然后把这台服务器放回到负载均衡器轮询组里。

serverin.bat============SET TINYGET=C:\Program Files (x86)\IIS Resources\TinyGet\tinyget.exeiisreset /start"%TINYGET%" -srv:localhost -uri:http://localhost/ -status:200ren dead.txt alive.txttypeperf "\ASP.NET Applications(__Total__)\Requests Executing" -sc 30

 通常总试图自动地完成这样的管理杂务。因为在紧急部署的时候,要做到始终手工正确地完成这些工作是很困难的。

转载:http://www.oschina.net/translate/safely-deploying-changes-to-production-servers?from=20140309

作者:,

出处:开源中国

转载于:https://www.cnblogs.com/jesn/articles/3591198.html

你可能感兴趣的文章
yum安装inxi,出现No package inxi available.Error: Nothing to do的解决方法
查看>>
redis配置文件详解
查看>>
PowerShell删除故障群集节点
查看>>
限制用户多点并发登录之二“脚本”篇
查看>>
一个数组实现两个栈
查看>>
Fedora 27 命令行提示符修改
查看>>
Erlang 简易安装和卸载
查看>>
Windows Server 2012 R2 DirectAccess功能测试(3)—App2服务器安装及配置
查看>>
Shell 十三问学习笔记2
查看>>
Juniper-R&S-BGP(1):一些写在前头的基础知识
查看>>
python flaskfeng封装跨域请求头和封装json格式
查看>>
整理 iOS 9 适配中出现的坑(图文)
查看>>
17款jQuery在线QQ客服代码分享
查看>>
Linux下好用的api工具(同mac下的Dash)
查看>>
【产品日记】51CTO用户中心v1.1发布
查看>>
primesfaces入门 ,配置
查看>>
怎么用js来获取 fileupload中的上传文件的文件名。
查看>>
创建tableview
查看>>
22个所见即所得在线 Web 编辑器
查看>>
CentOS memcached安装和启动
查看>>