又到一年国庆,终于有了难得的几天空闲,计划陪陪媳妇娃子,再把最近阅读的几本相关书总结梳理下。当然,计划总是美好的,于时接到了一个老朋友电话。大意是他搞了一个.net小网站,部署了4个节点,每次更新程序都是手动复制到4个机器,时不时忘记部署,忘记备份之类的问题,不胜其烦,希望我帮忙想个办法。回想2年前,在做无人货架项目时,也有部分是.net项目,当时自己也没能处理这个问题,当时用了webdeploy,效果并不理想,虽然后来几乎没碰过.net了,这个问题依然萦绕心头。既然有时间,有报酬,何不接此机会弥补两前年的遗憾呢,于时满口应承了下来。想想现在都在谈CI/CD, DevOps.. 过程应该会是相当愉悦的,又是小网站,要求也不是那么高。网站结构如下,非常简单。

01

还是jenkins

百度一番,一搜一大把,几乎都是利用jenkins,加上之前有过用jenkins做tomcat自动化部署的经验,心中一阵窃喜,过程真的如预期一般顺畅。于时动手,开始了我们愉悦之旅。jenkins是基于Java开发的一种持续集成工具,于时先安装java环境,配置环境变量(我是直接下载 window版本的 jdk 8)。接着下载window对应的jenkins版本,下载地址点这里,按提示操作,安装推荐插件(安装后也可以插件管理中自行安装),没有注意事项!一波流带走,就来到了欢迎界面。没有任何障碍,感觉半天就可以打卡收工。因为要编译.net程序,需要安装msbuild插件:以次  “Manage Jenkins” -> "Manage Plugins" -> "可选插件", 搜索 MsBuild,点击直接安装。操作如下图。

  接着  “Manage Jenkins” -> "System Configuration" -> "Global Tool Configuration" 中配置 MSBuild,因为MSBuild插件中自带的编译工具可能比较老,建议在本机安装 visual studio 相同版本,直接使用其自带的编译工具。配置如下

  接着,安装git服务,并在 “Manage Jenkins” -> "System Configuration" -> "Global Tool Configuration" 中配置 git 相关参数,配置如下。

  再接着,安装插件 Publish Over SSH。然后在应用程序机器上安装FreeSSHD,用于文件上传和远程执行命名。FreeSSHD 配置过程如下:

   1,添加用户jenkins,

   2,配置telnet, ssh 端口为 23,28;

   3,配置 authentication 目录, 在jenkins服务器,生成ssh key,把公钥文件复制到这个目录,重命名为jenkins,与用户名相同。(使用命令 ssh-keygen -t rsa  生成公钥,私钥 )

   4,配置sftp 目录,为文件上传目录。

  5,以管理员身份运行 FreeSSHd。这个很重要,不然一直提示 auth fail.

   操作步骤如下图:

  接着,在 “Manage Jenkins” -> "System Configuration" -> "Global Tool Configuration" 中配置Publish Over SSH 相关参数,配置如下。

  在jenkins和应用服务上安装 7Z工具,用于压缩和解压。并在环境变量 path 中配置 7Z的安装目录(用于在任意目录执行命令)。到这里系统工具及配置就完成了,接下来开始任务配置。

02

愉悦的构建

