热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Jenkins测试环境到生产环境的一键部署策略(Windows)一、前言前面我们已经初步实现了开发集成环境、测试环境的持续集成(自动化构建、自动化测试、

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

一、前言

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

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

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

系列文章

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

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

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

二、实现思路

  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. 待发现

三、生产环境拓扑图

image

四、所需Jenkins插件

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

五、实现步骤

  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%

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

六、结束语

    Jenkins是一个持续集成工具,其功能非常强大,可以帮助我们做自动构建、自动测试、自动发布等等,它根据不同的需求实现各种各样的功能,它可以最大幅度的减少我们日常工作中重复性的工作。以上仅仅是我根据当下所需研究的一种使用策略,可能有漏洞,也可能存在问题,但如果不愿意尝试着去改进现有流程,去接受新的东西,那么我们永远不会进步。而我对其使用的了解也不过是九牛一毛,大家可以根据需求研究制定自己的使用策略。

    最后希望大家:即使搬砖,也要搬出艺术感!做一个有追求的搬砖者!



推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
author-avatar
文艺犯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有