前提条件:

1、必须有两台服务器,一个是生产环境,另一个是测试环境。

2、两台服务器上都必须安装了Jenkins。

3、其中,生产环境上的Jenkins已经开通的CLI的权限(Windows参考:http://www.cnblogs.com/EasonJim/p/6086018.html)。

4、jenkins-cli.jar文件放在"Jenkins\war\WEB-INF\jenkins-cli.jar"。

5、思路参考:http://www.cnblogs.com/EasonJim/p/6086168.html

实现思路:

1、生产环境的Jenkins有两个工程解压和还原

2、测试环境的Jenkins有两个工程部署和回滚

3、测试环境部署工程时先压缩现有测试站点的包,通过FTP上传,完成后通过CLI调用生产环境的Jenkins解压工程进行解压(解压之前先备份)

4、测试环境回滚工程时,通过CLI通知生产环境的Jenkins还原工程进行解压(得到上一次部署时的备份包,还是解压之前先备份,最后解压)

具体实现步骤:

1、在生产环境的Jenkins配置一个解压操作的工程用于部署和一个还原工程用于回滚

解压:

命令行:

echo [INFO] 备份压缩操作
call C:\"Program Files"\WinRAR\Rar.exe a -x*\Upload* -x*\ueditor* -x*\UploadFolder* %FilePath%.bak.rar %UnzipPath%
echo [INFO] 解压操作
call c:\"Program Files"\winrar\rar.exe x -ep2 -o+- %FilePath% %UnzipPath%

说明:

先备份再解压,也就是说每一次操作之前都要备份。

1)部署时,比如上传的文件名为1.rar,那么备份文件为1.rar.bak.rar。

还原:

命令行:

echo [INFO] 备份压缩操作
call C:\"Program Files"\WinRAR\Rar.exe  a -k -r -s -m1 -x*\Upload* -x*\ueditor* -x*\UploadFolder* -x*\Web.config -x*\DownloadFile* -x*\ErrorLog* -x*\LogFiles* %FilePath%-%BUILD_ID%.restorebak.rar %UnzipPath%
echo [INFO] 解压操作
set "url=%UnzipPath%"
call c:\"Program Files"\winrar\rar.exe x -ep2 -o+- %FilePath% %url:~0,3%

说明:

先备份再解压,也就是说每一次操作之前都要备份。

0)压缩时我加入了buildid作为参数,避免还原同一个时会重复的问题。

1)回滚时,比如上传备份的文件名为1.rar.bak.rar,那么回滚操作备份文件为1.rar.bak.rar.restorebak.rar。

2)这里由于上面备份的压缩包是全路径的,所以我用字符串切割提取到盘符直接解压。

2、在测试环境的Jenkins上配置两个工程,一个是部署,另一个是回滚

部署:

1)先在测试环境上备份要上传的包

2)使用FTP插件进行上传到生产环境

3)用CLI调用生产环境的解压Job进行解压

命令行:

echo [INFO] 压缩要上传的文件,这里已经排除了一些文件
cd D:\wwwroot\
call C:\"Program Files"\WinRAR\Rar.exe a -k -r -s -m1 -x*\Upload* -x*\ueditor* -x*\UploadFolder* -x*\Web.config -x*\DownloadFile* -x*\ErrorLog* -x*\LogFiles* -ag{%BUILD_ID%.push} D:\wwwroot\
move %BUILD_ID%.push.rar %workspace%

说明:由于rar压缩的时候会带上全路径,所以我先cd进入到要备份的文件夹,然后a进行备份,这里要使用-ag参数备份时才是相对路径,由于ftp插件只能上传workspade的文件,所以最后把它移动到workspace。

特别说明,我这里的备份都是有规律的,比如:buildid.push.rar

然后是通过CLI远程命令进行远程调用生产环境的解压工程Unzip:

命令行:

echo [INFO] 通过CLI调用公网Jenkins进行解包
java -jar "C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar" -s http://192.168.1.10:8888/ build Unzip -p FilePath=d:\%BUILD_ID%.push.rar -p UnzipPath=d:\wwwroot --username test --password test

说明:这个就是上面生产环境的解压Unzip工程,参数是工程约定的

完成!

回滚:

在测试环境上新建还原工程,并增加ProjectName的参数,这个参数指定上面的部署工程,功能为获得BuildID

命令行:

echo [INFO] 通过CLI调用公网Jenkins进行解包
Setlocal enabledelayedexpansion
set url="%ProjectName%"
set "buildID="
set url=%url::=/%
set url=%url:///=/%
set url=%url://=/%
for /f "tokens=1,2,3,4,5,6* delims=/" %%a in (%url%) do (set "buildID=%%f"
)
java -jar "C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar" -s http://192.168.1.10:8888/ build Restore -p FilePath=E:\%buildID%.push.rar.bak.rar -p UnzipPath=E:\wwwroot --username test --password test

说明:上面通过ProjectName的参数获取BuildID,然后通过CLI远程调用生产环境的Restore工程,其中%buildID%.push.rar.bak.rar就是部署工程备份的压缩包,有规律的。

全部完成。

总结:

