PS:概要、背景、结语都是日常“装X”,可以跳过直接看自动发布

环境:阿里云SLB、阿里云ECS、IIS7.0、Jenkins、Spring.Net

概要

  公司一个项目从无到有,不仅仅是系统从无到有的过程,也是项目管理流程、运维流程逐步完善的过程,今天主要说说运维方面的,从人肉运维到自动运维,我们搭建了运维平台来实现。运维平台在很多人理解应该是运维来做,不过就像前面文章说过,在很多公司,资源有限的情况下,研发往往是“万能”的,需要承担更多的责任,本文我们主要讲关于Asp.Net自动发布这一块。

背景

  1、新进入一个公司,往往系统已经初具规模,已有成型的框架,但往往由于前期为了赶项目进度或者系统架构规划问题,随着系统功能的不断增加,一些运维方面的问题会越来越突显出来,如:配置管理混乱、站点特殊内容太多且无记录、发布纯人工操作等,发布风险很高,每次发布都提心吊胆,如临大敌;

  2、作为一名想“偷懒”的程序员,自从走向管理岗,就开始为运维自动化的投入争取资源,公司的运维平台搭建基本都是自己做产品经理或者研发。目前我们实现了日志管理、调度管理、站点管理、ECS管理、负载均衡管理、配置管理(目前只是实现了配置分离,下一步会实现配置动态生效)、发布申请管理、自动发布管理、MQ消息队列管理,监控主要是用阿里云自带的,业务异常监控应该算目前比较缺失的一块,以及其他很多都需要完善,但对公司最紧急的基本都已经实现;

  3、在当前Java风行,其他新兴语言慢慢崛起,并且微软自身也推出.Net Core的情况下,.Net的市场份额越来越小,很多公司都开始转Java,包括我目前所在的公司新系统也开始使用Java了。但就算转Java,以前的系统还是需要维护,对于公司来说花最小的代价达到优化的效果就行,转语言不是目的。对于程序员来说,掌握哪一种编程语言本身并不重要,更重要的是编程的思想、系统架构的思维,编程语言只是一种表现形式(作为一名.Net的老兵,最近在准备做Java的容器化,优化Java架构)。

自动发布

  从我加入公司到现在,关于.Net的IIS站点发布大概经历了以下3个阶段:一、手工发布;二、半自动发布;三、系统自动发布;

  一、手工发布

    

    该阶段缺点:

      1、运维人员需要记住相应的代码路径、解决方案、项目名称,站点新建没有标准,导致不同的站点有一些特殊的设置或操作,导致新入职的运维人员需要很长时间才能上手;

      2、需要登录每台服务器修改配置,以及切换IIS站点路径,重启站点,且无法验证是否发布正常,发布工作量巨大,发布效率低,发布风险很高,把问题的发现抛给了用户,每次发布都提心吊胆;

      3、没有统一的平台管理各类信息,导致大部分信息都记录在相应的研发或运维人员脑袋里,每次关键人员离职都是“大地震”,信息孤岛严重;

      4、大部分工作都压在运维人员身上,且大多数时间都在做一些简单重复的工作,不利于运维人员自身的成长,难以留存人员。

  二、半自动发布

    

    该阶段优化内容:

      1、制定IIS站点规范(如:配置与应用分离、增加发布成功测试页、规定特殊项的范围);

      2、运维平台实现IIS站点信息及配置管理(维护站点基本信息、配置信息、特殊项);

      3、运维平台实现阿里云SLB的管理(同步基本信息、添加/移除/刷新ECS状态);

      4、搭建Jenkins持续集成平台,实现预发布环境的站点发布(获取最新代码、生成打包、上传服务器、覆盖文件、重启站点)。

    该阶段缺点:

      1、投产站点发布还是需要运维人员登录到每台服务器里面进行操作,发布工作量大,且人工发布虽然有信息记录,但因为不同运维人员的能力不同,导致发布风险还是很高;

      2、发布准备以及操作发布的时间都比较长,导致发布的前置时间比较长,不利于系统的快速迭代。

  

  三、系统自动发布

    

    该阶段优化内容:

      1、利于IIS的FTP实现发布文件分发到IIS站点的各服务器,并复制到相应的站点目录下;

      2、利于C#类库Microsoft.Web.Administration.dll,实现对IIS的站点管理,如:切换路径、站点重启等,相关代码见:IIS站点管理-IIS站点以管理员身份或指定用户运行

      3、实现IIS站点发布的批量操作,如:从SLB移除ECS、发布配置、发布站点、浏览测试页、从SLB添加ECS、直至成功标记为已发布。

    自动发布相关截图:

      1、创建发布申请:

      

      2、发布操作页面

      

      3、单个站点一键发布

      

      4、批量发布组1同时移除组2

      

