Jenkins使用FTP进行一键部署及回滚(Windows)
前提条件:
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的形式。
Jenkins使用FTP进行一键部署及回滚(Windows)的更多相关文章
- Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)
转载:http://www.cnblogs.com/EasonJim/p/6295372.html Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践) 前提: 这一篇是继上一 ...
- jenkins结合ansible用shell实现自动化部署和回滚
最近用jenkins+gitlab+ansible做持续化集成,自动化部署和版本回滚.然而deploy plugin没能做到增量升级和回滚操作,折腾了很久决定自己写个脚本来简单实现. 环境: cent ...
- PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版)
PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版) 先看流程图: 大概介绍一下: 版本选择使用jenkins 中的 git parameter 插件实现 回滚方式 ...
- 使用Jenkins结合Gogs和SonarQube对项目代码进行测试、部署、回滚,以及使用keepalived+haproxy调度至后端tomcat
0 环境说明 主tomcat:192.168.0.112 备tomcat:192.168.0.183 haproxy+keepalived-1:192.168.0.156 haproxy+keepal ...
- Jenkins 搭建企业实战案例 (发布与回滚)
让我们的代码部署变得easy,不再难,Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins非常易于安装和配置,简单易用 ...
- 9.2 k8s结合Jenkins与gitlab实现代码升级与回滚
1.部署Jenkins 1.1 安装jdk # apt 安装jdk11 apt install openjdk-11-jdk # 查看 root@jenkins:~# java -version op ...
- 在Azure DevOps Server(TFS系统)中部署回退/回滚方案(Rollback)
概述 Azure DevOps Server(之前名TFS)是微软公司实现软件研发.测试和部署一体化的全流程解决方案.在近几年的研发过程中,Azure DevOps Server 大幅增强了软件部署过 ...
- Jenkins:参数化构建:分支|模块|回滚|打印日志
@ 目录 多分支 安装Git Parameter Plug-In 配置参数 选择构建分支 分模块 前提 分模块build 参数配置 分模块shell脚本 mvn 的基本用法 分模块运行 Jenkins ...
- 使用Jenkins实现maven项目一键部署
下面的博客请详细的,值得一看:jenkins+maven+svn实现简单的一键发布 http://blog.csdn.net/pein_zero/article/details/52597615#co ...
随机推荐
- SQL Server DB Type and CLR Type
这段时间学习SQL Server CLR编程,但是SQL CLR编程,里面所使用的数据类型为CLE TYPE,它多少与 Db TYPE有些区别,在网上找到一个列表http://geekswithblo ...
- Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)
在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...
- C#命名空间的嵌套
namespace abc.e.f//等价于下面分层嵌套的写法.且这种写法不管命名空间abc有没有定义过,也不管命名空间e有没有定义过 { class ctest { public void func ...
- Java 密码扩展无限制权限策略文件
因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制.比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件. 官方网站提供了JCE无限制权限策略文件的下载: ...
- hadoop家族之pig入门
昨天成功运行第一个在hadoop集群上面的python版本的wordcount,今天白天继续看网上提供的文档.下午上头给定的回复是把hadoop家族都熟悉一下,那就恭敬不如从命,开始学习pig吧- 这 ...
- 从Hadoop Summit 2016看大数据行业与Hadoop的发展
前言: 好吧我承认已经有四年多没有更新博客了.... 在这四年中发生了很多事情,换了工作,换了工作的方向.在工作的第一年的时候接触机器学习,从那之后的一年非常狂热的学习机器学习的相关技术,也写了一些自 ...
- 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式
一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...
- java并发:线程同步机制之Volatile关键字&原子操作Atomic
volatile关键字 volatile是一个特殊的修饰符,只有成员变量才能使用它,与Synchronized及ReentrantLock等提供的互斥相比,Synchronized保证了Synchro ...
- C语言字符串与数字相互转换
在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串.字符串是以“\0”作为结束符.C/C++提供了丰富的字符串处理函数,下面列出了几个最常用的函数. ● 字符串输出函数puts. ● ...
- SVN——配置和安装
SVN安装步骤: 所有安装文件下载地址:http://pan.baidu.com/s/1bocNTDl 一.安装01----VisualSVN-Server-3.4.2-x64.msi 文件 直接下一 ...