Jenkins实现生产环境部署文件的回滚操作(Windows)

摘要:
由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具。具体的实现请参考:http://www.cnblogs.com/EasonJim/p/6062690.html以上为部署生产环境的相关操作,在每一次都会生产一个buildid,而备份文件又是项目名+buildid的形式,实现思路如下:1、jenkins新建项目用于指定的项目进行回滚。

由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具。

既然有回滚操作,那么就会有部署操作;要实现回滚,先要实现部署的操作,我在jenkins搭建了一键从测试环境发布到正式环境的工具,部署的大致思路如下(详细的操作点这里,有详细节点配置和部署配置):

前提:安装jenkins的环境为master,每一个生产环境为slave,slave是实时连接到master的。

1、测试环境上使用了CCNET进行每次的代码变更编译部署,在测试环境上进行编译的版本为Release(本身本地代码运行时是可以看见堆栈的,所以在测试站点环境上没必要Debug模式,保证和生产环境模拟的几乎一致)。

2、第1步操作完成后,那么测试人员可以根据这些变更进行测试,待完成一系列上线前的测试时,即可使用一键发布测试环境的相关文件到生产环境(实质上是一键复制)。

3、这个一键部署在生产环境时所做的操作是先备份(这里我用rar进行备份)所要更换的目录和文件到指定文件夹存放以便还原(命名上遵循相应的规律,比如项目名+buildid),然后jenkins会从master复制相关的文件到slave的jenkins工作空间上(其实jenkins的工作空间有一定规律,会以相应的项目名称命名文件夹),最后在生产环境上运行批处理文件进行从工作空间的文件替换相关的站点。

具体的实现请参考:(Jenkins实现测试环境到生产环境一键部署)http://www.cnblogs.com/EasonJim/p/6062690.html

以上为部署生产环境的相关操作,在每一次都会生产一个buildid,而备份文件又是项目名+buildid的形式,实现思路如下:

1、jenkins新建项目用于指定的项目进行回滚。

2、安装Build with Parameters的插件,用于指定哪个项目的哪个buildid进行回滚。

3、使用批处理对Build with Parameters的参数进行切割得到相应的项目和buildid,在备份文件夹得到相应的文件,然后用rar进行还原覆盖。

具体的操作如下:

注意:此插件已经在2.x版本集成,官方的插件还是比较新,自由选择使用。

1、先安装Build with Parameters插件(如果安装不了可能地址被墙,可以直接上这个网址http://blog.csdn.net/russ44/article/details/52266953下载离线文件包进行本地上传),安装包之后在新建项目时会出现这样的界面选择:

Jenkins实现生产环境部署文件的回滚操作(Windows)第1张

2、勾选了参数化构建过程之后,点击添加参数会出现如下选项:

Jenkins实现生产环境部署文件的回滚操作(Windows)第2张

根据需要选择相应的参数,这里我直接选择Run Parameter,因为这个可以关联现有项目,也就是下拉框,不用自己输入,其实输入参数会有输错的情况,也是非常不便捷的。

选择好Run Parameter之后,根据自己的项目进行输入,我的输入如下:

Jenkins实现生产环境部署文件的回滚操作(Windows)第3张

3、完成之后,那么我们需要进行批处理处理,点击添加构建步骤,这里根据需要,可以是windows或者linux的,我这里是windows的批处理

Jenkins实现生产环境部署文件的回滚操作(Windows)第4张

然后把批出全部写好,这里我提供一个我自己的特殊批处理:

Setlocal enabledelayedexpansion
set "projectKey=WH_DN_"//rem项目替换的key
set "bakUrl=d:wwwrootwh_dnak"//ren备份文件夹存放的目录
set url="%ProjectName%"//rem上面传入的参数,基本格式:http://localhost:8080/job/WH_DN_Admin/37/
set "rollbackUrl=d:"//rem备份文件夹要还原的位置
set "projectName="
set "buildID="
set url=%url::=/%
set url=%url:///=/%
set url=%url://=/%
//rem这一步实现切割得到ProjectName和BuildID
for /f "tokens=1,2,3,4,5,6* delims=/" %%a in (%url%) do(
 set "projectName=%%e"
 set "buildID=%%f"
)
set projectName=!projectName:%projectKey%=!
set "fileName="
//rem这一步进行bak的文件夹查找根据上面得到的ProjectName和BuildID
for %%a in (%bakUrl%*-%projectName%-%buildID%.bak.rar) do(
 set "fileName=%%a"
)
//rem这一步进行rar的覆盖解压
c:"Program Files"winrar
ar.exe x -ep2 -o+- %fileName% %rollbackUrl%

注意:如果要使用以上批处理,需要把//rem这些舒适去掉,windows的批处理不支持这样的注释。

3、批处理搞定之后,就是构建后的提示功能,这里我直接用邮件的提醒,根据实际需要进行配置,我的配置如下:

Jenkins实现生产环境部署文件的回滚操作(Windows)第5张

最后,需求完美实现!

在项目列表不再是立即构建的按钮,编程了Build with Parameters,如下:

Jenkins实现生产环境部署文件的回滚操作(Windows)第6张

非常的清晰!

最后是部署环境拓扑图和流程:http://www.cnblogs.com/EasonJim/p/6007669.html

免责声明:文章转载自《Jenkins实现生产环境部署文件的回滚操作(Windows)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jmeter基本问题算法第二章上机实践报告下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

@Transactional注解失效

一、特性 先来了解一下@Transactional注解事务的特性吧,可以更好排查问题 1、service类标签(一般不建议在接口上)上添加@Transactional,可以将整个类纳入spring事务管理,在每个业务方法执行时都会开启一个事务,不过这些事务采用相同的管理方式。 2、@Transactional 注解只能应用到 public 可见度的方法上。...

Jenkins构建自由风格的项目

Jenkins构建的项目类型介绍Jenkins中自动构建项目的类型有很多,常用的有以下三种:自由风格软件项目(FreeStyle Project)Maven 项目(Maven Project)流水线项目( Pipeline Project) 每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需...

Jenkins配置Gogs webhook插件

前言 我们在前面使用Jenkins集合Gogs来进行持续集成的时候,选择的是Jenkins定时检测git仓库是否有更新来决定是否构建。也就是说,我们提交了代码Jenkins并不会马上知道,那么我们可以通过webhook来解决。Jenkins的插件中心已经有对gogs的支持,真的是非常赞。 https://plugins.jenkins.io/gogs-w...

jenkins 启动被杀死

1.重设环境变量build_id   在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的tomcat进程   2.在启动jenkins 的时候禁止jenkins杀死衍生进程     修改/etc/sysconfig/jenkins配置,在JENKINS_JAVA_OPTIONS中加入-Dhud...

Jenkins配置MSBuild时使用环境变量

【MSBuild Plugin】插件在使用环境变量有个很奇葩的方式,比如我们通常在Windows的节点机器上,使用WORKSPACE环境变量时,批处理应该这样写%WORKSPACE%,而有时插件确不能正常识别,那么只能换回Linux的写法${WORKSPACE}的形式。 【MSBuild Build File】和【Command Line Argument...

Windows bat批处理删除指定N天前的文件

Windows下bat批处理,自动获取文件的最后修改时间,然后将指定多少天之前的文件删除,需要Windows支持forfiles命令,XP及以上系统都自带forfiles命令。 删除指定目录下7天前的文件(目录为C: est): forfiles /p"c: est"/s /m *.* /d -7 /c "cmd /cdel@path" 删除批处理文件当前...