结语

  .Net的份额确实是在逐年下降,微软自己开始主推.Net Core,不过对于公司已有的系统,有些并不一定要去花时间重构,能花最小的代价达到能接受的效果对公司才是最划算的;以上很多只是提供了思路,以及关键的实现,如果大家真的需要应用到自己公司的系统,还是需要结合自己公司的情况进行处理。

自动发布-asp.net自动发布、IIS站点自动发布(集成SLB、配置管理、Jenkins)的更多相关文章

  1. 发布ASP.NET网站到IIS

    1.         在Web项目中点击发布网站,如图1所示 图1 2.         选择要发布的路径——>“确定”,如果项目显示发布成功就可以了.如图2所示 图2 3.         打 ...

  2. 使用PowerShell自动部署ASP.NetCore程序到IIS

    Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能.有关于更多PowerShell的信息,可参阅百度词条 接 ...

  3. tfs 2013 利用 web deploy 完成asp.net站点自动发布

    课题起因: 目前我们团队使用visual studio 2013开发asp.net项目, 使用tfs2013 做源码管理, 每天早上手动发布项目文件包,复制到测试服务器的站点文件夹下覆盖老文件,用此方 ...

  4. ASP.NET Core部署系列一:发布到IIS上

    前言: 当构建一个ASP.NET Core应用程序并且计划将其运行在IIS中时,你会发现Core应用程序和之前版本的ASP.NET程序在IIS中的运行方式是完全不一样的.与ASP.NET时代不同,AS ...

  5. Win7 下IIS(7.5)发布 ASP.NET MVC

    操作系统 Win 7 旗舰版 开发工具 VS2015 使用技术 IIS7.5 + MVC4.0 一 . 在IIS上部署程序后出现错误-当前标识(NT AUTHORITY/NETWORK SERVICE ...

  6. Asp.net Core 1.0.1升级到Asp.net Core 1.1.0 Preview版本发布到Windows Server2008 R2 IIS中的各种坑

    Asp.net Core 1.0.1升级到Asp.net Core 1.1.0后,程序无法运行了 解决方案:在project.json中加入runtime节点 "runtimes" ...

  7. 发布 asp.net网站 到本地IIS

    http://blog.csdn.net/jiben2qingshan/article/details/9249139 概述 网站是由一个个页面组成的,是万维网具体的变现形式,关于万维网,网页的方面的 ...

  8. IIS 上发布ASP.NET5

    原文 http://docs.asp.net/en/latest/publishing/iis.html 1.安装HTTP Platform Handler ,这个是必需的,不然无法通过IIS访问AS ...

  9. [ASP.net教程]IIS服务器 远程发布(Web Deploy)配置

    asp.net 网站有三种常用的发布方式:分别是拷贝开发机上发布好的文件到服务器硬盘上.打包成安装程序到服务器上安装.通过Visual Studio 开发平台远程发布到服务器. 在asp.net网站的 ...

随机推荐

  1. java面试题NIO与OIO的区别

    面向流与面向缓冲 Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的. Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方 ...

  2. 三个Python自动化测试高效工具的使用总结

    ##Python语言的特点 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号 ...

  3. antd踩坑:日期选择器的可选日期控制的问题

    有一个需求是日期选择需要加一个日期限制. 于是我兴高采烈的加上去了. // 日期可选判断方法 disabledDateFunc = current => { const { disabledDa ...

  4. js获得url传过来的参数

     function  getParam(url) {                  var arr = url.split('?');   //取?以后                 var a ...

  5. 三面拿杭州研究院50offer:面对这些问题,你都能做到嘛??

    5G的到来证明了互联网行业发展一如既往的快,作为一名开发人员(Java岗)梦想自然是互联网行业的大厂,这次我的一个学员拿到了杭州的一个研究院offer,透露一下,年薪50多万,保底16,在这里分享一拨 ...

  6. freeRTOS内核学习笔记(1)-编程标准

    在开始具体的学习之前,你应该先了解freeRTOS的编程标准.这能够方便你在接下来的阅读中快速的了解一些内容 的基本信息,并方便记忆.此外,良好的编程风格也是工作效率的保障. 你可以在https:// ...

  7. Skill 脚本演示 ycCommonCenterMos.skl

    https://www.cnblogs.com/yeungchie/ ycCommonCenterMos.skl 自动生成一个共质心差分对 Mos ,可以自定布局类型. 回到目录

  8. recv & recvfrom

    #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd, void *buf, size_ ...

  9. ERROR 1054 (42S22): Unknown column 'password' in 'field list'

    解决: update MySQL.user set authentication_string=password('123456') where user='root'; FLUSH PRIVILEG ...

  10. 使用Scrapy编写爬虫程序中遇到的问题及解决方案记录

    1.创建与域名不一致的Request时,请求会报错 解决方法:创建时Request时加上参数dont_filter=True 2.当遇到爬取失败(对方反爬检测或网络问题等)时,重试,做法为在解析res ...