环境搭建完成,就开始我们的表演吧。新建任务,名称你随意就好,选择“Freestyle project”类型,点击确定。进入任务配置界面。

  General 配置中,可以选中 Discard old builds 可以配置以天数和build记录数保留数据。

  源码管理中,添加好指定的git地址,及账号密码。以上流程没有任何障碍。

  构建中,添加步骤Execute Windows batch command,用户nuget restore。因为前面已经在jenkins机器上安装了visual stadio ,可以直接使用其自带的nuget 工具。 配置如下图,其中 nuget.bat的内容如下:

   NuGet.Build.Tasks.Console.exe restore VideosGYFileS.sln。其中 NuGet.Build.Tasks.Console.exe 为VS自带的,在path中配置了目录这里可以直接运行。(这个命令是在解决方案根目录执行的。),命令最后为exit 0 表示结束。

  

    接着添加步骤 Build a Visual Studio project or solution using MSBuild,选择第一步中添加的 MSBuild 配置,如下图,其中编译参数为:

  /t:Rebuild    /property:Configuration=Release;DeployOnBuild=true;TargetFrameworkVersion=v4.6。

  

  接着添加步骤Execute Windows batch command,用于打包编译后的文件,方便后面上传。压缩时需要排除一些配置文件,配置如下图,compress.bat文件内容如下:

    7z a  deploy.zip .\PrecompiledWeb\Web\* -xr!upload -xr!logs -x!web.config。 (.\  表示打包时去除前缀, -xr! 表示排除目录,-x! 表示排除文件)

  

  

  

  到这里,构建选项就已经配置完成了,开始构建,在解决方案目录生成了deploy.zip文件。那说明已经成功了70%了。

03

完美的构建后操作

构建完成,接下来就是把文件上传到目标服务器了。这就是要用到我们前面配置的  Publish Over SSH插件了。 添加构建后步骤,选择Send build artifacts over SSH。并添加第一步中创建的 应用服务器。多个服务器,可以添加多个server。要传输的文件为构建步骤中生成的文件 deploy.zip,上传后要执行的命令为:cmd.exe /c "d: && cd wwwroot && backup.bat"  中  backup.bat 完成文件备份以当前时间生成备份文件放到 backup文件夹中。文件内容如下;

set vardate=%date:~0,4%%date:~5,2%%date:~8,2%
set h=%time:~0,2%
# 格式化小时,如果小时10,补0,不然会有空格

set h=%h: =0%
set otime=%h%%time:~3,2%%time:~6,2%
# 备份文件格式 YYYYMMddHHmmss.zip

set filename=%vardate%%otime%.zip
# 备份原文件
7z a %filename% .\gyapp\* -x!deploy.zip -xr!upload -xr!logs
# 移动文件到backup 文件夹
move %filename% .\Backup
# 解压文件
7z x deploy.zip -aoa -o"D:\wwwroot\gyapp"

 

  最后来一张构建成功的截图。

   到这里所有配置就完成了,如果顺利的话,自动化部署就完成了。鉴于本人能力问题,自到第79次构建,才真正愉快的左打收工了。没错,是79次!

  

04

结语

文章到这里,我只想说,这个过程真的不怎么愉悦。整个过程需要用到方方面面的知识,比如构建过程,环境变量配置,编写bat文件等 。也有很多异常问题,比如sshkey 版本问题,bat中时间格式问题等等。也要用到一些工具软件,比如7Z,FreeSSHD,jenkins。再者也有很多细节要考虑,比如备份文件,排除文件等。再有前面说的,百度一下,一搜打把的文章,大部分并无太多用处,很多都只是demo。比如,大部分都有说所到用ftp,但是无法支持子目录传输。以上种种问题,多次要奔溃放弃,怎奈受人之托,忠人之事,还好媳妇一直鼓励,并带着大宝小宝玩耍。最后断断续续用了几天时间,整体来说还是痛苦并快乐着。想着过程中那么问题,就想着整理成文,希望有需要的人看到本文,真的可以半天搞定。

I have a dream to be a good programmer。

.my_title { max-width: 100%; box-sizing: border-box; min-height: 1em; text-align: center; overflow-wrap: break-word !important; color: rgba(26, 173, 25, 1); font-size: 24px; word-wrap: break-word !important }

