前面咱们已经初步实现了开发集成环境、测试环境的持续集成(自动化构建、自动化测试、自动化部署)。但生产环境自动化部署迟迟没有推动。其缘由主要在如下几个方面:html
只要解决以上三个问题,咱们就能够初步实现生产环境的自动化部署。node
.NET实现持续集成与自动化部署1-Jenkinswindows
.NET实现持续集成与自动化部署3-测试环境到生产环境策略服务器
经过以上策略能够实现测试环境到生产环境的一键部署,实现了部署前的自动化备份,出现问题的自动化回滚,利用Jenkins Master-Slave特性解决了须要开放FTP端口的的问题,而且将先在测试站点测试好的文件,复制到正式站点上的一个缓冲区,进行预热配置,以后在本机进行文件替换,速度是至关的快,解决了FTP上传过程当中网络问题致使站点挂掉的问题。网络
缺陷与问题:运维
1.1 Jenkins系统管理-->管理节点-->新建节点
!
分布式
1.2 输入节点名称,next,配置以下图
工具
其中,有以下几点须要注意:测试
【# 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-->修改成随机选取
1.3 点击保存后,master上已经配置好节点,那么接下来就是到节点的服务器上安装slave的服务:
点击右侧列表的节点服务器,此时节点并未连通。
进入详情页面,会提示你如何安装服务:
注意:因为Slave服务为Java服务,所以Slave服务器上需安装JDK
当Slave服务器上出现如下服务时表明安装并链接成功
此时回到Jenkins 服务器上查看状态已经链接上
说明:这里只介绍基于现有需求的一种策略,关于Jenkins Master-Slave链接机制与原理很少作介绍,网上关于这方面的介绍也不少,你们能够自行搜索。
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插件
配置说明:
注意:这里须要前置Job配置
在要复制的Job内增长构建后操做以下图:
2.3 自动化备份
填写备份的批处理,这里可使用WindowsRAR的压缩命令,因此若是要用RAR的时候,确保机器上已经安装WindowsRAR。注意名称必需要有规则且每次构建不能重复,所以可使用项目名称+BuildID或者日期+项目名称+BuildID
//自动备份批处理命令 start c:\"Program Files"\winrar\rar.exe a -k -r -s -m1 -ag{HS.Shop.My-%BUILD_ID%.bak} {要备份到的文件夹} {要备份的文件夹}
2.4 覆盖站点目录下的文件
备份完成后将Jenkins工做空间下的文件复制到站点目录下,此时必须保证发布包已经排除掉了不须要覆盖的文件,而且是稳定可用的版本。批处理命令可采用xcopy命令。关于xcopy命令的使用能够自行百度
xcopy {slave工做空间上的项目文件夹} {要复制到替换的文件夹} /Y/E
到了这一步就完成了生产环境的自动化部署的任务配置。点击构建便可完成测试环境到生产环境的一键部署。此时若程序出现问题能够采用紧急修复或者自动化回滚。
3.1 一样新建一个自由风格的软件项目
这里能够配置两个构建参数
1.回滚哪个项目的哪一次构建
2.回滚哪一台服务器的构建(能够多台)
参数化配置可见下图
3.2 自动化回滚批处理
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%
点击保存便可完成自动化回滚任务的创建,点击构建选择参数便可进行回滚。
Jenkins是一个持续集成工具,其功能很是强大,能够帮助咱们作自动构建、自动测试、自动发布等等,它根据不一样的需求实现各类各样的功能,它能够最大幅度的减小咱们平常工做中重复性的工做。以上仅仅是我根据当下所需研究的一种使用策略,可能有漏洞,也可能存在问题,但若是不肯意尝试着去改进现有流程,去接受新的东西,那么咱们永远不会进步。而我对其使用的了解也不过是九牛一毛,你们能够根据需求研究制定本身的使用策略。 最后但愿你们:即便搬砖,也要搬出艺术感!作一个有追求的搬砖者!