.net网站自动化部署-致两年前的遗留的问题

 

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

.net网站自动化部署-致两年前的遗留的问题

 

 

 

01

还是jenkins

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

.net网站自动化部署-致两年前的遗留的问题

 

 

 

 

.net网站自动化部署-致两年前的遗留的问题

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

.net网站自动化部署-致两年前的遗留的问题

 

 

 

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

.net网站自动化部署-致两年前的遗留的问题

 

 

 

   再接着,安装插件 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.

   操作步骤如下图:

.net网站自动化部署-致两年前的遗留的问题

 

 

 

 

 

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

.net网站自动化部署-致两年前的遗留的问题

 

 

 

 

   在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 表示结束。

  

.net网站自动化部署-致两年前的遗留的问题

 

 

 

 

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

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

.net网站自动化部署-致两年前的遗留的问题

 

 

 

 

  

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

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

  .net网站自动化部署-致两年前的遗留的问题

 

 

 

   

   

  到这里,构建选项就已经配置完成了,开始构建,在解决方案目录生成了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"

 

 .net网站自动化部署-致两年前的遗留的问题

 

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

.net网站自动化部署-致两年前的遗留的问题

 

 

 

 

 

 

 

 

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

  .net网站自动化部署-致两年前的遗留的问题

 

 

 

 

   

04

结语

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

 

 

         I have a dream to be a good programmer。

         .net网站自动化部署-致两年前的遗留的问题

 

 

.net网站自动化部署-致两年前的遗留的问题

上一篇:解决AndroidKiller APK 反编译失败,无法继续下一步源码反编译!


下一篇:jQuery 尺寸、位置操作