其实基于FTP上传的方案也是有回滚操作的!只不过这些接口来回调用通过CLI的形式。

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

Jenkins使用FTP进行一键部署及回滚(Windows)相关推荐

  1. Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)

    前提: 这一篇是继上一篇http://www.cnblogs.com/EasonJim/p/6092938.html的真实项目实践. 思路和大致实现步骤请参照上一篇文章. 注意:这篇文章涉及到两台服务 ...

  2. jenkins结合ansible用shell实现自动化部署和回滚

    最近用jenkins+gitlab+ansible做持续化集成,自动化部署和版本回滚.然而deploy plugin没能做到增量升级和回滚操作,折腾了很久决定自己写个脚本来简单实现. 环境: cent ...

  3. 个人博客,懒人终章部署,阿里云Ecs+Jenkins+Gitee自动,一键部署SpringBoot自己博客项目,还在用

    阿里云Ecs+Jenkins+Gitee自动,一键部署SpringBoot自己博客项目: 最近看见网上很多Jenkins的自动部署SpringBoot的Demo,但是都要自己安装JDK,Maven.. ...

  4. 企业里实现代码自动部署、回滚的解决方案——Caphub

    上周给大家介绍了capistrano,它可以帮助我们来解决代码自动部署与回滚的软件,但这个软件还是有点缺点,比如如果你同时有多个项目的时候,就得创建多个目录,然后每次进行代码更新的时候,进入到不同的目 ...

  5. Serverless化让服务部署和回滚更快乐

    导读: 今年,阿里巴巴即将迎来线上业务全面上云,在这样宏大的工程背后会有哪些精彩有趣的细节?这次我们采访了阿里巴巴云研发部创新产品方向负责人林帆老师,从 Serverless 技术落地这个主题来一窥究 ...

  6. Tomcat 自动部署、回滚(java project)脚本

    Tomcat 自动部署 自动部署java项目,从打包服务器scp项目war到本地,本地启动tomcat #!/bin/bash #################################### ...

  7. 【Kubernetes】Pod学习(十五)Deployment部署的回滚、暂停和恢复

    此文为学习<Kubernetes权威指南>的相关笔记 学习笔记: Deployment具备升级的功能,允许我们在运行过程中升级Deployment到新的运行版本,与之对应的是,在某些情况下 ...

  8. tomcat自动化部署(拉取\备份、部署、更新、回滚)

    一.传统部署方式及优缺点 1.传统部署方式 (1)纯手工scp (2)纯手工登录git pull.svn update (3)纯手工xftp往上拉 (4)开发给打一个压缩包,rz上去:解压 2.缺点 ...

  9. 自动化代码部署、代码回滚、命令执行软件之capistrano

    Hi,本周第一天没什么事,所以就先分享一下我研究自动化代码部署与回滚软件的经验.这个软件有什么用途?主要是解决自动进行代码的部署,避免手动部署时出现错误,节省时间,同时在出现问题的时候,能回滚到之前的 ...

最新文章

  1. python【蓝桥杯vip练习题库】ALGO-118连续正整数的和(枚举优化)
  2. 计算机竞赛作文,计算机打字比赛作文例文
  3. 三种excel 多条件计数方法
  4. 使用postman发送HttpServletRequest请求
  5. Linux内核中的内存屏障(转)
  6. php获取网页js中的json,从php获取json数据使用js读取显示到网页笔记
  7. mtu设置失败_Oracle RAC该调整网卡MTU值
  8. 丰巢回应小学生用照片“刷脸”取件;苹果明年或发布四款 5G 手机;Spring Boot 2.2.0 发布 | 极客头条...
  9. 遵义 计算机应用能力,遵义市人力资源和社会保障局
  10. android中使用setVideoURI()播放视频
  11. C#导出图片到EXCEL|【NPOI】导出Excel带图片
  12. 学机器学习怎么可以不知道最小二乘法
  13. sql统计各分数段人数示例
  14. 互联网金融想革中国金融体系的命?
  15. 学习网络攻防,有什么渠道?
  16. 小米手机4S超简单刷成开发版获得ROOT超级权限的流程
  17. Spark四大组件包括Spark Streaming、Spark SQL、Spark MLlib和Spark GraphX。
  18. android oreo 老机型,Android Oreo 通知新特性,这坑老夫先踩了
  19. 假如ACMer有技能,你会选择哪个职业..
  20. 有什么音质好的降噪蓝牙耳机?五款平价主动降噪蓝牙耳机分享

热门文章

  1. Silverlight:纠结的快捷键问题
  2. 【linux】Can't connect to local MySQL server through socket和Plugin 'auth_socket' is not loaded报错...
  3. 软件推荐:Microsoft To-Do
  4. dedecms 封面模板和列表模板有什么不同
  5. SSISDB1:使用SSISDB管理Package
  6. enjoyable parameter in pgbouncer
  7. IEC61850报告服务(报文解析)
  8. [CTO札记]Disney也进军数字出版市场了
  9. async spring 默认线程池_Spring定时任务高级使用篇
  10. sliverappbar高度,SliverAppBar的最小高度(颤振)?