.NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)...
Jenkins测试环境到生产环境的一键部署策略(Windows)
一、前言
前面我们已经初步实现了开发集成环境、测试环境的持续集成(自动化构建、自动化测试、自动化部署)。但生产环境自动化部署迟迟没有推进。其原因主要在以下几个方面:
- 尚未实现部署之前的自动化备份
- 尚未实现部署出现问题后的自动化回滚
- 由于之前采用FTP上传部署需要生产环境开放FTP端口存在安全性问题且FTP会因为各种的网速问题,导致站点瞬间挂掉
只要解决以上三个问题,我们就可以初步实现生产环境的自动化部署。
系列文章
.NET实现持续集成与自动化部署1-Jenkins
.NET实现持续集成与自动化部署2-NuGet
.NET实现持续集成与自动化部署3-测试环境到生产环境策略
二、实现思路
- 利用Jenkins分布式的特性,其中Jenkins服务器作为Master服务器,将生产环境(可以一台也可以多台服务器)作为Jenkins集群中的一台Slave服务器。
- 测试环境应该模拟和生产环境的配置和编译版本保持是Release状态,且功能已经满足预期发布需求。
- 通过文件复制插件,复制测试环境上的部署文件到生产环境上的jenkins工作空间。
- 通过批处理处理不需要覆盖的文件或者临时要修改的配置等。
- 利用rar备份生成环境上即将要覆盖的文件,注意命名上遵循一定规律:项目-文件夹-{BuildID}.bak.rar或日期-项目-文件夹-{BuildID}.bak.rar。
- 利用批处理进行从jenkins工作空间上把文件复制到站点上,常用命令:xcopy。
- 若生产环境程序出现问题,由项目经理和运维人员决定是紧急修复bug还是启用回滚,回滚则采用批处理命令将备份的文件压缩回生产环境站点下的目录内。
通过以上策略可以实现测试环境到生产环境的一键部署,实现了部署前的自动化备份,出现问题的自动化回滚,利用Jenkins Master-Slave特性解决了需要开放FTP端口的的问题,并且将先在测试站点测试好的文件,复制到正式站点上的一个缓冲区,进行预热配置,之后在本机进行文件替换,速度是相当的快,解决了FTP上传过程中网络问题导致站点挂掉的问题。
缺陷与问题:
- 生产环境需作为Jenkins 集群中的一台服务器并承担一部分构建任务,但通过配置此问题可忽略不计
- 生产环境需安装JDK并开启一个Java服务
- 待发现
三、生产环境拓扑图
四、所需Jenkins插件
- Copy data to workspace plugin 插件
- Copy Artifact Plugin
- Node and Label parameter plugin 插件
五、实现步骤
- 搭建slave
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.1 参数化配置选择Slave构建
Jenkins 新建自由风格的软件项目
参数化构建-->添加参数-->选择node
若没有此参数安装Node and Label parameter plugin 插件
参数化配置可按下图进行,也可根据需要自行配置
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插件
配置说明:
- 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内增加构建后操作如下图:
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是一个持续集成工具,其功能非常强大,可以帮助我们做自动构建、自动测试、自动发布等等,它根据不同的需求实现各种各样的功能,它可以最大幅度的减少我们日常工作中重复性的工作。以上仅仅是我根据当下所需研究的一种使用策略,可能有漏洞,也可能存在问题,但如果不愿意尝试着去改进现有流程,去接受新的东西,那么我们永远不会进步。而我对其使用的了解也不过是九牛一毛,大家可以根据需求研究制定自己的使用策略。
最后希望大家:即使搬砖,也要搬出艺术感!做一个有追求的搬砖者!
.NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)...相关推荐
- 半天搭建你的Jenkins持续集成与自动化部署系统
前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛.由于我们所做的系统业务复杂,系统庞大,设计到多个系统之间的合作,而核心系统更是采用分布式系统架构,由 ...
- 持续集成之“自动化部署”
转自:http://www.infoq.com/cn/news/2011/07/ci-automatic-deployment 在前文<依赖管理>中,我们讨论了如何在代码变得庞大,组件增多 ...
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover【毕成功的博客】 - 51CTO技术博客...
Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover[毕成功的博客] - 51CTO技术博客
- Perforce研讨会回顾 | Helix Core在芯片行业的应用实例:芯片项目的版本控制、持续集成及自动化
2023年2月28日,龙智联合全球领先的数字资产管理和DevSecOps工具厂商Perforce共同举办Perforce on Tour网络研讨会--"赋能'大'研发,助力'快'交付&quo ...
- 黎想深度访谈腾讯顶级产品经理的进阶之路——第三篇《需求》
16个月精心打磨,9位顶级产品专家研讨提炼,凝聚腾讯产品经验的八集八分钟产品课分别从用户.定位.需求.时机.匠心.危机.合作.商业角度出发,还原产品背后的故事,分享给你腾讯产品的心法.艺形艺意工作室创 ...
- 【备品备件】测试环境,生产环境以及打包部署
部署配置 测试环境和生产环境的端口不一样,因此配置文件有些不同 测试环境 后端:application.yml的端口改为8719, application-druid.yml改为测试库spare3 前 ...
- Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新项目正 ...
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
摘抄自:http://www.tuicool.com/articles/VJbeie 前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可 ...
- 持续集成与自动化部署 - jenkins sonar代码质量管理平台 部署和基础使用(五)...
1 jenkins 安装参考链接 1.1 安装jenkins [root@test-node3 ~]# yum install -y java-1.8.0 [root@test-node3 ~]# c ...
最新文章
- 关于Action返回结果类型的事儿(下)
- good way for university professors accumulating the citation
- 硬盘安装RHEL方法
- java连接各数据库的语句
- dhcp只能分配与路由器相同网段么_路由器的桥接详解
- display内联属性
- php 预处理 防注入,PHP防止sql注入小技巧之sql预处理原理与实现方法分析
- Cannot resolve table 't_daily'
- Linux 下编译安装OpenCV【转】
- 华为od德科面试数据算法解析 2022-3-20 关于员工工号问题
- 希尔伯特空间巴拿赫空间空间上的翻译
- Linux 加密与解密应用
- Windows系统使用Procrun部署SpringBoot的JAR包
- 2022年流动式起重机司机考试题及在线模拟考试
- canvas——绘制解锁图案
- 什么情况下JVM内存中的一个对象会被垃圾回收
- Java时间转换成ISO8601格林威治天文台的标准时间
- 计算机辅助布置设计软件的两种类型,桥梁计算机辅助设计软件WYCAD介绍
- 解决安卓手机使用太极阴升级微信7022版本后黑屏无法打开问题2021.1.10
- IDP-个人发展计划