.net网站自动化部署-致两年前的遗留的问题的更多相关文章

  1. 使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署

    老早就想写这个话题了,今天正好有机会研究了一下 git 的自动化部署.最终做到的效果就是,每当有新的 commit push 到 master 分支的时候,就自动在测试/生产服务器上进行 git pu ...

  2. [转]基于AWS的自动化部署实践

    作者 徐桂林 发布于 2014年1月22日 -------------------------------------------------------------------- 1. 背景 在过去 ...

  3. 基于 Node.js 的服务器自动化部署搭建实录

    基于 Node.js 的服务器自动化部署搭建实录 在服务器上安装 Node.js 编写拉取仓库.重启服务器脚本 配置 Github 仓库的 Webhook 设置 配置 Node.js 脚本 其他问题 ...

  4. 利用Powershell在IIS上自动化部署网站

    本文主要讲如何通过Powershell在IIS上自动化部署ASP.NET网站,而不涉及Powershell的基本语法,如果没有Powershell基础的同学也可以把本文作为学习Powershell的基 ...

  5. fabric自动化部署django

    使用fabric部署django应用 使用fabric部署django应用 本文是我的网站易读中文网自动化部署的脚本实现,以下代码在ubuntu和debian中测试通过 由于网站使用的是python技 ...

  6. CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  7. Web应用程序与Web网站及部署在IIS中

    在Visual Studio可以创建 Web 应用程序项目或网站项目.通过选择 新建项目 或 打开项目 创建或打开一个 Web 应用程序项目在Visual Studio 文件 菜单. 通过选择 新建网 ...

  8. 自动化部署方案CICD

    自动化部署方案   由于来来也的时间不久,可能对现有的部署情况不是很了解,以下是个人对POC自动化部署的设计方案. 自动化部署优点 降低成本,提高生产力,高可用,更可靠,性能优化   与gitlab持 ...

  9. 使用 Fabric 自动化部署 Django 项目

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在上一篇教程中,我们通过手工方式将代码部署到了服务器.整个过程涉及到十几条命令,输了 ...

随机推荐

  1. Linux下Vim常用操作

    linux下Vim的常用操作 linux ​ 首先\(ctrl+Alt+t\)打开小框框 ​ \(./\):相当于手机上的\(home\)键 ​ \(ls\):当前文件夹的东东 ​ \(mkdir\) ...

  2. ios bug 分析

    ios中线上或者内部测试bug统计收集有两种方法: 1)使用第三方bug收集 1.bugHD 来源http://bughd.com/doc/ios-customize 2.bugtags 来源http ...

  3. 转载:MYSQL数据库三表联查的SQL优化过程

    地址:https://database.51cto.com/art/202002/609803.htm 作者用了三张有设计缺陷的表做例子,使得优化效果空前,优化手段仅为拨乱反正和加索引,此行可为一哂.

  4. Tomcat三实例cluster多播方案共享session再配置

    昨天已经将两实例cluster多播方案共享Session配置成功,其中的关键就在于server.xml中,engine->channel->receiver节点中address得写成自己的 ...

  5. RocketMQ生产部署架构如何设计

    前言 看了我们之前的文章,相信小伙伴们对RocketMQ已经有了一个初步的了解,那么今天我们就来聊一聊具体如何来设计一套高可用的生产部署架构. 在聊如何设计这套架构的同时,我们再补充一些之前没提到的知 ...

  6. ThinkPHP6.0 模型搜索器的使用

    搜索器用于封装查询条件表达式,必须在模型中定义,只有使用模型操作数据时才能用搜索器.调用搜索器时使用的是数据表字段,可以不用定义搜索器方法,默认是 = 条件:如果不是数据表字段,必须定义对应的搜索器方 ...

  7. odoo10同一模型的不同视图不同群组权限控制

    先描述下需求: 一个模型定义两个calendar视图,其中A视图G1群组可以CRUD操作,但是不显示特殊字段spec_field,对于B视图G1群组只能查看,G2群组只能修改其中的特殊字段spec_f ...

  8. 理解C#中的ExecutionContext vs SynchronizationContext

    原文:https://devblogs.microsoft.com/pfxteam/executioncontext-vs-synchronizationcontext/ 作者:Stephen 翻译: ...

  9. 关于CountDownLatch、CyclicBarrier和Semaphore

    这次工作使用CountDownLatch来将异步的通信改成同步 扩散了解下其他两种 Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中 ...

  10. java identityHashCode 和 hashCode

    当类并没有重写Object#hashCode()时, 对于 System.identityHashCode(Object) 和 Object#hashCode() 的结果是一致的; 但对于类似Stri ...