由于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下载离线文件包进行本地上传),安装包之后在新建项目时会出现这样的界面选择:

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

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

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

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

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

Setlocal enabledelayedexpansion
set "projectKey=WH_DN_"//rem项目替换的key
set "bakUrl=d:\wwwroot\wh_dn\bak\"//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\rar.exe x -ep2 -o+- %fileName% %rollbackUrl%

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

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

最后,需求完美实现!

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

非常的清晰!

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

Jenkins实现生产环境部署文件的回滚操作(Windows)的更多相关文章

  1. 用Helm部署Kubernetes应用,支持多环境部署与版本回滚

    1 前言 Helm是优秀的基于Kubernetes的包管理器.利用Helm,可以快速安装常用的Kubernetes应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离.现在 ...

  2. Jenkins使用FTP进行一键部署及回滚(Windows)

    前提条件: 1.必须有两台服务器,一个是生产环境,另一个是测试环境. 2.两台服务器上都必须安装了Jenkins. 3.其中,生产环境上的Jenkins已经开通的CLI的权限(Windows参考:ht ...

  3. Spring Boot (二)集成Jsp与生产环境部署

    一.简介 提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下S ...

  4. 第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1

    第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1 1.检查系统是否安装了python [root@192 ~]# rpm -qa ...

  5. 八、SpringBoot生产环境部署

    1.下载安装Tomcat 下载地址:https://tomcat.apache.org/download-90.cgi 如下图所示: 2.入口类继承SpringBootServletInitializ ...

  6. Spring Boot 集成Jsp与生产环境部署

    一.简介 提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下S ...

  7. Django + Uwsgi + Nginx 的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归 ...

  8. Centos7 HyperLedger Fabric 1.4 生产环境部署

    Kafka生产环境部署案例采用三个排序(orderer)服务.四个kafka.三个zookeeper和四个节点(peer)组成,共准备八台服务器,每台服务器对应的服务如下所示: kafka案例网络拓扑 ...

  9. 深度学习Tensorflow生产环境部署(上·环境准备篇)

    最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...

随机推荐

  1. ssh 免密码设置失败原因总结

    先复习一下设置ssh免密码操作的步骤: 进入主目录 cd 生成公钥 ssh-keygen -t rsa -P '' (注:最后是二个单引号,表示不设置密码) 然后分发公钥到目标机器 ssh-copy- ...

  2. 大圆满的精髓–肯•威尔伯(KEN WILBER)

    作者:肯·威尔伯(Ken Wilber),目前被公认为是“后人本心理学”的最重要的思想家.理论家和发言人,其影响已经跨越了心理学领域,波及哲学和神学领域.由于肯·威尔伯在意识领域的研究极富基础性和开创 ...

  3. 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

    这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...

  4. 一个用react+nodejs实现的笔记本小应用

    寒假回家产品经理一直叮嘱着要继续做学校团队的辣个项目,但是...,我到现在一点都还没做,而且还销声匿迹躲了起来藏了几天,是的我干了票大的,想把项目用一种新的架构实现了,所以这几天一直在偷偷摸摸的做一些 ...

  5. .net框架中少有人知的扩展cmod

    最近在利用metadata api抽取.net的原数据信息,发现了不少“坑”,也发现了不少常年用着c#的人都不知道的扩展. 说到.net原数据的可扩展性,第一个让人能想到的就是CustomAttrib ...

  6. 数据库系统原理——ER模型与关系模型

    原文链接: http://blog.csdn.net/haovip123/article/details/21614887 犹记得第一次看<数据库系统原理>时看天书的感觉,云里雾里:现在已 ...

  7. HIbernate的基本包——八个,详细条目

    antlr-2.7.6commons-collections-3.1dom4j-1.6.1hibernate3javassist-3.9.0.GAjta-1.1slf4j-api-1.5.8slf4j ...

  8. 揭秘PHP匿名函数

    揭秘PHP匿名函数 定义:匿名函数就是没有名字的函数. 有2种形式的匿名函数: 形式1:将一个匿名函数"赋值"给一个变量--此时该变量就代表该匿名函数了! 形式2: 是直接将一个匿 ...

  9. 模块(modue)的概念:

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...

  10. 【BZOJ 1007】【HNOI 2008】水平可见直线 解析几何

    之前机房没网就做的这道题,用的解析几何判断交点横坐标 #include<cmath> #include<cstdio> #include<cstring> #inc ...