.NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)

Jenkins测试环境到生产环境的一键部署策略(Windows)

1、前言

    前面咱们已经初步实现了开发集成环境、测试环境的持续集成(自动化构建、自动化测试、自动化部署)。但生产环境自动化部署迟迟没有推动。其缘由主要在如下几个方面:html

  • 还没有实现部署以前的自动化备份
  • 还没有实现部署出现问题后的自动化回滚
  • 因为以前采用FTP上传部署须要生产环境开放FTP端口存在安全性问题且FTP会由于各类的网速问题,致使站点瞬间挂掉

只要解决以上三个问题,咱们就能够初步实现生产环境的自动化部署。node

系列文章

.NET实现持续集成与自动化部署1-Jenkinswindows

.NET实现持续集成与自动化部署2-NuGet安全

.NET实现持续集成与自动化部署3-测试环境到生产环境策略服务器

2、实现思路

  1. 利用Jenkins分布式的特性,其中Jenkins服务器做为Master服务器,将生产环境(能够一台也能够多台服务器)做为Jenkins集群中的一台Slave服务器。
  2. 测试环境应该模拟和生产环境的配置和编译版本保持是Release状态,且功能已经知足预期发布需求。
  3. 经过文件复制插件,复制测试环境上的部署文件到生产环境上的jenkins工做空间。
  4. 经过批处理处理不须要覆盖的文件或者临时要修改的配置等。
  5. 利用rar备份生成环境上即将要覆盖的文件,注意命名上遵循必定规律:项目-文件夹-{BuildID}.bak.rar或日期-项目-文件夹-{BuildID}.bak.rar。
  6. 利用批处理进行从jenkins工做空间上把文件复制到站点上,经常使用命令:xcopy。
  7. 若生产环境程序出现问题,由项目经理和运维人员决定是紧急修复bug仍是启用回滚,回滚则采用批处理命令将备份的文件压缩回生产环境站点下的目录内。

经过以上策略能够实现测试环境到生产环境的一键部署,实现了部署前的自动化备份,出现问题的自动化回滚,利用Jenkins Master-Slave特性解决了须要开放FTP端口的的问题,而且将先在测试站点测试好的文件,复制到正式站点上的一个缓冲区,进行预热配置,以后在本机进行文件替换,速度是至关的快,解决了FTP上传过程当中网络问题致使站点挂掉的问题。网络

缺陷与问题:运维

  1. 生产环境需做为Jenkins 集群中的一台服务器并承担一部分构建任务,但经过配置此问题可忽略不计
  2. 生产环境需安装JDK并开启一个Java服务
  3. 待发现

3、生产环境拓扑图

image

4、所需Jenkins插件

  1. Copy data to workspace plugin 插件
  2. Copy Artifact Plugin
  3. Node and Label parameter plugin 插件

5、实现步骤

  1. 搭建slave

1.1 Jenkins系统管理-->管理节点-->新建节点
!image
image分布式

1.2 输入节点名称,next,配置以下图
image工具

其中,有以下几点须要注意:测试

  • 【# of executors】根据CPU的个数来填写数量

  • 【远程工做目录】这个就是用来存放master到slave时,存放的临时目录,如slave的服务软件也会放在此,而且会以每一个job名称来区分开

  • 【用法】只须要选择【只容许运行绑定到这台机器的Job】这种模式下,Jenkins只会构建哪些分配到这台机器的Job。这容许一个节点专门保留给某种类型的Job。例如,在Jenkins上连续的执行测试,你能够设置执行者数量为1,那么同一时间就只会有一个构建,一个实行者不会阻止其它构建,其它构建会在另外的节点运行。经过这个配置生产环境就能够仅作本身的构建。

  • 【启动方式】只须要选择【Launch agent via Java Web Start】,以服务的方式启动,应用最广且最好配置,其他的都太复杂,不建议使用。注意:2.x版本的默认没有这个选项,须要单独开启。其他的基本按照上面默认选择便可。

Launch agent via Java Web Start开启方式:

Jenkins-->系统管理-->Configure Global Security-->Agents-->修改成随机选取
image
image

image

1.3 点击保存后,master上已经配置好节点,那么接下来就是到节点的服务器上安装slave的服务:
点击右侧列表的节点服务器,此时节点并未连通。
image
进入详情页面,会提示你如何安装服务:
image

注意:因为Slave服务为Java服务,所以Slave服务器上需安装JDK

当Slave服务器上出现如下服务时表明安装并链接成功
image
此时回到Jenkins 服务器上查看状态已经链接上
image

