jenkins实现生产环境部署文件的回滚操作

Jim Jim     2022-08-08     428

关键词:

由于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

线上环境的回滚机制

【场景描述】你是否遇到过这种情况,在正常运行的线上环境下要要重新发布一个项目,【正常的操作如下】:   1、先把tomcat关掉;   2、删掉tomcat下的项目文件(按需备份),把war包放在tomcat对应正确路... 查看详情

South 的回滚应该如何工作?

...困惑。假设我们有一个带有South迁移的Django项目。目前,生产项目版本为A,开发中版本为B。现在让我们假设版本B已安装到生产环境中:安装新代码运行./manage.pysyncdb&&./manage.pym 查看详情

jenkins实现代码的部署&回滚

一、Jenkins介绍   Jenkins是一个独立的开源软件项目,是基于Java开发的一款CI(持续集成)&CD(持续交付)工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台。可用于各类自动化任务,比如构建、测试和... 查看详情

jenkins+gitlab通过脚本自动部署回滚web项目版本至服务器集群(测试环境和正式环境),图文详细(代码片段)

扩展文章:Gitlab+Jenkins通过钩子实现自动部署web项目一:基础环境介绍及准备不在通过钩子自动部署至web服务器,需要自己通过脚本在Jenkins选择版本或者服务器发布回滚。灵活性更高,对于集群来说也实用。1&#... 查看详情

jenkins一个通用的pipline模版,区分部署回滚,支持参数化构建,多环境,多节点(代码片段)

...认证defSSH_CREDENTIAL="/root/.ssh/"defSSH_KEY="/home/jenkins/.ssh/"pipeline//拉去go环境镜像agentdockerlabel 查看详情

jenkins与gitlib实现自动化部署与持续构建

持续部署之jenkins与gitlab(一)主要部分安装部署Jenkins和gitlib了解gitlib的常用命令部署haproxy与tomcat环境配置Jenkins使用gitlib更新代码通过sonar实现代码检测实现gitlib触发Jenkins自动部署通过Jenkins实现自动部署实现haproxy动态添加删除... 查看详情

使用 jenkins 进行持续部署

】使用jenkins进行持续部署【英文标题】:continuousdeploymentwithjenkins【发布时间】:2012-12-0805:18:30【问题描述】:我想用jenkins部署到测试环境和生产环境。为此,我需要连接到所需环境的服务器,例如ssh/scp。我想知道最好的方法... 查看详情

如何使用 Jenkins 部署多个 SpringBoot 环境?

】如何使用Jenkins部署多个SpringBoot环境?【英文标题】:HowtodeploymultipleSpringBootenvironmentswithJenkins?【发布时间】:2016-10-2409:31:33【问题描述】:在thisquestion之后,我创建了我的Jenkins构建,我使用它从带有gradle的springboot启动tomcat服... 查看详情

云原生devops:cicd持续集成|交付|部署

@TOC基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署一、持续集成为了让程序代码可以自动推送到测试环境基于Do... 查看详情

jenkins一个通用的pipline模版,区分部署回滚,支持参数化构建,多环境,多节点(代码片段)

使用的docker镜像进行构建的,git认证,ssh认证都在镜像中//开发环境defDEPLOY_DEV_HOST=['10.10.1.2','10.10.1.3','10.10.1.4']//测试环境defDEPLOY_TEST_THOST=['10.10.1.12','10.10 查看详情

jenkins一个通用的pipline模版,区分部署回滚,支持参数化构建,多环境,多节点(代码片段)

使用的docker镜像进行构建的,git认证,ssh认证都在镜像中//开发环境defDEPLOY_DEV_HOST=['10.10.1.2','10.10.1.3','10.10.1.4']//测试环境defDEPLOY_TEST_THOST=['10.10.1.12','10.10 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置ansible主配置文件编写配置清单编写下载apache的playbook修改apache配置文件最终目录结构如下jenkins测试配置用户设置jenkins部署部署测试在测试环境测... 查看详情

jenkins实现项目自动部署

背景整体思路实现方式1自动化部署脚本2远程执行3配置jenkins任务背景之前给公司搭建过一套gitlab+gerrit+jenkins的持续集成环境,由于操作起来有点繁琐,自己也没太搞清楚该怎么用,所以一直就只用了gitlab来做代码管理。最近要... 查看详情

如果实现oracle中ddl语句的回滚

如题,大家都知道DDL是自动提交的语句,那么有没有办法实现撤消已经成功执行的DDL或相应组件能实现这样的功能?比如我要修改表T的结构,其中分别要删除字段A,执行成功了,然后再修改字段B的类型由字符类型改变为数字类... 查看详情

jenkins+github实现项目自动化部署(代码片段)

服务器配置:操作系统:CentOS7.664位CPU:1核内存:2GB公网带宽:1Mbps一、安装JavaSDK1、进入根目录,查看是否有Java环境$cd/$java-version有环境:无环境:2、若已经有环境,则直接去安装nginx,若无环境,这里我们安装java-1.8.0//检索`y... 查看详情

jenkins实战之jenkins安装部署

...本文档所介绍的内容适用于日常测试/生产环境等常见的jenkins应用环境部署】由于jenkins的安装是运行在java环境中,所以安装前需要部署java相关环境一:java环境部署前准备:1.1相关软件以及系统系统要求:Centos6.0(以上)(64位)相关... 查看详情

在生产环境中使用代码优先降级(回滚)数据库

】在生产环境中使用代码优先降级(回滚)数据库【英文标题】:Downgrade(Rollback)Databasewithcode-firstinproductionenvironment【发布时间】:2015-10-1705:58:17【问题描述】:我有一个网络应用程序,我安装在客户的计算机上供他们内部使用... 查看详情

jenkins环境搭建部署实现代码自动化发布

一、jenkins代码自动部署1.配置免密钥通信实现自动化部署首先要解决的是免密码传输,配置jenkins至测试服务器之间免密钥ssh登录650)this.width=650;"src="https://images2015.cnblogs.com/blog/1056769/201703/1056769-20170323102823299-1325450148.png"/>测试免密... 查看详情