说明:这里只介绍基于现有需求的一种策略,关于Jenkins Master-Slave链接机制与原理很少作介绍,网上关于这方面的介绍也不少,你们能够自行搜索。

  1. 建立生产环境自动化部署任务
    2.1 参数化配置选择Slave构建
    Jenkins 新建自由风格的软件项目
    image
    参数化构建-->添加参数-->选择node
    image
    若没有此参数安装Node and Label parameter plugin 插件
    参数化配置可按下图进行,也可根据须要自行配置
    image

2.2 文本复制
文本复制可选择两个插件

Copy data to workspace plugin 插件

能够复制Jenkins Master服务器的文件到Slave工做空间内
缺点:不支持参数化
Copy Artifact Plugin 插件

能够实现Jenkins Slave-Slave Master-Slave之间的复制,能够将一个Job构建后的生成物复制到当前工做空间内
缺点:需再要复制的Job内内配置Archive the artifact

能够根据所需自行选择插件,这里为了可以参数化咱们选择Copy Artifact Plugin插件
image
配置说明:

  • Project name:要Copy的项目名称,这里可使用参数化
  • Which build:选择那一次构建后的产物,通常能够选择Latest successful build
  • Stable build only:是否选择稳定的构建
  • Artifacts to copy:要Copy的文件,能够进行规则匹配,如Test/**/*,即Test文件夹下全部文件
  • Artifacts not to copy:根据规则排除某些文件
  • Target directory:本地工做空间的那个文件夹内
  • Parameter filters:这里没用到,用到的话,能够本身看说明

注意:这里须要前置Job配置

在要复制的Job内增长构建后操做以下图:
image

2.3 自动化备份
填写备份的批处理,这里可使用WindowsRAR的压缩命令,因此若是要用RAR的时候,确保机器上已经安装WindowsRAR。注意名称必需要有规则且每次构建不能重复,所以可使用项目名称+BuildID或者日期+项目名称+BuildID
image

//自动备份批处理命令
start c:\"Program Files"\winrar\rar.exe a -k -r -s -m1
-ag{HS.Shop.My-%BUILD_ID%.bak}  {要备份到的文件夹} {要备份的文件夹}

2.4 覆盖站点目录下的文件
备份完成后将Jenkins工做空间下的文件复制到站点目录下,此时必须保证发布包已经排除掉了不须要覆盖的文件,而且是稳定可用的版本。批处理命令可采用xcopy命令。关于xcopy命令的使用能够自行百度
image

xcopy  {slave工做空间上的项目文件夹} {要复制到替换的文件夹}  /Y/E

到了这一步就完成了生产环境的自动化部署的任务配置。点击构建便可完成测试环境到生产环境的一键部署。此时若程序出现问题能够采用紧急修复或者自动化回滚。

  1. 建立生产环境自动化回滚任务

3.1 一样新建一个自由风格的软件项目
这里能够配置两个构建参数

1.回滚哪个项目的哪一次构建

2.回滚哪一台服务器的构建(能够多台)

参数化配置可见下图
image

3.2 自动化回滚批处理
image

Setlocal enabledelayedexpansion
set "projectKey=ChioceBuild"
set "bakUrl=D:\HS.Shop.Bak\HS.Shop.My\"  //备份文件的路径
set url="%ChioceBuild%"                  //参数
set "rollbackUrl=D:\"
set "projectName="
set "buildID="
set url=%url::=/%
set url=%url:///=/%
set url=%url://=/%

for /f "tokens=1,2,3,4,5,6,7,8* delims=/" %%a in (%url%) do (
 set "projectName=%%g"
 set "buildID=%%h"
)
set projectName=!projectName:%projectKey%=!
set "fileName="

for %%a in (%bakUrl%%projectName%-%buildID%.bak.rar) do (
 set "fileName=%%a"
)
c:\"Program Files"\winrar\rar.exe x -ep2 -o+- %fileName% %rollbackUrl%

点击保存便可完成自动化回滚任务的创建,点击构建选择参数便可进行回滚。

6、结束语

    Jenkins是一个持续集成工具,其功能很是强大,能够帮助咱们作自动构建、自动测试、自动发布等等,它根据不一样的需求实现各类各样的功能,它能够最大幅度的减小咱们平常工做中重复性的工做。以上仅仅是我根据当下所需研究的一种使用策略,可能有漏洞,也可能存在问题,但若是不肯意尝试着去改进现有流程,去接受新的东西,那么咱们永远不会进步。而我对其使用的了解也不过是九牛一毛,你们能够根据需求研究制定本身的使用策略。     最后但愿你们:即便搬砖,也要搬出艺术感!作一个有追求的搬砖者!

相关文章
相关标签/搜索